对循环地形中的两个资源应用相同的数据



我想创建两个具有相同aws_iam_policy_documentaws_sns_topic_policy&time_sleep配置。

这是我的地形,my_sns_topic.tf:

resource "aws_sns_topic" "topic_a" {
name = "topic-a"
}
resource "aws_sns_topic" "topic_b" {
name = "topic-b"
}
data "aws_iam_policy_document" "topic_notification" {
version = "2008-10-17"
statement {
sid = "__default_statement_ID"
actions = [
"SNS:Publish"
]
# Cut off some lines for simplification.
## NEW LINE ADDED
statement {
sid = "allow_snowflake_subscription"
principals {
type        = "AWS"
identifiers = [var.storage_aws_iam_user_arn]
}
actions   = ["SNS:Subscribe"]
resources = [aws_sns_topic.topic_a.arn] # Troubles with this line
}
}
resource "aws_sns_topic_policy" "topic_policy_notification" {
arn    = aws_sns_topic.topic_a.arn
policy = data.aws_iam_policy_document.topic_policy_notification.json
}
resource "time_sleep" "topic_wait_10s" {
depends_on      = [aws_sns_topic.topic_a]
create_duration = "10s"
}

正如您在这里看到的,我只为topic-a设置了配置。我想把这个循环一遍,也申请topic-b

最好使用map和for_each,而不是单独创建"a";以及";b";主题:

variable "topics" {
default = ["a", "b"]
}

resource "aws_sns_topic" "topic" {
for_each = toset(var.topics)
name     = "topic-${each.key}"
}

data "aws_iam_policy_document" "topic_notification" {
version = "2008-10-17"
statement {
sid = "__default_statement_ID"
actions = [
"SNS:Publish"
]
# Cut off some lines for simplification.
}
resource "aws_sns_topic_policy" "topic_policy_notification" {
for_each = toset(var.topics)
arn      = aws_sns_topic.topic[each.key].arn
policy   = data.aws_iam_policy_document.topic_policy_notification.json
}
resource "time_sleep" "topic_wait_10s" {
for_each        = toset(var.topics)
depends_on      = [aws_sns_topic.topic[each.key]]
create_duration = "10s"
}

最新更新