handson(light): aws cli output

4. jp.pyによる出力情報の加工

手順の目的

VPC"handson-cloud9-vpc"の出力情報をjp.pyスクリプトで加工します。

設定値の指定

手順に必要な設定値を変数に格納をします。

0. リージョン

リージョンを指定します。

環境変数の設定:

export AWS_DEFAULT_REGION='ap-northeast-1'

1. VPCのタグ名

VPCのタグ名を指定します。

変数の設定:

EC2_VPC_TAG_NAME='handson-cloud9-vpc'

2. 出力ファイル用ディレクトリ

出力ファイル用ディレクトリを指定します。

変数の設定:

DIR_OUTPUT="${HOME}/environment/output-handson-cli-awscli-output"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_OUTPUT} > /dev/null 2>&1 \
  || mkdir -p ${DIR_OUTPUT}

結果(例):

(出力なし)

3. 出力ファイル名

出力ファイル名を指定します。

変数の設定:

FILE_OUTPUT="${DIR_OUTPUT}/${FILENAME_OUTPUT}" \
  && echo ${FILE_OUTPUT}

結果(例):

${HOME}/environment/output-handson-cli-awscli-output/handson-cloud9-vpc.txt

設定値の確認

各変数に正しい設定値が格納されていることを確認します。

変数の確認:

cat << END

  # 0. AWS_DEFAULT_REGION:"ap-northeast-1"
       AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}"

  # 1. EC2_VPC_TAG_NAME:"handson-cloud9-vpc"
       EC2_VPC_TAG_NAME="${EC2_VPC_TAG_NAME}"
  # 2. DIR_OUTPUT:"${HOME}/environment/output-handson-cli-awscli-output"
       DIR_OUTPUT="${DIR_OUTPUT}"
  # 3. FILE_OUTPUT:"${HOME}/environment/output-handson-cli-awscli-output/handson-cloud9-vpc.txt"
       FILE_OUTPUT="${FILE_OUTPUT}"

END

各変数について、上の行と下の行の値の内容もしくは形式が同じであることを確認します。 もし異なる場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

VPCの出力保存

VPCの出力情報を保存します。

コマンド:

aws ec2 describe-vpcs \
  > ${FILE_OUTPUT}

結果(例):

(出力なし)

リソース作成時のみ取得できる識別子の取得

VPCのVPC IDを取得します。

コマンド:

cat ${FILE_OUTPUT} \
  | jp.py 'Vpcs[].VpcId'

結果(例):

[
  "vpc-076e20680e3ec8801"
]

注釈

VPC IDはVPC作成時にのみ取得可能なため、create-vpcサブコマンドの出力を一時ファイルに保存して、jp.pyで一時ファイルから取得します。

(現在は、VPC作成時にそのVPC専用のタグを付与し、専用タグからVPCを特定してVPC IDを取得することも可能となっている。)

リソース作成時のみ取得できる識別子を条件とした情報の取得

VPCのVPC IDを取得します。

変数の設定:

EC2_VPC_ID=$( \
  cat ${FILE_OUTPUT} \
    | jp.py 'Vpcs[].VpcId | [0]' \
    | sed 's/"//'g \
) \
  && echo ${EC2_VPC_ID}

結果(例):

vpc-xxxxxxxxxxxxxxxxx

VPCのステータスを取得します。

コマンド:

cat ${FILE_OUTPUT} \
  | jp.py "Vpcs[?VpcId == \`${EC2_VPC_ID}\`].State" \
  | sed 's/"//'g

結果(例):

[
    available
]

VPCの情報を取得します。

コマンド:

cat ${FILE_OUTPUT} \
  | jp.py "Vpcs[?VpcId == \`${EC2_VPC_ID}\`]"

結果(例):

[
    {
        "CidrBlock": "10.0.0.0/16",
        "DhcpOptionsId": "dopt-bd5158df",
        "State": "available",
        "VpcId": "vpc-076e20680e3ec8801",
        "OwnerId": "216399753842",
        "InstanceTenancy": "default",
        "CidrBlockAssociationSet": [
            {
                "AssociationId": "vpc-cidr-assoc-0886410fc8af5d2f2",
                "CidrBlock": "10.0.0.0/16",
                "CidrBlockState": {
                    "State": "associated"
                }
            }
        ],
        "IsDefault": false,
        "Tags": [
            {
                "Key": "Name",
                "Value": "handson-cloud9-vpc"
            }
        ]
    }
]

VPCの情報をパイピングにより平坦化します。

コマンド:

cat ${FILE_OUTPUT} \
  | jp.py "Vpcs[?VpcId == \`${EC2_VPC_ID}\`]
     | [0]"

結果(例):

{
    "CidrBlock": "10.0.0.0/16",
    "DhcpOptionsId": "dopt-bd5158df",
    "State": "available",
    "VpcId": "vpc-076e20680e3ec8801",
    "OwnerId": "216399753842",
    "InstanceTenancy": "default",
    "CidrBlockAssociationSet": [
        {
            "AssociationId": "vpc-cidr-assoc-0886410fc8af5d2f2",
            "CidrBlock": "10.0.0.0/16",
            "CidrBlockState": {
                "State": "associated"
            }
        }
    ],
    "IsDefault": false,
    "Tags": [
        {
            "Key": "Name",
            "Value": "handson-cloud9-vpc"
        }
    ]
}

VPCのNameタグを取得します。

コマンド:

cat ${FILE_OUTPUT} \
  | jp.py "Vpcs[?VpcId == \`${EC2_VPC_ID}\`]
     | [0]
     | Tags[?Key == \`Name\`].Value"

結果(例):

[
    "handson-cloud9-vpc"
]

パイピングにより出力を整形します。([]を削除する)

コマンド:

cat ${FILE_OUTPUT} \
  | jp.py "Vpcs[?VpcId == \`${EC2_VPC_ID}\`]
     | [0]
     | Tags[?Key == \`Name\`].Value
     | [0]"

結果(例):

"handson-cloud9-vpc"

クォーテーションはsedなどで取り除きます。

コマンド:

cat ${FILE_OUTPUT} \
  | jp.py "Vpcs[?VpcId == \`${EC2_VPC_ID}\`]
     | [0]
     | Tags[?Key == \`Name\`].Value
     | [0]" \
  | sed 's/"//'g

結果(例):

handson-cloud9-vpc

完了確認

「VPC"handson-cloud9-vpc"の出力情報をjp.pyで加工できている。」ことを確認します。

注釈

処理の実行で取得できていればOKです。

手順の完了