AWS CLIのフィルタの使い方

2018年3月8日

AWS Connand Line Interface

AWS CLI の使い方を 1 から教えるシリーズ 2 回目。前回 は AWS CLI のインストール方法と初期設定について紹介しました。

AWS Connand Line Interface
AWS CLI入門

AWS CLI をの使い方を教える機会があったのでそのときのメモを残しておきます。AWS をコマンドラインで操作すること ...

続きを見る

今回はフィルタの使い方を紹介します。

目次

  1. フィルタとは
  2. フィルタで使えるキーは help コマンドで探す
  3. ワイルドカード検索
  4. タグで検索
  5. and 検索
  6. or 検索

フィルタとは

AWS CLI を使って情報を参照する describe 系のサブコマンドは --filters オプションを指定して情報の絞込ができます。

まずは filters オプションを指定しない例を見ていきましょう。サブネットを一覧表示する describe-subnets をそのまま実行した場合は、すべてのサブネットが返されます。

aws ec2 describe-subnets
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1c",
            "AvailableIpAddressCount": 4091,
            "CidrBlock": "172.31.0.0/20",
            "DefaultForAz": true,
            "MapPublicIpOnLaunch": true,
            "State": "available",
            "SubnetId": "subnet-30e19d68",
            "VpcId": "vpc-49ee852d",
            "AssignIpv6AddressOnCreation": false,
            "Ipv6CidrBlockAssociationSet": []
        },
        ...
    ]
}

次に filters オプションで表示する情報を絞り込む例を見てみましょう。以下は --filters オプションで CIDR ブロックが 172.31.16.0/20 のものだけを表示する例です。

aws ec2 describe-subnets --filters "Name=cidr-block,Values=172.31.16.0/20"
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1a",
            "AvailableIpAddressCount": 4088,
            "CidrBlock": "172.31.16.0/20",
            "DefaultForAz": true,
            "MapPublicIpOnLaunch": true,
            "State": "available",
            "SubnetId": "subnet-03714e75",
            "VpcId": "vpc-49ee852d",
            "AssignIpv6AddressOnCreation": false,
            "Ipv6CidrBlockAssociationSet": []
        }
    ]
}

フィルタで使えるキーは help コマンドで探す

検索に使えるキーは help コマンドで調べます。cidr-block は cidrBlock や cidr というキーも設定できることが分かります。とりあえず、出力結果に表示されるキーを小文字にして単語をハイフンで区切ると覚えておけば大丈夫です。

aws ec2 describe-subnets help
...
OPTIONS
   --filters (list)
      One or more filters.
      o availabilityZone - The Availability Zone for the subnet.  You  can
        also use availability-zone as the filter name.
      o available-ip-address-count  -  The number of IPv4 addresses in the
        subnet that are available.
      o cidrBlock - The IPv4 CIDR block of the subnet. The CIDR block  you
        specify must exactly match the subnet's CIDR block for information
        to be returned for the subnet. You can also use cidr or cidr-block
        as the filter names.
    ...
    Shorthand Syntax:
    Name=string,Values=string,string ...
...

利用できないキーを指定すると以下のようなエラーになります。

aws ec2 describe-subnets --filters "Name=AvailabilityZone,Values=ap-northeast-1a"
An error occurred (InvalidParameterValue) when calling the DescribeSubnets operation: The filter 'AvailabilityZone' is invalid

ワイルドカード検索

アスタリスクで前方一致などワイルドカード検索ができます。以下は cidr-block172.31.16 で前方一致検索している例です。部分一致や後方一致もできます。

aws ec2 describe-subnets --filters "Name=cidr-block,Values=172.31.16*"
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1a",
            "AvailableIpAddressCount": 4088,
            "DefaultForAz": true,
            "Ipv6CidrBlockAssociationSet": [],
            "VpcId": "vpc-49ee852d",
            "State": "available",
            "MapPublicIpOnLaunch": true,
            "SubnetId": "subnet-03714e75",
            "CidrBlock": "172.31.16.0/20",
            "AssignIpv6AddressOnCreation": false
        }
    ]
}

タグで検索

タグで検索をすることもできます。以下は Name というキーの値が public-subnetであるものを検索する例です。一つ前で紹介したワイルドカード検索と組み合わせると便利です。

aws ec2 describe-subnets --filter 'Name=tag:Name,Values=public-subnet'
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1b",
            "AvailableIpAddressCount": 4088,
            "DefaultForAz": true,
            "Ipv6CidrBlockAssociationSet": [],
            "VpcId": "vpc-0dfc2cc54eb770f90",
            "State": "available",
            "MapPublicIpOnLaunch": true,
            "SubnetId": "subnet-07832675f0f29c993",
            "CidrBlock": "192.168.96.0/19",
            "AssignIpv6AddressOnCreation": false,
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "public-subnet"
                }
            ]
        }
    ]
}

and 検索

filters のあとにスペース区切りで検索条件を追加すると and 検索になります。

aws ec2 describe-subnets --filters \
  "Name=cidr-block,Values=172.31*" \
  "Name=availability-zone,Values=ap-northeast-1c"
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1c",
            "AvailableIpAddressCount": 4091,
            "DefaultForAz": true,
            "Ipv6CidrBlockAssociationSet": [],
            "VpcId": "vpc-49ee852d",
            "State": "available",
            "MapPublicIpOnLaunch": true,
            "SubnetId": "subnet-30e19d68",
            "CidrBlock": "172.31.0.0/20",
            "AssignIpv6AddressOnCreation": false
        }
    ]
}

or 検索

Values にカンマ区切りで値を追加すると、or 検索になります

aws ec2 describe-subnets --filters "Name=cidr-block,Values=172.31.16*,172.31.0*"
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1c",
            "AvailableIpAddressCount": 4091,
            "DefaultForAz": true,
            "Ipv6CidrBlockAssociationSet": [],
            "VpcId": "vpc-49ee852d",
            "State": "available",
            "MapPublicIpOnLaunch": true,
            "SubnetId": "subnet-30e19d68",
            "CidrBlock": "172.31.0.0/20",
            "AssignIpv6AddressOnCreation": false
        },
        {
            "AvailabilityZone": "ap-northeast-1a",
            "AvailableIpAddressCount": 4088,
            "DefaultForAz": true,
            "Ipv6CidrBlockAssociationSet": [],
            "VpcId": "vpc-49ee852d",
            "State": "available",
            "MapPublicIpOnLaunch": true,
            "SubnetId": "subnet-03714e75",
            "CidrBlock": "172.31.16.0/20",
            "AssignIpv6AddressOnCreation": false
        }
    ]
}

次回は Query の使い方を説明します。

AWS Connand Line Interface
AWS CLIのクエリの使い方

AWS CLI の使い方を 1 から教えるシリーズ 3 回目。前回はフィルタをやりました 今回はクエリの使い方を紹介しま ...

続きを見る

-技術ブログ
-