从aws cloudformation describe-stack获取输出

时间:2017-01-13 06:18:00

标签: amazon-cloudformation aws-cli

我使用以下内容通过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如果输出的数量发生变化,我的结果将是意外的。

3 个答案:

答案 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

不是很有帮助。