如何解决资源中的 Terraform 循环以合并地图
我正在尝试在资源中动态设置字典的内容。 在我的情况下,我想设置每个 Lambda 特定的环境变量。我真的不想修改 local.lambda 结构以任何方式,但我不能完全计算出迭代的语法 local.lambda 字典,查找额外的变量,然后动态查找它们的值。关于如何实现这一目标的任何想法?
这是我的本地数据
locals {
lambdas = {
func1 = "myfunc-${local.env}"
func2 = "myfunc-${local.env}"
func3 = "myfunc-${local.env}"
}
envvars = {
myenv1 = "apple"
myenv2 = "pear"
myenv3 = "orange"
}
extra_envvars = {
myenv4 = "lettuce"
myenv5 = "carrot"
myenv6 = "turnip"
}
assign_extra_vars = {
func1 = [ myenv4,myenv5 ]
func3 = [ myenv6 ]
}
}
这是我的 Terraform 资源,其中包含一小段伪代码,希望能比我损坏的 Terraform 更好地解释我想要实现的目标。
resource "aws_lambda_function" "task" {
for_each = local.lambdas
environment" {
// Pseudo code
my_extra = map {}
for env_var in local.assign_extra_vars[each.key] : {
my_extra[env_var] = lookup(local.extra_envvars,env_var,"")
}
// end pseudo code
variables = merge(envvars,my_extra)
}
}
提前感谢您的回复。
解决方法
通过对您的 locals
进行一点点重构,就可以实现:
locals {
env = "dev"
lambdas = {
func1 = "myfunc1-${local.env}"
func2 = "myfunc2-${local.env}"
func3 = "myfunc3-${local.env}"
}
envvars = {
myenv1 = "apple"
myenv2 = "pear"
myenv3 = "orange"
}
extra_envvars = {
func1 = {
myenv4 = "lettuce"
myenv5 = "carrot"
}
func3 = {
myenv6 = "turnip"
}
}
}
所以 extra_envvars
现在是按函数查找的映射。
现在你的 Lambda 函数变成了这样:
resource "aws_lambda_function" "task" {
for_each = local.lambdas
function_name = each.value
role = aws_iam_role.iam_for_lambda.arn
handler = "test.test"
runtime = "nodejs12.x"
environment {
variables = merge(local.envvars,lookup(local.extra_envvars,each.key,{}))
}
}
我已经用虚拟内容填充了 handler
和 runtime
,为了完整起见,这就是 aws_iam_role.iam_for_lambda
的样子:
resource "aws_iam_role" "iam_for_lambda" {
name = "iam_for_lambda"
assume_role_policy = <<EOF
{
"Version": "2012-10-17","Statement": [
{
"Action": "sts:AssumeRole","Principal": {
"Service": "lambda.amazonaws.com"
},"Effect": "Allow","Sid": ""
}
]
}
EOF
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。