Open6
AWS CLI覚書
AWS CLI 出力をフィルタリングする
JMESPath Specification
--query
オプションの書き方
aws cliのコマンドが以下のようなjsonを返すとする。
sample output json
{
"Events": [
{
"EventTime": "2013-09-17T00:55:03.000Z",
"StackName": "your-stack-name",
"Size": 15,
"Resources": [
{
"ResourceType": "AWS::CloudFormation::Stack",
"ResourceName": "your-stack-name"
}
]
}
]
}
リスト内の要素に対して特定の値で条件づけてリストをフィルタ
構文
--query '<listName>[? <expression> <comparator> <expression>])]'
例
# 文字列一致
--query 'Events[?StackName==`your-stack-name`].StackName'
# 比較(文字列は比較できない)
--query 'Events[?Size>`10`].StackName'
リスト内の要素に対して組み込み関数を用いてリストをフィルタ
構文
--query '<listName>[? function_name(type $argname)])]'
例
# **から始まる文字列
--query 'Events[?starts_with(StackName, `your-stack`)].StackName'
# **を含む
--query 'Events[?contains(StackName, `your-stack`)].StackName'
and, or, not
and: &&
or: ||
not: !
例
# StackNameが"your-stack"から始まる、かつ、"hoge"を含まない
--query 'Events[? starts_with(StackName, `your-stack`) && !contains(StackName, `hoge`)]'
出力する識別子をフィルタ
構文
<listName>[].[<expression>, <expression>]
例
--query 'Events[].[EventTime, Resources[].ResourceName]'
#出力
[
[
"2013-09-17T00:55:03.000Z",
[
"your-stack-name"
]
]
]
識別子の値にラベルを追加
構文
<listName>[].{<label>: <expression>, <label>: <expression>}
例
--query 'Events[].{EventTime: EventTime, ResourceName: Resources[].ResourceName}'
# 出力
[
{
"EventTime": "2013-09-17T00:55:03.000Z",
"ResourceName": [
"your-stack-name"
]
}
]
複合技
Eventsリスト内のResourcesリストが含む識別子に対して条件づけてフィルタ
--query 'Events[?Resources[?starts_with(ResourceName, `your-stack`)]].[EventTime, Resources[].ResourceName]'
さらにそれをEventTimeでソートする
--query 'sort_by(Events, &EventTime)[?Resources[?starts_with(ResourceName, `your-stack`)]].[EventTime, Resources[].ResourceName]'