Amazon cloudformation 从aws云计算堆栈获取输出

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 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", 
            "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