json - 从 cloudfromation 将 json 输出存储在 bash 中
问题描述
我正在使用 aws ecs 查询来获取当前正在运行的任务正在使用的属性列表。
命令 -
cft = "aws ecs describe-tasks --cluster arn:aws:ecs:us-west-2:4984314772:cluster/secrets --tasks arn:aws:ecs:us-west-2:4984314772:task/secrets/86855757eec4487f9d4475a1f7c4cb0b
我将其存储在输出变量中
输出 = $( 评估 $cft)
输出:
"tasks": [
{
"attachments": [
{
"id": "da8a1312-8278-46d5-8e3b-6b6a1d96f820",
"type": "ElasticNetworkInterface",
"status": "ATTACHED",
"details": [
{
"name": "subnetId",
"value": "subnet-0a151f2eb959ad4"
},
{
"name": "networkInterfaceId",
"value": "eni-081948e3666253f"
},
{
"name": "macAddress",
"value": "02:2a:9i:5c:4a:77"
},
{
"name": "privateDnsName",
"value": "ip-172-56-17-177.us-west-2.compute.internal"
},
{
"name": "privateIPv4Address",
"value": "172.56.17.177"
}
]
}
],
"availabilityZone": "us-west-2a",
"clusterArn": "arn:aws:ecs:us-west-2:4984314772:cluster/secrets",
"containers": [
{
"taskArn": "arn:aws:ecs:us-west-2:4984314772:task/secrets/86855757eec4487f9d4475a1f7c4cb0b",
"name": "nginx",
"image": "nginx",
"lastStatus": "PENDING",
"networkInterfaces": [
{
"attachmentId": "da8a1312-8278-46d5-6b6a1d96f820",
"privateIpv4Address": "172.31.17.176"
}
],
"healthStatus": "UNKNOWN",
"cpu": "0"
}
],
"cpu": "256",
"createdAt": "2020-12-10T18:00:16.320000+05:30",
"desiredStatus": "RUNNING",
"group": "family:nginx",
"healthStatus": "UNKNOWN",
"lastStatus": "PENDING",
"launchType": "FARGATE",
"memory": "512",
"overrides": {
"containerOverrides": [
{
"name": "nginx"
}
],
"inferenceAcceleratorOverrides": []
},
"platformVersion": "1.4.0",
"tags": [],
"taskArn": "arn:aws:ecs:us-west-2:4984314772:task/secrets/86855757eec4487f9d4475a1f7c4cb0b",
"taskDefinitionArn": "arn:aws:ecs:us-west-2:4984314772:task-definition/nginx:17",
"version": 2
}
],
"failures": []
}
现在,如果回显 $output.tasks[0].containers[0] 没有任何反应,它会再次打印整个内容,我想将结果存储在输出变量中并像我们以 json 格式一样引用不同的参数。
解决方案
您将需要使用 json 解析器,例如 jq 等:
eval $cft | jq '.tasks[].containers[]'
为避免使用 eval,您可以将 aws 命令简单地通过管道传输到 jq 中,因此:
aws ecs describe-tasks --cluster arn:aws:ecs:us-west-2:4984314772:cluster/secrets --tasks arn:aws:ecs:us-west-2:4984314772:task/secrets/86855757eec4487f9d4475a1f7c4cb0b | jq '.tasks[].containers[]'
或者:
cft=$(aws ecs describe-tasks --cluster arn:aws:ecs:us-west-2:4984314772:cluster/secrets --tasks arn:aws:ecs:us-west-2:4984314772:task/secrets/86855757eec4487f9d4475a1f7c4cb0b | jq '.tasks[].containers[]')
echo $cft | jq '.tasks[].containers[]'
推荐阅读
- wordpress - Polylang 自动复制(特定类别)
- java - 谷歌日历 api - 我可以重复使用谷歌的令牌吗?
- vim - set tabstop=4 在开头只放一个空格
- gstreamer - 在 vlc 上回放视频时 matroskamux 时间栏不起作用
- php - SQLlite 左连接引用仅带回其中一张表的结果
- python - 如何通过测试修改类数据?
- apache-nifi - 使用 TLS 和 LDAP 身份验证启动 NiFi 1.14.1 时出现问题
- javascript - 如何在文本区域中显示 HTML 电子邮件字符串?
- php - Browsersync 使 Chrome 崩溃
- c - 如何在C中使用两次变量?