【发布时间】:2019-12-01 06:05:57
【问题描述】:
我目前正在处理一个 AWS terraform 项目,其中我有一组用于不同帐户的 ROLE ID(作为变量)。
variable "slave_account_id" {
default = ["5686435678", "9889865446"]
}
这些角色中的每一个都允许我当前的 AWS 账户(与 terraform 链接)在这些账户上部署模块(假设每个账户都有角色 ID)
因此,我想根据变量数组“slave_account_id”为每个角色创建不同的提供者。
我试着这样做:
provider "aws" {
counter = "${length(var.slave_account_id)}"
alias = "aws-assume-${counter.index}"
region = "eu-west-1"
assume_role {
role_arn = "arn:aws:iam::${var.slave_account_id[counter.index]}:role/slave_role_for_master"
session_name = "${var.slave_session_name[counter.index]}"
external_id = "EXTERNAL_ID"
}
}
这样我就打算在我的模块中使用这个代码:
module "my_super_module" {
counter = "${length(var.slave_account_id)}"
providers = {
aws = "aws.aws-assume-${counter.index}"
}
[...]
}
但这不起作用(据我了解,我不能在提供者的别名内“连接”变量,因为必须先定义提供者,然后才能进行插值)。 以下是执行结果(提供者别名部分的错误):
Error: Invalid provider configuration alias
An alias must be a valid name. A name must start with a letter and may contain
only letters, digits, underscores, and dashes.
Error: Duplicate provider configuration
on main.tf line 5:
5: provider "aws" {
A default (non-aliased) provider configuration for "aws" was already given at
main.tf:1,1-15. If multiple configurations are required, set the "alias"
argument for alternative configurations.
Error: Unsuitable value type
on main.tf line 8, in provider "aws":
8: alias = "aws-assume-${counter.index}"
Unsuitable value: value must be known
Error: Variables not allowed
on main.tf line 8, in provider "aws":
8: alias = "aws-assume-${counter.index}"
Variables may not be used here.
Error: Invalid provider configuration reference
on main.tf line 33, in module "my-lambda":
33: aws = "aws.aws-assume-${counter.index}"
A provider configuration reference must not be given in quotes.
所以我有点失落……
如何部署具有角色 ID 列表的模块(每个帐户一个模块)?
【问题讨论】:
-
您可以在提供程序定义中进行插值,尽管我没有尝试在此处使用
count元参数,因此这可能不起作用。当您尝试使用该集合运行时,您会收到错误吗?如果是这样,您可以编辑您的问题以包含它吗?我还想问您是否真的想一开始就同时部署到多个 AWS 账户。 AWS 账户在事物之间提供了很好的分离,并有助于最大限度地减少爆炸半径,所以我很惊讶您想避免这种分离。 -
@ydaetskcoR 我已经添加了执行结果(错误)。这些错误似乎都与提供程序部分中的别名有关。是的,我真的很想部署到多个 AWS 账户 :'( 也许还有另一种方式可以在没有“提供者”的情况下担任角色,但我没有找到......
标签: amazon-web-services module terraform