创建AWS fargate任务定义json时出现问题

创建AWS fargate任务定义json时出现问题,json,jq,Json,Jq,我正试图使用gitlab管道中的jq创建一个json文件(AWS fargate的任务定义) 我想用“logConfiguration”和“logDriver”构建一个块来实现此配置,请参见下文: "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-wordpress",

我正试图使用gitlab管道中的jq创建一个json文件(AWS fargate的任务定义)

我想用“logConfiguration”和“logDriver”构建一个块来实现此配置,请参见下文:

"logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "awslogs-wordpress",
                    "awslogs-region": "us-west-2",
                    "awslogs-stream-prefix": "awslogs-example"
                }
            },
1) 下面是我的初始json文件,其中我使用第2点上的命令引入了一些值:

2) 当我在gitlab管道上使用jq执行这些命令时,我实现了我想要的部分功能,这似乎很好,我在第2点上得到了json。但是我意识到它输出了3次“LogDriver”,这是不对的:

jq '.containerDefinitions[0].logConfiguration.options."awslogs-group"="'my_grup'"' tmp_task > ejm.json &&
jq '.containerDefinitions[0].logConfiguration.options."awslogs-region"="'eu-west-2'"' ejm.json > tmp_task &&
jq '.containerDefinitions[0].logConfiguration.options."awslogs-stream-prefix"="'ecsx'"' tmp_task > ejm.json
2.A)

正如上面第2.A点所示,配置“logDriver”被写入了几次,当在AWS fargate中创建任务定义时,CloudWatch中没有可用的日志,因为它没有选择“logDriver”配置,是的,CloudWatch中有一个日志组,但由于json任务中未正确引入“logDriver”

正确的JSON任务定义应该与下面链接中的定义相同

潜在的解决方案是了解如何正确写入json文件,或者是否有人对如何将此json任务放入管道有更好的了解


期待从您那里获得一些想法,非常感谢advanced。您只需调用一次jq,就可以完成任务,而无需使用shell对字符串插值的支持,因为字符串插值很容易出错。例如:

jq --arg group my_grup --arg region eu-west-2 --arg prefix ecsx '
  .containerDefinitions[0].logConfiguration.options
    = {"awslogs-group": $group,
       "awslog-region": $region,
       "awslogs-stream-prefix": $prefix}' input.json

您可以类似地添加.logDriver(在jq的一次调用中).

这是一个aws问题还是一个jq问题?@oguzismail可能两者兼而有之,因为如果我使用错误的方法创建jq的json任务,aws的经验丰富的人可以提出一些更方便的建议来完成这项任务。这有意义吗?干杯。但是如果有人在这之前特意发布了一个完全基于jq的答案,这将是浪费时间them@oguzismail同意你的观点。删除了AWS标签,因此它将被视为jq问题,谢谢你的建议。jq初学者的一件事是,我在执行下面的示例时遇到了一些错误,我不知道如何介绍.logDriver,你能检查一下吗?$jq--arg group my_grup--arg region eu-west-2--arg前缀ecsx'→ containerDefinitions[0]。logConfiguration.options→ = {“awslogs集团”:$group,→ "awslog地区:“$region,→ “awslogs流前缀”:$prefix}'ejm.json jq:error:containerDefinitions/0未在第2行定义:containerDefinitions[0]。logConfiguration.options jq:1编译错误抱歉,缺少一个
。固定的。
{
  "family": "my_branch",
  "networkMode": "awsvpc",
  "executionRoleArn": "arn:aws:iam::235907124541:role/ecsTaskExecutionRole",
  "containerDefinitions": [
    {
      "name": "",
      "image": ":",
      "portMappings": [
        {
          "containerPort": 3091,
          "hostPort": 3091,
          "protocol": "tcp"
        }
      ],
      "essential": true,
      "logConfiguration": {
        "options": {
          "awslogs-group": "my_grup",
          "awslogs-region": "eu-west-2",
          "awslogs-stream-prefix": "ecsx"
        },
        "logDriver": "awslogs"
      },
      "logDriver": "awslogs"
    },
    {
      "logConfiguration": {
        "logDriver": "awslogs"
      }
    }
  ],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "cpu": "256",
  "memory": "512"
}
jq --arg group my_grup --arg region eu-west-2 --arg prefix ecsx '
  .containerDefinitions[0].logConfiguration.options
    = {"awslogs-group": $group,
       "awslog-region": $region,
       "awslogs-stream-prefix": $prefix}' input.json