【发布时间】:2020-04-13 17:54:17
【问题描述】:
我正在使用 terraform 在 AWS 中创建一个角色。由于 IAM 是非区域服务,我只想创建一次角色。所以每当我运行 terraform 时,它应该检查角色是否已经存在,如果不存在,它应该创建一个。
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:
【问题讨论】:
-
这是 terraform 默认执行的操作。检查资源是否已经存在,如果不存在则创建一个
-
只有当我有 .tfstate 文件时才这样。例如,如果我正在为 us-east-1 和预置资源创建工作区,则现在在 AWS 中创建角色,并且 .tfstate 文件位于工作区 us-east-1 下。如果我为 us-east-2 再创建一个工作区并再次运行 terraform 会怎样,因为没有 .tfstate 文件,它将再次尝试配置该角色。我的要求是在所有 AWS 区域中运行相同的 terraform(具有 lambda 函数以在所有区域中部署)并且只配置一次角色。
-
添加了我的答案。我认为您应该编辑帖子,因为您描述的场景仅通过阅读帖子并不清楚
标签: amazon-web-services aws-lambda terraform terraform-provider-aws