【发布时间】:2019-09-29 15:00:56
【问题描述】:
结构:
.
├── aws
│ ├── master
│ │ ├── accounts.tf
│ │ ├── dynamodb.tf
│ │ ├── main.tf
│ │ ├── organization.tf
│ │ └── s3.tf
│ └── ou
│ └── dev2
│ └── dev2_foo
│ └── main.tf
├── main.tf
tfstate 文件在 s3 中并且有一个 dynamodb 锁。 ou 子账户作为模块加载到 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"]
}
}
【问题讨论】:
-
您需要使
aws_organizations_organizational_unit.dev2_foo.id成为master模块的输出,并在相同的根模块配置中声明它。然后,将该输出用作带有声明变量的aws_dev2_dev2_foo的输入变量。给出一个相关的例子很困难,因为提供的代码 sn-ps 与您的问题有些相切。
标签: amazon-web-services resources terraform declare