amazon-web-services - 如何在 Terraform 中为 aws-cli 准备渲染的 JSON?

标签 amazon-web-services terraform aws-cli hcl

在另一个thread I have asked如何保存ECS task definitions活跃于AWS。因此,我计划更新这样的任务定义:

resource "null_resource" "update_task_definition" {
  triggers {
    keys = "${uuid()}"
  }

  # Workaround to prevent older task definitions being deactivated
  provisioner "local-exec" {
    command = <<EOF
aws ecs register-task-definition \
--family my-task-definition \
--container-definitions ${data.template_file.task_definition.rendered} \
--network-mode bridge \
EOF
  }
}

data.template_file.task_definition 是一个模板数据源,它提供来自文件的模板化 JSON。但是,这不起作用,因为 JSON 包含换行符和空格。

我已经发现我可以使用 replace 插值函数来删除换行符和空格,但是我仍然需要转义双引号,以便 AWS API 接受请求。

如何安全地准备 data.template_file.task_definition.rendered 生成的字符串?我正在寻找这样的东西:

原始字符串:

{
  "key": "value",
  "another_key": "another_value"
}

准备好的字符串:

{\"key\":\"value\",\"another_key\":\"another_value\"}

最佳答案

您应该能够使用 jsonencode function 包装渲染的 JSON .

使用以下 Terraform 代码:​​

data "template_file" "example" {
  template = file("example.tpl")

  vars = {
    foo = "foo"
    bar = "bar"
  }
}

resource "null_resource" "update_task_definition" {
  triggers = {
    keys = uuid()
  }

  provisioner "local-exec" {
    command = <<EOF
echo ${jsonencode(data.template_file.example.rendered)}
EOF
  }
}

以及以下模板文件:

{
  "key": "${foo}",
  "another_key": "${bar}"
}

运行 Terraform apply 会给出以下输出:

null_resource.update_task_definition: Creating...
  triggers.%:    "" => "1"
  triggers.keys: "" => "18677676-4e59-8476-fdde-dc19cd7d2f34"
null_resource.update_task_definition: Provisioning with 'local-exec'...
null_resource.update_task_definition (local-exec): Executing: ["/bin/sh" "-c" "echo \"{\\n  \\\"key\\\": \\\"foo\\\",\\n  \\\"another_key\\\": \\\"bar\\\"\\n}\\n\"\n"]
null_resource.update_task_definition (local-exec): {
null_resource.update_task_definition (local-exec):   "key": "foo",
null_resource.update_task_definition (local-exec):   "another_key": "bar"
null_resource.update_task_definition (local-exec): }

关于amazon-web-services - 如何在 Terraform 中为 aws-cli 准备渲染的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52081329/

相关文章:

amazon-web-services - EC2。负载均衡器。必须至少指定两个子网

amazon-web-services - m4.large AWS 实例上的 Redis 性能

azure - Terraform 未声明 tfvars

sql-server - Azure Terraform 将 bacpac 导入 SQL Server 并禁用公共(public)网络访问

amazon-web-services - AWS CLI : How can I query list values?

node.js - 创建 AWS SQS 队列

javascript - 如何从 nodejs aws s3 getObject 回调数据中检索元数据?

git - 我可以将 CodeStar 的部署基础设施与现有的 CodeCommit 存储库一起使用吗?

amazon-web-services - AWS启动模板与启动配置之间有什么区别?

amazon-web-services - 复制现有 Cognito 用户池的最佳方法是什么