【发布时间】:2021-11-19 12:32:22
【问题描述】:
您好,我已将我的局部变量声明如下,
locals {
incoming_messages_queue = local.production == 1 ?
["${aws_sqs_queue.my_queue1.arn}",
"$"{aws_sqs_queue.my_queue2.arn}] :
["${aws_sqs_queue.my_queue1.arn}]
}
现在基于环境,即只有在生产时,我想创建一个允许两个队列的策略,或者在策略中只允许一个队列,如下所示,
resource "aws_iam_role_policy" "myservice_service_messaging" {
role = aws_iam_role.myservice_service.name
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:CreateTopic",
"sns:Publish"
],
},
{
"Effect": "Allow",
"Action": [
"sqs:GetQueueUrl",
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:ChangeMessageVisibility"
],
"Resource": "${local.incoming_messages_queue}" #==> How to handle here based on condition
},
.................
POLICY
}
基本上,如果条件为真,我想在策略中添加多个资源,如果条件为假,我只想在策略中添加一个资源。我也尝试了 for 循环,它在政策下不起作用。有人可以解释一下我该如何解决这个问题吗?
【问题讨论】:
-
您是在问如何将 HCL2 列表转换为 JSON 字符串列表?您只需使用
jsonencode函数。 -
我没有使用 jsonencode ,因为当我尝试它时,我收到以下错误“重复资源“aws_iam_role_policy”配置”。当我使用 policy =
-
将 HCL2 转换为 JSON 不会导致重复声明错误。
标签: amazon-web-services terraform amazon-iam