Amazon cloudformation 从aws云计算堆栈获取输出
我正在使用以下命令通过AWS Cli获取我想要的命令:Amazon cloudformation 从aws云计算堆栈获取输出,amazon-cloudformation,aws-cli,Amazon Cloudformation,Aws Cli,我正在使用以下命令通过AWS Cli获取我想要的命令: aws cloudformation --region ap-southeast-2 describe-stacks --stack-name mystack 返回结果OK: { "Stacks": [ { "StackId": "arn:aws:mystackid", "LastUpdatedTime": "2017-01-13T04:59:17.472Z",
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
因为我不需要其余的,只需要我的URL
通过aws云计算可以吗
编辑
我只是意识到我可以用--
将得到我想要的结果,但我希望使用DbUrl,否则如果输出数量发生变化,我的结果将是意外的。我得到了答案,请使用以下选项:
--query "Stacks[0].Outputs[?OutputKey=='DbUrl'].OutputValue" --output text
希望这能帮助到其他人。在查询工作时,如果您有多个堆栈,可能会出现问题。事实上,您可能应该利用导出来实现独特和权威的功能 举例来说,如果您将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
去找回它。导出必须是唯一的-只有一个堆栈可以导出任何给定名称。这样,您就可以确保每次都能获得正确的值。如果尝试创建一个新堆栈,该堆栈导出的名称已存在于其他位置,则该堆栈创建将失败。使用Windows AWS CLI,我必须确保
--query
参数被双引号引用
aws cloudformation描述堆栈--堆栈名称--查询“堆栈[0]。输出[?OutputKey==```].OutputValue”--输出文本
未能使用双引号,导致查询返回:
堆栈[0]。输出[?OutputKey==
]。OutputValue
没有太大帮助。谢谢,这正是我今天要找的。对于其他人,我必须使用
“
而不是”
如果你想获取多个输出(制表符分隔在一行中),你可以使用--query”堆栈[0]。输出[?OutputKey=`ParamOne`| OutputKey=`ParamTwo`| OutputKey=`paramtree`].OutputValue'--output text
但是,返回参数的顺序是随机的,您不能依赖它们的索引来提取它们。对于要检索的多个参数,可靠地将它们作为json返回,并使用jq来提取它们,即。--query'堆栈[0]。输出[OutputKey=`ParamOne`|124; OutputKey==`ParamTwo`|124; OutputKey==`ParamThree`]>>params.txt;one=$(cat-params.txt | jq-r.[].[124;选择(.OutputKey==“ParamOne”)|.OutputValue');two=$(cat-params.txt | jq-r'.[].[]选择OutputKey==“ParamTwo.OutputValue”);three$(cat-params.txt | jq-r=“OutputValue.”选择三个参数值
对于OP的示例,它将输出{“Ec2Sg”:“sg-97e13dff”,“DbUrl”:“myUrl”}
。按名称获取值比按索引获取值要好得多。
aws cloudformation list-exports --query "Exports[?Name==\`DbUrl\`].Value" --no-paginate --output text