我正在尝试使用 Terraform 设置链接到 AWS S3 存储桶的雪花“存储集成”对象。除了标准的 AWS 提供程序之外,我还在使用 Terraform 注册表中的“chanzuckerberg”Snowflake 提供程序。
我遇到的问题是,创建集成的过程的一部分需要以下操作序列:
(完整的步骤列表 here)
因此,IAM 角色和存储集成之间存在循环依赖关系。第 1 步和第 2 步很简单,但我不确定如何使用 Terraform 实现第 3 步,因为涉及在创建对象后修改对象的状态。
很遗憾,IAM 角色访问策略似乎无法独立于角色本身进行修改。
这样的事情是否可能,或者资源之间的循环关系是否意味着 Terraform 无法处理?
答案 0 :(得分:0)
具有 IAM 角色的 Terraform 依赖循环有一个简单的解决方法。可以预先计算角色 ARN,然后集成资源就不再依赖于角色。然后角色可以自由使用集成输出。
示例代码:
locals {
role_name = "my_role"
role_arn = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/${local.role_name}"
}
resource "snowflake_storage_integration" "int" {
storage_aws_role_arn = local.role_arn
...
}
resource "aws_iam_role" "role" {
name = local.role_name
assume_role_policy = jsonencode({
"Version" : "2012-10-17"
"Statement" : [
{
"Action" : "sts:AssumeRole"
"Effect" : "Allow"
"Principal" : {
"AWS" : snowflake_storage_integration.int.storage_aws_iam_user_arn
}
"Condition" : {
"StringEquals" : {
"sts:ExternalId" : snowflake_storage_integration.int.storage_aws_external_id
}
}
}
]
})
}