Структура Terraform для двух аккаунтов AWS - PullRequest
0 голосов
/ 21 июня 2019

У меня есть две учетные записи AWS, одна для разработчиков и другая для продуктов.Я пытаюсь создать те же ресурсы в обеих учетных записях, что и VPC, подсеть и т. Д. Из чтения в Google я получил следующую структуру:

|---- README.md
|---- dev_account
    |---- main.tf
    |---- terraform.tfvars
    |---- variables.tf
|---- prod_account
    |---- main.tf
    |---- terraform.tfvars
    |---- variables.tf
|---- modules
    |---- provider.tf
    |---- vpc.tf
    |---- variables.tf

Вот код, который я использую:

modules / provider.tf

provider "aws" {
  region = "${var.aws_region}"
}

module / vpc.tf

 resource "aws_vpc" "vpc" {
      cidr_block       = "${var.vpc_cidr_block}"
      instance_tenancy = "default"
 }

dev_account / main.tf:

module "create_infra" {
  source = "../modules"

  aws_region = "${var.aws_region}"
  vpc_cidr_block = "${var.vpc_cidr_block}"
}

То же, что и выше Iсоздаст больше модулей, таких как подсеть и вызов из файла main.tf

dev_account / variables.tf

variable "aws_region" {}

variable "vpc_cidr_block" {}

dev_account / terraform.tfvars

aws_region = "us-west-1"
vpc_cidr_block = "10.10.10.0/8"

Это правильный подход?Есть ли лучший способ сделать это?Файл main.tf в dev_account не выглядит корректным, так как будет трудно управлять, скажем, 10 или более ресурсов.

1 Ответ

0 голосов
/ 21 июня 2019

Это действительно соответствует рекомендациям Terraform.Я хотел бы добавить пару замечаний:

Могут быть различия между ресурсами в Dev / Prod.Например, в Dev вы можете использовать экземпляр MySQL, развернутый на компьютере EC2, чтобы сэкономить на затратах, в то время как в Prod вы используете управляемый экземпляр RDS.

Так что один модуль для всей вашей инфраструктуры может быть немного сложен в обслуживании, так какэто начало бы получать много флагов для различных опций (например, MySQL против RDS).Вместо этого вы можете использовать следующую настройку:

modules
  rds
  ec2-mysql

и в вашем dev main.tf вы будете вызывать модуль ec2-mysql, тогда как в prod main.tf вы вызываете модуль rds.

Также может быть момент, когда ваша инфраструктура становится настолько большой, что ее сложно разделить только на основе среды.Например, в Prod вы можете поддерживать несколько микросервисов, базы данных для озера данных и кто что знает.И вы можете захотеть иметь возможность развертывать изменения в озере данных без риска того, что вы обновите что-то в микросервисах.На этом этапе у вас есть два подхода:

  1. Разделить код на несколько репозиториев.Вы можете найти модули terraform по ссылке git.
  2. Перейдите в структуру папок следующим образом:
environment
  dev
    microservices
    data lake

вы могли бы потенциально использовать такой инструмент, как Terragrunt , чтобы упростить эту последнюю настройку

Надеюсь, это дало вам полезный вклад.

...