terraform - 遍历 aws 提供程序以在每个 aws 帐户中创建资源
问题描述
我在 Terraform 中有一个名为 users 的对象列表,结构如下:
variable "accounts" {
type = list(object({
id = string #used in assume_role
email = string
is_enabled = bool
}))
}
我现在想要实现的是在每个 AWS 账户中创建一个简单的 S3 存储桶(如果 is_enabled 为真)。我可以为单个帐户执行此操作,但我不确定是否有办法循环访问提供程序?
单个帐户的代码 - main.tf
provider "aws" {
alias = "new_account"
region = "eu-west-3"
assume_role {
role_arn = "arn:aws:iam::${aws_organizations_account.this.id}:role/OrganizationAccountAccessRole"
session_name = "new_account_creation"
}
}
resource "aws_s3_bucket" "bucket" {
provider = aws.new_account
bucket = "new-account-bucket-${aws_organizations_account.this.id}"
acl = "private"
}
解决方案
您需要为要使用的每个 aws 帐户定义一个提供程序:
- 创建一个模块(即一个目录),您的存储桶配置所在的位置:
├── main.tf
└── module
└── bucket.tf
bucket.tf
应包含资源定义:resource "aws_s3_bucket" "bucket" {...}
- 在
main.tf
中,定义多个 aws 提供者并使用它们中的每一个调用模块:
provider "aws" {
alias = "account1"
region = "eu-west-1"
...
}
provider "aws" {
alias = "account2"
region = "us-west-1"
...
}
module "my_module" {
source = "./module"
providers = {
aws.account1 = aws.account1
aws.account2 = aws.account2
}
}
我想你也可以通过创建一个包含提供程序的变量来获得幻想,并将其传递给模块调用(你也可以使用列表上的过滤器来考虑is_enabled
标志)
有关提供者的更多详细信息:https ://www.terraform.io/docs/language/modules/develop/providers.html
推荐阅读
- javascript - 如何从数组中给 div 随机背景颜色
- android - 如何在意图的帮助下打开活动托管的第 n 个片段?
- c# - 如何拆分具有逗号和空格组合字符的文本?
- apache-spark - 有没有办法使用jobtracker或spark application master确认我提交的spark作业是yarn-client还是yarn-cluster?
- ios - 如何在 Objective-C 和 Swift 中实现“didSelectButtonInCellAtIndexPath:”?
- postgresql - openshift 上的 keycloak 和 postgresql
- javascript - 如何制作基于 Web 的拖放表单构建器?
- ios - 表达式类型不明确,没有更多上下文错误
- json - 使用 json-server 模拟搜索过滤器
- vba - 无法使用以下方法在相关列中写入结果