gpt4 book ai didi

amazon-web-services - 如何在 terraform 中传递 template_file var 部分中的列表而不是字符串

转载 作者:行者123 更新时间:2023-12-05 01:07:05 25 4
gpt4 key购买 nike

我有多个 SQS 队列,并希望在 IAM 策略资源部分中包含这些 SQS 队列 arn。有没有一个体面的方法来做到这一点?我试图将 sqs 队列 arn 列表传递给 var 部分,但看起来 terraform 需要此部分中的字符串

resource "aws_sqs_queue" "sqs_queue" {
count = length(var.sqs_queue)
name = element(var.sqs_queue, count.index)
delay_seconds = 0
max_message_size = var.sqs_max_message_size
message_retention_seconds = var.sqs_message_retention_seconds
receive_wait_time_seconds = 0
}

data "template_file" "lambda_policy" {
template = file(var.lambda_policy)

vars = {
sqs_queues = aws_sqs_queue.sqs_queue[0].arn # want to change this to list of arn's
}
}

这个想法是通过 vars 部分传递 SQS arn 列表,以便在 lambda_policy 文件中的资源部分中替换它

lambda_policy 文件 =>

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:ReceiveMessage",
"sqs:DeleteMessage"
],
"Resource": "${sqs_queues}"
}
]
}

不确定我是否以错误的方式做事,还是有更好的方法来做。想法是堆叠所有创建的sqs队列arns以传递给策略模板文件,因此可以使用这些列表编译策略(在资源部分);并且该策略将在创建时传递给 lambda。

最佳答案

最好用templatefile .所以你可以:

locals {

policy=templatefile(
"${path.module}/lambda_policy.tmpl",
{
sqs_queues = aws_sqs_queue.sqs_queue[*].arn
}
)

}

其中 lambda_policy.tmpl 是:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:ReceiveMessage",
"sqs:DeleteMessage"
],
"Resource": ${jsonencode(sqs_queues)}
}
]
}

关于amazon-web-services - 如何在 terraform 中传递 template_file var 部分中的列表而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67913171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com