如何仅在不存在时才创建地形资源



我正在使用terraform在AWS中创建角色。由于 IAM 是非区域服务,因此我只想创建一次角色。因此,每当我运行地形时,它都应该检查该角色是否已存在,如果不存在,它应该创建一个。

data "aws_iam_role" "iam_role_check" {
name = "some_role"
}
resource "aws_iam_role" "iam_role" {
count= "${data.aws_iam_role.iam_role_check != "null" ? 0 : 1}"
name = "some_role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}

data.aws_iam_role.iam_role_check:刷新状态...

错误:读取 IAM 角色 (some_role( 时出错:NoSuchEntity:具有 找不到名称some_role。 状态代码:404,请求 ID:

我认为这种情况最简单的解决方案是仅为共享资源创建一个单独的状态,并在运行其他状态之前对其运行应用程序

没有已知的方法,因为它是设计原则,请参阅此 GitHub 问题。

我认为根据需要创建尽可能多的角色并没有错。可以在角色名称中包含一些区分位,例如部署名称或环境。您可能还希望将一些常见配置与其他"通用"地形部署分开,并仅使用其他位置的数据源。

当无法为同一事物设置多个实例时,例如用于Amazon Elasticsearch Service的AWSServiceRoleForAmazonElasticsearchService,例如Cloud Posse,如果应该在其terraform Elasticsearch模块中创建角色,则创建一个简单的变量,请在 README.md 中搜索create_iam_service_linked_role。

我遇到了类似的问题。我编写了一个python脚本来检查IAM角色是否存在。基于此,它将在 tfvar 文件中设置 count 变量值 (0/1(。 仅使用地形,这是无法实现的。

相关内容

  • 没有找到相关文章

最新更新