share facebook facebook facebook twitter twitter menu hatena pocket slack

2020.09.07 MON

Terraform で利用するイメージIDの取得方法

Kahoru Hagiya

WRITTEN BY Kahoru Hagiya

はじめに

こんにちはhagiです。動画チームからRackspace事業部に昨年後半に移動いたしました。

cloudpackに入社してから動画一色だったわけですがRackspace事業部ではBuild Engineerポジションでインフラ構築を担当しています。(動画チームのインフラ担当でした)

環境を構築する都度TerraformやCloudFormationのテンプレを作成してから展開しております。

Terraformなどでテンプレ化をしてから展開すると構築過程全体のスピードが上がります。もちろんインスタンスが少ない場合、AWSなので”ポチポチ”で簡単に環境を作成することができます。ただしその分設定漏れや環境全体の再現(再構築など)が複雑になったりすることがあります。
RackspaceのテンプレにはCloudWatchの監視項目やAutoscaleグループの設定、またサポートチームへの通知項目がデフォルトで含めていたり、セキュアなインスタンスへの接続するためのツールがインスタンス起動時から利用できます。
そのためインスタンスでの構築スピードは”ポチポチ”より遅くても構築からマネージドまでのスピードには分があるかなと思ってます。

なぜAMI IDを探す?

さてそんなこんなでTerraformを利用しているのですが新規インスタンスを起動する際、AMIのIDがわからない場合があります。

AWSのコンソールからの場合、マーケットプレースから探して選んで”SELECT”を押すだけだがTerraformの場合AMI IDが必要。。。

AMI IDはAWSコンソールからインスタンスを立ち上げてから確認することはもちろんできます。それでAMI IDを記録してからTerraformのスクリプトに書き込めば良い。(今書きながらこっちの方が早い気がしてきたw)

ただしmarketplaceのAMIはお金がかかる場合がある、立ち上げっぱなしになってたら怒られるかも、お客様環境でやってたらちょっと挙動不審などいろいろ説明が面倒な場合もありそう。そこでRackspace事業部のことを軽く紹介しながらAMI IDの検索方法を記事にしました。

describe-imagesで確認

今回はCentOSのAMI IDの確認方法を記述いたしますが基本これで他のも探すことが出来ます。

awscliのec2コマンドではdescribe-imagesオプションでマーケットプレースのAMIをフィルターすることが出来ます。

https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html

例えばこんな感じです。

aws ec2 describe-images --owners  aws-marketplace --filters Name=name,Values="[名前]" --region [リージョン]

例:

aws ec2 describe-images --owners  aws-marketplace --filters Name=name,Values="CentOS Linux 7*" --region ap-northeast-1

情報がいっぱい

aws ec2 describe-images --owners  aws-marketplace --filters Name=name,Values="CentOS Linux 7*" --region ap-northeast-1 --query 'reverse(sort_by(Images, &CreationDate))[:5].[Description, ImageId]' --output text
CentOS Linux 7 x86_64 HVM EBS ENA 2002_01       ami-06a46da680048c8ae
CentOS Linux 7 x86_64 HVM EBS ENA 1901_01       ami-045f38c93733dd48d
CentOS Linux 7 x86_64 HVM EBS ENA 1805_01       ami-8e8847f1
CentOS Linux 7 x86_64 HVM EBS ENA 1804_2        ami-3185744e
CentOS Linux 7 x86_64 HVM EBS ENA 1803_01       ami-91c4d3ed

--queryのreverseとsort_byをつけることによって最新AMI順にされます。

これで最新のAMI IDを確認:ami-06a46da680048c8ae

queryの利用方法は下記AWSページをご参照ください。

https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html#cli-usage-output-filter

補足

CentOSの場合、Product codeもCentOSより提供されております。

https://wiki.centos.org/Cloud/AWS

必要に応じてproduct-codeをフィルターにするのもありですね。

--filters Name=product-code,Values=[ProductCode]

最後に

すごく簡単でしたがdescribe-imagesを使ってのAMI IDの確認方法を記述しました。
Rackspace事業部の業務内容に興味がある方は下記URLもご確認ください。

https://rackspace.jp/

以上よろしくお願いいたします。

元記事はこちら

Terraform で利用するイメージIDの取得方法

Kahoru Hagiya

Kahoru Hagiya

タバコやめて絶賛ベイプ中な動画チームの初老

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。