我正在尝试使用Terraform来设置Snowflake"存储集成";链接到AWS S3存储桶的对象。我正在使用";chanzuckerberg";除标准AWS提供商外,Terraform注册表中的Snowflake提供商。
我遇到的问题是,创建集成的部分过程需要以下操作序列:
- 使用S3访问策略创建IAM角色
- 创建Snowflake Storage Integration对象,指定在步骤1中创建的IAM角色
- 使用存储集成对象中的值修改IAM角色访问策略
(此处为完整的步骤列表(
因此,IAM角色和存储集成之间存在循环依赖关系。步骤1和2很简单,但我不确定如何使用Terraform实现步骤3,因为中涉及到在创建对象后修改对象的状态。
遗憾的是,IAM角色访问策略似乎无法独立于角色本身进行修改。
这样的事情可能吗?还是资源之间的循环关系意味着Terraform无法处理?
样本代码:
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
}
}
}
]
})
}
这个模块已经帮助它成为一个交钥匙部署。
https://github.com/Snowflake-Labs/terraform-snowflake-storage-integration
如果有帮助,请告诉我。