のぴぴのメモ

自分用のLinuxとかの技術メモ

AWS 特定のAMIの各リージョンのImageID一覧を取得するシェル

1.概要

特定の種類のAMIについて、各リージョンのImageIDを取得し、CSV形式で出力するシェルスクリプトです。
例えば、SQL Server Web Editionが含まれているLicense-includeなwindowsインスタンスの各リージョンのImageIDを知りたいとかいうときに利用します。
作成したCSVフィルをExcelとかで開くとこんな感じで情報を確認できます。
f:id:nopipi:20180819201357p:plain:w800

2.使い方

2.1 前提

このツールは下記のコマンドが使えることが前提となります。

  • aws cli
  • シェル環境(bash, awk)
  • gitコマンド(セットアップに利用。なくてもなんとかはなる)

手元の環境ですが、Linux環境とMacOS環境で動くことは確認しています。

2.2 ソースコードの取得とセットアップ

ソースコードはこちらのgithubになります。
github.com

  • (1) GitHubからコードをcloneする
$ git clone https://github.com/Noppy/aws_list_amis.git
  • (2) 必要に応じて適切なフォルダにシェルをコピーする
$ cp aws_list_amis/list_amis.sh DEST_DIRECTORY_PATH

2.3 実行

  • (1)マネジメントコンソールなどで、取得したいAMIの名前を確認する
    • (a)「EC2」サービスに移動
    • (b)「インスタンスの作成」を押し、「コミュニティーAMI」を選択する
    • (c)検索などを利用し目的のAMIを見つけて、名前をコピーする

f:id:nopipi:20180819202725p:plain:w800

  • (2)シェルを実行する

取得したAMIの名前を引数にしてシェルを実行する。結果は標準出力に出力されるので、必要に応じてファイルにリダイレクトする。

./list_amis.sh "Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP1_Web-2018.07.11" > Win_SQL_WebEdition.csv

AWS リージョンのコードと名称の一覧を取得する

結論

例えば「”Asia Pacific (Tokyo)", "ap-northeast-1"」という感じに、リージョン名称とリージョンコードの一覧を取得するのは、下記のAWSのEC2ユーザーズガイドの"Regions and Availability Zones"のリージョン一覧表から取得するのが良さそう。(結局手作業ですが)
docs.aws.amazon.com

(補足)aws cliでのリージョン一覧取得

aws cliで、"aws ec2 describe-regions"でもリージョン一覧が取得できますが、リージョンコード(ap-northeast-1とか)と、EC2のエンドポイント (ec2.ap-south-1.amazonaws.comとか)しか取得できず、ap-northeast-1が”Asia Pacific (Tokyo)"というのは自動では取れないんですね。

aws cli取得例1 アジアのリージョンを取得する

aws ec2 describe-regions  --output json --filters 'Name=region-name, Values=ap-*'
{
    "Regions": [
        {
            "Endpoint": "ec2.ap-south-1.amazonaws.com", 
            "RegionName": "ap-south-1"
        }, 
        {
            "Endpoint": "ec2.ap-northeast-2.amazonaws.com", 
            "RegionName": "ap-northeast-2"
        }, 
        {
            "Endpoint": "ec2.ap-northeast-1.amazonaws.com", 
            "RegionName": "ap-northeast-1"
        }, 
        {
            "Endpoint": "ec2.ap-southeast-1.amazonaws.com", 
            "RegionName": "ap-southeast-1"
        }, 
        {
            "Endpoint": "ec2.ap-southeast-2.amazonaws.com", 
            "RegionName": "ap-southeast-2"
        }
    ]
}

取得例2 リージョンコード一覧を抜き出す

aws ec2 describe-regions --output text --query 'Regions[].{Name:RegionName}'
ap-south-1
eu-west-3
eu-west-2
eu-west-1
ap-northeast-2
ap-northeast-1
sa-east-1
ca-central-1
ap-southeast-1
ap-southeast-2
eu-central-1
us-east-1
us-east-2
us-west-1
us-west-2

取得例3 シェルで、抜き出したリージョンコード一覧をREGIONSという配列にセットする

declare -a REGIONS=( $(aws --output text ec2 describe-regions --query 'Regions[].{Name:RegionName}'|sort) )

取得したREGIONS配列を利用する例

for i in ${REGIONS[@]}; do echo "region code = $i";done
region code = ap-northeast-1
region code = ap-northeast-2
region code = ap-south-1
region code = ap-southeast-1
region code = ap-southeast-2
region code = ca-central-1
region code = eu-central-1
region code = eu-west-1
region code = eu-west-2
region code = eu-west-3
region code = sa-east-1
region code = us-east-1
region code = us-east-2
region code = us-west-1
region code = us-west-2

AWSのドキュメントリンク

個人用のメモです。

サービスに関する情報