この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
CodeDeploy で成功した最新のデプロイ ID を取得するために、下記の AWS CLI を実行しました。
「--output text」のオプションをコマンドに含め、さらに、query オプションで配列の先頭の要素を取得しようとしましたが、複数のデプロイ ID が返されました。
$ aws deploy list-deployments \
--application-name test-nakano-app \
--deployment-group-name test-nakano-group \
--include-only-statuses Succeeded \
--output text \
--query deployments[0]
d-NNNNNNNNN
d-YYYYYYYYY
想定通り、1つのデプロイ ID を返答させるにはどうすればよいでしょうか。
どう対応すればいいの?
コマンドに 「--no-paginate」 を含めて実行してください。
$ aws deploy list-deployments \
--application-name test-nakano-app \
--deployment-group-name test-nakano-group \
--include-only-statuses Succeeded \
--output text \
--query deployments[0] \
--no-paginate
d-NNNNNNNNN
AWS CLI の--ouput の値に「text」を指定された場合は、コマンドのレスポンスにページネーションが含まれていると、各ページ毎に--query フィルタを実行する仕様となっています。
したがって、コマンドのレスポンスが 2 つの deployid を返却してしまった原因は、オプションで指定された「--query deployments[0]」をページ毎にフィルタ実行してしまったため、ページ毎の先頭にある deployid(合計 2 つ)を出力しまったことによるものです。
参考資料
指定する出力タイプによって、--query オプションの動作が変更されます。
--output text を指定した場合、出力は --query フィルタが適用される前にページ分割され、AWS CLI は出力の各ページで 1 回クエリを実行します。このため、クエリには各ページで最初に一致する要素が含まれており、予期しない余分な出力が発生する可能性があります。この余分な出力を回避するには、フィルターを結果の完全なセットにのみ適用するように --no-paginate を指定できますが、出力が長くなる可能性があります。出力をさらにフィルタリングするには、head や tail などの他のコマンドラインツールを使用できます
aws deploy list-deployments \
--application-name WordPress_App \
--create-time-range start=2014-08-19T00:00:00,end=2014-08-20T00:00:00 \
--deployment-group-name WordPress_DG \
--include-only-statuses Failed
Output:
{
"deployments": [
"d-EXAMPLE11",
"d-EXAMPLE22",
"d-EXAMPLE33"
]
}