■aws-cliでのリージョン一覧の取得と、有効なリージョンの抽出 「aws-region-search 」で、Webから取得したリージョン一覧に間違いがないことを確認したい。 $ aws --version aws-cli/2.1.16 Python/3.7.3 Linux/4.19.0-13-amd64 source/x86_64.debian.10 prompt/off $ aws ec2 describe-regions --all-regions | \ jq -r '.Regions[] | [ .RegionName, .Endpoint, .OptInStatus ] | @tsv' | \ sort -V > aws-region2.txt $ git clone https://github.com/labunix/aws;cd aws $ ./aws-region-search Usage : ./aws-region-search "[aws-cli]" jq-entry Example: ./aws-region-search "aws codecommit list-repositories" .repositories[].repositoryName Output : aws-region-list.txt ■以下と同じ結果となることを想定 $ aws ec2 describe-regions | jq -r '.Regions[].RegionName' > region-optin $ grep -f region-optin aws-region.txt | sort -V ap-northeast-1 アジアパシフィック(東京) ap-northeast-2 アジアパシフィック(ソウル) ap-southeast-1 アジアパシフィック(シンガポール) ap-southeast-2 アジアパシフィック(シドニー) ap-south-1 アジアパシフィック(ムンバイ) ca-central-1 カナダ(中部) eu-central-1 欧州(フランクフルト) eu-north-1 欧州(ストックホルム) eu-west-1 欧州(アイルランド) eu-west-2 欧州(ロンドン) eu-west-3 欧州(パリ) sa-east-1 南米(サンパウロ) us-east-1 米国東部(バージニア北部) us-east-2 米国東部(オハイオ) us-west-1 米国西部(北カリフォルニア) us-west-2 米国西部(オレゴン) $ grep -v -f region-optin aws-region.txt | awk '{if(NR==1){print $0}else{print $0 | "sort -V"}}' コード 名前 af-south-1 アフリカ(ケープタウン) ap-east-1 アジアパシフィック(香港) ap-northeast-3 アジアパシフィック(大阪:ローカル) eu-south-1 ヨーロッパ(ミラノ) me-south-1 中東(バーレーン) ■Webから取得した一覧との差を確認する。 $ awk '!/コード/{print $1 | "sort | uniq -c | sort -k 1"}' aws-region.txt aws-region2.txt 1 ap-northeast-3 2 af-south-1 2 ap-east-1 2 ap-northeast-1 2 ap-northeast-2 2 ap-south-1 2 ap-southeast-1 2 ap-southeast-2 2 ca-central-1 2 eu-central-1 2 eu-north-1 2 eu-south-1 2 eu-west-1 2 eu-west-2 2 eu-west-3 2 me-south-1 2 sa-east-1 2 us-east-1 2 us-east-2 2 us-west-1 2 us-west-2 $ awk '!/コード/{print $1 | "sort -uV"}' aws-region.txt aws-region2.txt > aws-region3.txt ■aws-cliでは、大阪ローカルリージョン以外が出力されていることがわかる。 $ grep -f aws-region{3,,2}.txt | \ awk -F"[ :\t]" '{a[$2]=a[$2]" "$0}END{for(n in a){gsub(" *|\t|:"," ",a[n]);gsub("aws-region2*.txt","",a[n]);print a[n],n}}' | \ awk '{if(NF<5){print "* "$0}else{print " "$0}}' eu-west-2 欧州(ロンドン) eu-west-2 ec2.eu-west-2.amazonaws.com opt-in-not-required eu-west-2 eu-north-1 欧州(ストックホルム) eu-north-1 ec2.eu-north-1.amazonaws.com opt-in-not-required eu-north-1 eu-west-3 欧州(パリ) eu-west-3 ec2.eu-west-3.amazonaws.com opt-in-not-required eu-west-3 us-west-1 米国西部(北カリフォルニア) us-west-1 ec2.us-west-1.amazonaws.com opt-in-not-required us-west-1 us-east-1 米国東部(バージニア北部) us-east-1 ec2.us-east-1.amazonaws.com opt-in-not-required us-east-1 ap-east-1 アジアパシフィック(香港) ap-east-1 ec2.ap-east-1.amazonaws.com not-opted-in ap-east-1 us-west-2 米国西部(オレゴン) us-west-2 ec2.us-west-2.amazonaws.com opt-in-not-required us-west-2 us-east-2 米国東部(オハイオ) us-east-2 ec2.us-east-2.amazonaws.com opt-in-not-required us-east-2 eu-south-1 ヨーロッパ(ミラノ) eu-south-1 ec2.eu-south-1.amazonaws.com not-opted-in eu-south-1 sa-east-1 南米(サンパウロ) sa-east-1 ec2.sa-east-1.amazonaws.com opt-in-not-required sa-east-1 ap-northeast-1 アジアパシフィック(東京) ap-northeast-1 ec2.ap-northeast-1.amazonaws.com opt-in-not-required ap-northeast-1 ap-northeast-2 アジアパシフィック(ソウル) ap-northeast-2 ec2.ap-northeast-2.amazonaws.com opt-in-not-required ap-northeast-2 ap-south-1 アジアパシフィック(ムンバイ) ap-south-1 ec2.ap-south-1.amazonaws.com opt-in-not-required ap-south-1 * ap-northeast-3 アジアパシフィック(大阪 ローカル) ap-northeast-3 eu-central-1 欧州(フランクフルト) eu-central-1 ec2.eu-central-1.amazonaws.com opt-in-not-required eu-central-1 ap-southeast-1 アジアパシフィック(シンガポール) ap-southeast-1 ec2.ap-southeast-1.amazonaws.com opt-in-not-required ap-southeast-1 ap-southeast-2 アジアパシフィック(シドニー) ap-southeast-2 ec2.ap-southeast-2.amazonaws.com opt-in-not-required ap-southeast-2 me-south-1 中東(バーレーン) me-south-1 ec2.me-south-1.amazonaws.com not-opted-in me-south-1 ca-central-1 カナダ(中部) ca-central-1 ec2.ca-central-1.amazonaws.com opt-in-not-required ca-central-1 eu-west-1 欧州(アイルランド) eu-west-1 ec2.eu-west-1.amazonaws.com opt-in-not-required eu-west-1 af-south-1 アフリカ(ケープタウン) af-south-1 ec2.af-south-1.amazonaws.com not-opted-in af-south-1 ■OptInStatusは3つのステータスを出力する。 $ cat region-dict opt-in-not-required オプトイン不要(有効) opted-in オプトインしている(有効) not-opted-in オプトインしていない(無効) $ awk '{print $NF | "sort -uV"}' aws-region2.txt not-opted-in opt-in-not-required ■無効の条件を追加すると以下のようになる。 $ grep -f aws-region{3,,2}.txt | \ awk -F"[ :\t]" '{a[$2]=a[$2]" "$0}END{for(n in a){gsub(" *|\t|:"," ",a[n]);gsub("aws-region2*.txt","",a[n]);print a[n],n}}' | \ awk '{if(NF<5|| $(NF-1) ~ /^not-opted-in$/){print "* "$0}else{print " "$0}}' eu-west-2 欧州(ロンドン) eu-west-2 ec2.eu-west-2.amazonaws.com opt-in-not-required eu-west-2 eu-north-1 欧州(ストックホルム) eu-north-1 ec2.eu-north-1.amazonaws.com opt-in-not-required eu-north-1 eu-west-3 欧州(パリ) eu-west-3 ec2.eu-west-3.amazonaws.com opt-in-not-required eu-west-3 us-west-1 米国西部(北カリフォルニア) us-west-1 ec2.us-west-1.amazonaws.com opt-in-not-required us-west-1 us-east-1 米国東部(バージニア北部) us-east-1 ec2.us-east-1.amazonaws.com opt-in-not-required us-east-1 * ap-east-1 アジアパシフィック(香港) ap-east-1 ec2.ap-east-1.amazonaws.com not-opted-in ap-east-1 us-west-2 米国西部(オレゴン) us-west-2 ec2.us-west-2.amazonaws.com opt-in-not-required us-west-2 us-east-2 米国東部(オハイオ) us-east-2 ec2.us-east-2.amazonaws.com opt-in-not-required us-east-2 * eu-south-1 ヨーロッパ(ミラノ) eu-south-1 ec2.eu-south-1.amazonaws.com not-opted-in eu-south-1 sa-east-1 南米(サンパウロ) sa-east-1 ec2.sa-east-1.amazonaws.com opt-in-not-required sa-east-1 ap-northeast-1 アジアパシフィック(東京) ap-northeast-1 ec2.ap-northeast-1.amazonaws.com opt-in-not-required ap-northeast-1 ap-northeast-2 アジアパシフィック(ソウル) ap-northeast-2 ec2.ap-northeast-2.amazonaws.com opt-in-not-required ap-northeast-2 ap-south-1 アジアパシフィック(ムンバイ) ap-south-1 ec2.ap-south-1.amazonaws.com opt-in-not-required ap-south-1 * ap-northeast-3 アジアパシフィック(大阪 ローカル) ap-northeast-3 eu-central-1 欧州(フランクフルト) eu-central-1 ec2.eu-central-1.amazonaws.com opt-in-not-required eu-central-1 ap-southeast-1 アジアパシフィック(シンガポール) ap-southeast-1 ec2.ap-southeast-1.amazonaws.com opt-in-not-required ap-southeast-1 ap-southeast-2 アジアパシフィック(シドニー) ap-southeast-2 ec2.ap-southeast-2.amazonaws.com opt-in-not-required ap-southeast-2 * me-south-1 中東(バーレーン) me-south-1 ec2.me-south-1.amazonaws.com not-opted-in me-south-1 ca-central-1 カナダ(中部) ca-central-1 ec2.ca-central-1.amazonaws.com opt-in-not-required ca-central-1 eu-west-1 欧州(アイルランド) eu-west-1 ec2.eu-west-1.amazonaws.com opt-in-not-required eu-west-1 * af-south-1 アフリカ(ケープタウン) af-south-1 ec2.af-south-1.amazonaws.com not-opted-in af-south-1 ■有効なリージョンの一覧を抽出 $ grep -f aws-region{3,,2}.txt | \ awk -F"[ :\t]" '{a[$2]=a[$2]" "$0}END{for(n in a){gsub(" *|\t|:"," ",a[n]);gsub("aws-region2*.txt","",a[n]);print a[n],n}}' | \ awk '{if($(NF-1) !~ /^not-opted-in$/&& $1 !~ /ap-northeast-3/){print $1,$2}}' | sort -V ap-northeast-1 アジアパシフィック(東京) ap-northeast-2 アジアパシフィック(ソウル) ap-southeast-1 アジアパシフィック(シンガポール) ap-southeast-2 アジアパシフィック(シドニー) ap-south-1 アジアパシフィック(ムンバイ) ca-central-1 カナダ(中部) eu-central-1 欧州(フランクフルト) eu-north-1 欧州(ストックホルム) eu-west-1 欧州(アイルランド) eu-west-2 欧州(ロンドン) eu-west-3 欧州(パリ) sa-east-1 南米(サンパウロ) us-east-1 米国東部(バージニア北部) us-east-2 米国東部(オハイオ) us-west-1 米国西部(北カリフォルニア) us-west-2 米国西部(オレゴン) $ grep -f aws-region{3,,2}.txt | \ awk -F"[ :\t]" '{a[$2]=a[$2]" "$0}END{for(n in a){gsub(" *|\t|:"," ",a[n]);gsub("aws-region2*.txt","",a[n]);gsub("大阪 ローカル","大阪:ローカル",a[n]);print a[n],n}}' | \ awk '{if($(NF-1) ~ /^not-opted-in$/|| $1 ~ /ap-northeast-3/){print $1,$2}}' | sort -V af-south-1 アフリカ(ケープタウン) ap-east-1 アジアパシフィック(香港) ap-northeast-3 アジアパシフィック(大阪:ローカル) eu-south-1 ヨーロッパ(ミラノ) me-south-1 中東(バーレーン)