terraform - 如何设置计算的局部变量
问题描述
我有一个tf.json
声明一堆局部变量的文件。其中一个变量是一组复杂对象,如下所示:
{
"locals": [
{
"ordered_cache_behaviors": [
{
"path_pattern": "/poc-app-angular*",
"s3_target": "dev-ui-static",
"ingress": "external"
}
]
}
]
}
这就是我想要做的......而不是ordered_cache_behaviors
在我的文件中静态声明变量,我希望这是一个计算值。我将从S3
存储桶中获取此配置并在此处设置值。因此,静态值将只是一个空数组[]
,在从S3
.
此逻辑需要在每次 aterraform plan
或之前执行terraform apply
。做这个的最好方式是什么?我假设我需要使用 Provisioner 来触发脚本?如果是这样,我该如何在此处设置局部变量?
解决方案
如果缓存配置数据可以是 JSON 格式,您可以使用s3_bucket_object 数据源加上jsondecode函数作为替代方法:
将缓存配置数据作为 上传到poc-app-cache-config
存储桶cache-config.json
,然后使用以下命令让 Terraform 从 S3 下载该文件并将其解析为本地ordered_cache_behaviors
变量:
data "aws_s3_bucket_object" "cache_configuration" {
bucket = "poc-app-cache-config"
key = "cache-config.json" # JSON-formatted cache configuration map
}
...
locals {
ordered_cache_behaviors = jsondecode(aws_s3_bucket_object.cache_configuration.body)
}