首页 > 解决方案 > 如何设置计算的局部变量

问题描述

我有一个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 来触发脚本?如果是这样,我该如何在此处设置局部变量?

标签: terraformterraform-provider-aws

解决方案


如果缓存配置数据可以是 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)
}

推荐阅读