Open6

AWS CLI覚書

えんぶんえんぶん

--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]'