[英]Reference several aws_iam_policy_document data sources created with for_each in Terraform
我想用for_each
创建多个aws_iam_policy_document
资源,稍后由多个角色承担,如下所示:
# Policy to allow services to assume the role
data "aws_iam_policy_document" "this" {
for_each = var.lambda_configuration
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = [
"lambda.amazonaws.com",
"apigateway.amazonaws.com",
]
}
}
}
# IAM role for executing the Lambda function
resource "aws_iam_role" "this" {
for_each = var.lambda_configuration
name = "my_lambda_${each.key}_Executor_Role"
description = "Role for executing my_lambda-${each.key} function"
assume_role_policy = data.aws_iam_policy_document.assume_role_policy_[each.key].json
}
我应该如何插入这个
assume_role_policy = data.aws_iam_policy_document.assume_role_policy_[each.key].json
与角色做出正确的匹配?
正确的语法:
data.aws_iam_policy_document.this[each.key].json
请注意,这不是插值,正如您在问题中提到的那样。 这只是一个值查找。 我不知道你从哪里得到assume_role_policy_
,但这不是有效的 HCL 语法。
这似乎是在资源之间链接for_each
的好情况,它(主观上)倾向于导致不熟悉的读者更容易理解数据在资源之间流动的方式的配置。
data "aws_iam_policy_document" "this" {
for_each = var.lambda_configuration
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = [
"lambda.amazonaws.com",
"apigateway.amazonaws.com",
]
}
}
}
# IAM role for executing the Lambda function
resource "aws_iam_role" "this" {
for_each = data.aws_iam_policy_document.this
name = "my_lambda_${each.key}_Executor_Role"
description = "Role for executing my_lambda-${each.key} function"
assume_role_policy = each.value.json
}
使用第一个资源本身作为第二个资源的for_each
意味着两者将始终具有完全相同的键(因为带有for_each
的资源在表达式中显示为使用for_each
映射中的键的对象的 map),并且each.value
第二个块中的each.value
是指第一个块的相应实例。
这与使用each.key
对data.aws_iam_policy_document.this
中的元素使用索引运算符 select 具有基本相同的行为,但是使这两个资源之间的关系更加直接,因此(同样,主观上)更易于阅读和维护在未来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.