web-dev-qa-db-ja.com

AWS cloudformation describe-stacksからの出力の取得

以下を使用して スタック情報 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
        }
    ]
}

しかし、myUrlであるOutputValueの値のみを返す方法はわかりません

残りは必要ないので、myUrlだけです。

AWS cloudformation describe-stacksを使用して可能ですか?

編集

私は-- query を使用できることに気付きました。

--query "Stacks[0].Outputs[1].OutputValue"

私が望むものを正確に取得しますが、出力の数が変更された場合、DbUrlを使用したいので、結果は予期しないものになります。

36
Steven Yong

私は答えを得ました、以下を使用してください:

--query "Stacks[0].Outputs[?OutputKey=='DbUrl'].OutputValue" --output text

これが誰かを助けることを願っています。

56
Steven Yong

クエリは機能しますが、複数のスタックがある場合は問題が生じる可能性があります。現実的には、おそらく明確で信頼できるもののエクスポートを活用する必要があります。

例として-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

それを取得します。エクスポートは一意である必要があります。特定の名前をエクスポートできるスタックは1つだけです。これにより、毎回正しい値を取得できます。他の場所にすでに存在する名前をエクスポートする新しいスタックを作成しようとすると、そのスタックの作成は失敗します。

10
g.d.d.c

Windows AWS CLIを使用して、--query paramが二重引用符で囲まれました。

aws cloudformation describe-stacks --stack-name <stack_name> --query "Stacks[0].Outputs[?OutputKey==`<key_we_want>`].OutputValue" --output text

二重引用符を使用しないと、クエリが次の結果を返します。

Stacks[0].Outputs[?OutputKey==].OutputValue

あまり役に立たない。

0