この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは植木和樹@上越妙高オフィスです。
社内で利用しているOTRSサービス環境はCloudFormation + Chef + Ansibleで構築されています。昨年2014年の夏頃に構築した環境ですが、OTRSのバージョンアップや最新AMIへのアップデートのため今回再構築することにしました。Immutable Infrastructureに従ってVPCごと丸っと置き換え、Route53のDNSレコード変更で切り替えたいと思います。
さて、いざCloudFormationのテンプレートをみてみるとAMIの指定を行うマッピングに記載されたImage IDが古いことに気づきました。今回利用するのはTokyoリージョンだけですし、Amazon Linuxも2015.09を利用するのでハードコーディングしてもいいのですが・・・せっかくなのでAMIマッピングを出力するスクリプトをRubyで書いてみました。
CloudFormationのマッピングって何?という方は下記ブログをご参照ください。
コードと実行結果
コードはいつも通りgistで公開しています。
抽出条件
- Amazon LinuxのAMIのみが対象です
- 仮想化タイプはHVMのみ
- アーキテクチャはx86_64のみ
- minimal や NAT用 イメージは対象外にしています
ご希望に応じてfilter部分を適当に修正してお使いください。
実行方法
AWS SDK for Rubyの version 2を使っているので、Bundlerで実行環境限定でgemを入れています。(普段は使い慣れたv1を利用しているためです)
Gemfileを作成したらbundle install → bundle exec で実行します。
Gemfile
# A sample Gemfile
source "https://rubygems.org"
gem 'aws-sdk', '~> 2'
実行方法
$ bundle install --path bundler
$ bundle exec ./describe-amazon-linux-images.rb | jq "."
実行結果
{
"AWSAmazonLinuxAMI": {
"eu-west-1": {
"201403": "ami-dd925baa",
"201409": "ami-8723aef0",
"201503": "ami-e4d18e93",
"201509": "ami-bff32ccc"
},
"ap-southeast-1": {
"201403": "ami-82d78bd0",
"201409": "ami-94bb90c6",
"201503": "ami-d44b4286",
"201509": "ami-c9b572aa"
},
"ap-southeast-2": {
"201403": "ami-91d9bcab",
"201409": "ami-d70773ed",
"201503": "ami-db7b39e1",
"201509": "ami-48d38c2b"
},
"eu-central-1": {
"201403": "ami-224c7a3f",
"201409": "ami-0a003317",
"201503": "ami-a6b0b7bb",
"201509": "ami-bc5b48d0"
},
"ap-northeast-1": {
"201403": "ami-df470ede",
"201409": "ami-1e86981f",
"201503": "ami-1c1b9f1c",
"201509": "ami-383c1956"
},
"us-east-1": {
"201403": "ami-aaf408c2",
"201409": "ami-ee6e2a86",
"201503": "ami-0d4cfd66",
"201509": "ami-60b6c60a"
},
"sa-east-1": {
"201403": "ami-09cf6014",
"201409": "ami-a59925b8",
"201503": "ami-55098148",
"201509": "ami-6817af04"
},
"us-west-1": {
"201403": "ami-e48b8ca1",
"201409": "ami-5a90891f",
"201503": "ami-87ea13c3",
"201509": "ami-d5ea86b5"
},
"us-west-2": {
"201403": "ami-8f6815bf",
"201409": "ami-c1c39af1",
"201503": "ami-d5c5d1e5",
"201509": "ami-f0091d91"
}
}
}
できあがったJSONをCloudFormationテンプレートに貼り付けて、インデント等を適当に整形してください。
AWS SDK for Ruby version1用スクリプト
先にv1用を作ったのですが、今後はv2が主流になるということで勉強がてらv2で作りなおしたのが今回のスクリプトです。 せっかくなのでv1用スクリプトもgistに貼っておきます。v1とv2の書き方の違いをご堪能ください。
まとめ
同じAmazon Linuxバージョン(2015.09)でもマイナーバージョン毎にImage IDが異なるため、最新のバージョンが出力されるようゴニョゴニョしてます。あとバージョンごとにちゃんとソートされた状態で表示したかったのでHash → Array → Hashという妙な変換処理をかけています。
主に社内の特定の人向け便利スクリプトですが、お役にたてば幸いです。