amazon-web-services - 将 ECS containerDefinition 命令移动到本地 - Terraform
问题描述
我正在与 Terraform 一起使用一些容器部署 ECS 服务。代码太长了,所以我试图将所有逻辑移至 locals.tf。
现在,我在容器定义中的代码是这样的:
module "prometheus" {
source = "../aws-modules/ecs-service"
[... more code ...]
volumes = local.prometheus_volumes
cpu = var.prometheus_cpu
memory = var.prometheus_memory
container_definitions = <<DEFINITION
[
{
"image": "${var.prometheus_container_image}",
"name": "${lower(local.prometheus_name)}",
"networkMode": "${var.prometheus_network_mode}",
"portMappings": [
{
"containerPort": ${var.prometheus_container_port},
"hostPort": ${var.prometheus_container_port},
"protocol": "tcp"
}
],
"command": [
"/bin/prometheus",
"--config.file=/etc/prometheus/prometheus.yml",
"--web.enable-lifecycle",
"--storage.tsdb.path=/prom_data"
],
[... more code ...]
}
]
DEFINITION
这按预期工作,但我试图让它像这样:
module "prometheus" {
source = "../aws-modules/ecs-service"
[... more code ...]
volumes = local.prometheus_volumes
cpu = var.prometheus_cpu
memory = var.prometheus_memory
container_definitions = <<DEFINITION
[
{
"image": "${var.prometheus_container_image}",
"name": "${lower(local.prometheus_name)}",
"networkMode": "${var.prometheus_network_mode}",
"portMappings": [
{
"containerPort": ${var.prometheus_container_port},
"hostPort": ${var.prometheus_container_port},
"protocol": "tcp"
}
],
"command": "${local.prometheus_container_command}",
[... more code ...]
}
]
DEFINITION
并在 locals.tf 上声明:
prometheus_container_command = <<DEFINITION
[
"/bin/prometheus",
"--config.file=/etc/prometheus/prometheus.yml",
"--web.enable-lifecycle",
"--storage.tsdb.path=/prom_data"
]
DEFINITION
我在 containerDefinitions 上做过类似的事情,但从来没有使用数组,所以我遇到了这个错误(如果我删除换行符,那么错误从“/bin/prometheus”指向“/”)
!错误:ECS 任务定义 container_definition 无效:解码 JSON 时出错:../aws-modules/ecs-service/main.tf 第 147 行、资源“aws_ecs_task_definition”、“ecs_task_definition”中的字符串文字中的无效字符“\n”:147 : container_definitions = var.container_definitions
如果我删除“[”:
!错误:ECS 任务定义 container_definition 无效:解码 JSON 时出错:../aws-modules/ecs-service/main.tf 第 147 行,资源“aws_ecs_task_definition”“ecs_task_definition”中的数组元素后的无效字符“t”:147: container_definitions = var.container_definitions
而且我不知道我还能尝试什么(我尝试删除“[”,没有“定义”等......)
你们中的一些人尝试过声明一个数组并在 ECS containerDefinition 上使用它?非常感谢。
解决方案
您在
"command": "${local.prometheus_container_command}"
将导致command
存在:
"command": "["cpmd1","cmd2", "cmd3"]"
请试试 :
"command": ${local.prometheus_container_command}
或者
"command": ${jsonencode(local.prometheus_container_command})
推荐阅读
- sql - 使用 distinct 时查询选择行
- validation - 使用 Spec 验证已知和未知键值的映射
- c - 我应该如何通过免费传递 const char 指针来释放 char 指针?
- ruby-on-rails - 我在 Ruby on Rails 网站项目中找不到打印的来源。数组草草地打印在它显示的表格上方
- node.js - 10+错误后如何推送到节点流?
- r - 为什么`\n`不会将文本移动到R中的下一行?
- c# - 在 ASP.net Core mvc 中过滤特定日期
- regex - 正则表达式将所有内容匹配到字符串
- python - Background image in kivy not loading from crontab
- python - 无法将值插入二叉搜索树