我使用以下内容通过AWS Cli获取我想要的stack information:
aws cloudformation --region ap-southeast-2 describe-stacks --stack-name mystack
返回结果OK:
{
"Stacks": [
{
"StackId": "arn:aws:mystackid",
"LastUpdatedTime": "2017-01-13T04:59:17.472Z",
"Tags": [],
"Outputs": [
{
"OutputKey": "Ec2Sg",
"OutputValue": "sg-97e13dff"
},
{
"OutputKey": "DbUrl",
"OutputValue": "myUrl"
}
],
"CreationTime": "2017-01-13T03:27:18.893Z",
"StackName": "mystack",
"NotificationARNs": [],
"StackStatus": "UPDATE_ROLLBACK_COMPLETE",
"DisableRollback": false
}
]
}
但我不知道如何仅返回OutputValue的值,即myUrl
因为我不需要其余的,只需我的。
这可能是通过aws cloudformation describe-stacks吗?
修改
我只是意识到我可以使用 - query:
--query 'Stacks[0].Outputs[1].OutputValue'
将完全得到我想要的但我想使用DbUrl else如果输出的数量发生变化,我的结果将是意外的。
答案 0 :(得分:43)
我得到了答案,请使用以下内容:
--query 'Stacks[0].Outputs[?OutputKey==`DbUrl`].OutputValue' --output text
希望这会对某人有所帮助。
答案 1 :(得分:6)
查询工作时,如果您有多个堆栈,则可能会出现问题。实际上,你应该可能利用出口来获得独特和权威的东西。
举例来说 - 如果您将CloudFormation代码段修改为如下所示:
"Outputs" : {
"DbUrl" : {
"Description" : "My Database Url",
"Value" : "myUrl",
"Export" : {
"Name" : "DbUrl"
}
}
}
然后你可以使用:
aws cloudformation list-exports --query "Exports[?Name==\`DbUrl\`].Value" --no-paginate --output text
检索它。导出必须是唯一的 - 只有一个堆栈可以导出任何给定的名称。这样,您就可以确保每次都能获得正确的价值。如果您尝试创建一个导出其他位置已存在的名称的新堆栈,则该堆栈创建将失败。
答案 2 :(得分:0)
使用Windows AWS CLI,我必须确保将--query
参数加倍引用。
aws cloudformation describe-stacks --stack-name <stack_name> --query "Stacks[0].Outputs[?OutputKey==`<key_we_want>`].OutputValue" --output text
未能使用双引号引起查询返回:
Stacks[0].Outputs[?OutputKey==
].OutputValue
不是很有帮助。