在另一个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/