Как объявить управляемый ресурс в подпапке Terraform - PullRequest
1 голос
/ 29 сентября 2019

Структура:

.
├── aws
│   ├── master
│   │   ├── accounts.tf
│   │   ├── dynamodb.tf
│   │   ├── main.tf
│   │   ├── organization.tf
│   │   └── s3.tf
│   └── ou
│       └── dev2
│           └── dev2_foo
│               └── main.tf
├── main.tf

Файл tfstate находится в s3 и имеет блокировку DynamodB. Ваш субсчет загружен как модуль в main.tf

module "aws_dev2_dev2_foo" {
         source         = "./aws/ou/dev2/dev2_foo"
}

в

aws/ou/dev2/dev2_foo/main.tf

Я пытаюсь принять на этот счет:

provider "aws" {
         alias          = "assume"
         region         = "eu-central-1"
         profile        = "terraform"
         assume_role {
            role_arn = "arn:aws:iam::${aws_organizations_account.devteam02.id}:role/terrasume"
            session_name = "terraforming"
         }
}

resource "aws_iam_account_alias" "alias" {
  provider = "aws.assume"
  account_alias = "dev02_devteam02-foo"
}

Я получаю эту ошибку, если я запускаю terraform:

Управляемый ресурс "aws_organizations_account" "devteam02" не был объявлен в aws_dev2_dev2_foo. В этом сценарии: Как я могу объявить этот управляемый ресурс?

Ресурс был объявлен внутри aws / master / accounts.tf :

resource "aws_organizations_account" "devteam02" {
  name      = "devteam02"
  email     = "john@devteam02.loc"
  role_name = "terrasume"
  parent_id = "${aws_organizations_organizational_unit.dev2_foo.id}"

  lifecycle {
    ignore_changes = ["role_name"]
  }

}

1 Ответ

0 голосов
/ 29 сентября 2019

Вам необходимо передать ресурс aws_organizations_account.devteam2 в качестве переменной в модуль.

В aws/ou/dev2/dev2_foo создайте переменнуюs.tf. Это сохранит входную переменную в вашем модуле dev2_foo.

Содержимое может быть примерно таким:

variable "other_aws_org_id"
{
  type = string
}

Затем в main.tf вам нужно инициализировать эту переменную при вызове модуля. например,

module "aws_dev2_dev2_foo"
{
  source = "./aws/ou/dev2/dev2_foo"
  other_aws_org_id = "${aws_organizations_account.devteam02.id}"
}

Затем в вашем модуле main.tf измените блок поставщика на что-то вроде

provider "aws"
{
  alias = "assume"
  region = "eu-central-1"
  profile = "terraform"
  assume_role  
  { 
    role_arn = "arn:aws:iam::${var.other_aws_org_id}:role/terrasume"
    session_name = "terraforming"
  } 
}

https://www.terraform.io/docs/configuration/variables.html

...