Я новичок в terraform, и я использую terragrunt, чтобы помочь мне начать работу. У меня есть достаточное количество инфраструктуры для миграции и настройки с терраформой, но я сначала встаю под ноги. У нас есть несколько VPC в разных регионах с множеством одних и тех же правил группы безопасности, т. Е. (Web, db и т. Д.), Которые я хочу реплицировать в каждом регионе.
У меня есть простой пример того, как я сейчас настроил модуль EC2 для воссоздания правил группы безопасности, и мне было интересно, есть ли лучший способ организовать этот код, чтобы мне не нужно было создавать новый модуль для того же SG Правило для каждого региона? то есть какой-то умный способ использовать списки для моих виртуальных частных сетей, провайдеров и т. д. *
, так как это всего лишь одно правило SG для двух регионов, я стараюсь не допустить, чтобы это становилось все более уродливым, поскольку мы расширяемся до еще большего числа регионов и вводим несколько правил SG
Мое состояние в настоящий момент сохраняется в S3, и в этой настройке я извлекаю состояние, чтобы получить доступ к выходам VPC из другого модуля, который я использовал для создания VPC
terraform {
backend "s3" {}
}
provider "aws" {
version = "~> 1.31.0"
region = "${var.region}"
profile = "${var.profile}"
}
provider "aws" {
version = "~> 1.31.0"
alias = "us-west-1"
region = "us-west-1"
profile = "${var.profile}"
}
#################################
# Data sources to get VPC details
#################################
data "terraform_remote_state" "vpc" {
backend = "s3"
config {
bucket = "${var.vpc_remote_state_bucket}"
key = "${var.vpc_remote_state_key}"
region = "${var.region}"
profile = "${var.profile}"
}
}
#####################
# Security group rule
#####################
module "east1_vpc_web_server_sg" {
source = "terraform-aws-modules/security-group/aws"
version = "2.5.0"
name = "web-server"
description = "Security group for web-servers with HTTP ports open within the VPC"
vpc_id = "${data.terraform_remote_state.vpc.us_east_vpc1_id}"
# Allow VPC public subnets to talk to each other for API's
ingress_cidr_blocks = ["${data.terraform_remote_state.vpc.us_east_vpc1_public_subnets_cidr_blocks}"]
ingress_rules = ["https-443-tcp", "http-80-tcp"]
# List of maps
ingress_with_cidr_blocks = "${var.web_server_ingress_with_cidr_blocks}"
# Allow engress all protocols to outside
egress_rules = ["all-all"]
tags = {
Terraform = "true"
Environment = "${var.environment}"
}
}
module "west1_vpc_web_server_sg" {
source = "terraform-aws-modules/security-group/aws"
version = "2.5.0"
providers {
aws = "aws.us-west-1"
}
name = "web-server"
description = "Security group for web-servers with HTTP ports open within the VPC"
vpc_id = "${data.terraform_remote_state.vpc.us_west_vpc1_id}"
# Allow VPC public subnets to talk to each other for API's
ingress_cidr_blocks = ["${data.terraform_remote_state.vpc.us_west_vpc1_public_subnets_cidr_blocks}"]
ingress_rules = ["https-443-tcp", "http-80-tcp"]
ingress_with_cidr_blocks = "${var.web_server_ingress_with_cidr_blocks}"
# Allow engress all protocols to outside
egress_rules = ["all-all"]
tags = {
Terraform = "true"
Environment = "${var.environment}"
}
}