EC2 Image builderに入門してみた

2020.03.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。AWS事業本部のKyoです。

「あのアカウントで使ってるAMIを使いたいなぁ。でもアカウント間を跨いでの共有はちょっと面倒だなぁ...。」 そんなことを話していたら、EC2 Image builder(以下、Image builder)用のBuild Componentファイルを共有してもらえることになりました。 これを活用するために、まずは手を動かしながらImage builderに入門してみることにしました。

Image builderとは?

公式ドキュメント

EC2 Image Builderはソフトウェアで事前にインストールおよび設定、カスタマイズされた安全で最新の「ゴールデン」サーバーイメージの作成、管理、およびデプロイメントを自動化し、特定のIT標準を満たすための設定を行うAWSのマネージドサービスです(意訳)

ざっくりいうとAMIを作るためのツールです。Packerに似たツールというとイメージしやすいでしょうか。

re:Invent 2019で発表され、弊社スタッフも大量にブログを書いていました(関連記事のリンクを本記事の末尾につけておきます)。

入門してみる

キーワード

Image Builderを利用する前に、イメージを持っておいて欲しいキーワードがあります。

※いずれも公式ドキュメントを引用および機械翻訳したものです。

Build Components

ビルドコンポーネントは、ソフトウェアパッケージをダウンロード、インストール、および構成するための一連の手順を定義するオーケストレーションドキュメントです。また、検証とセキュリティ強化の手順も定義します。 コンポーネントは、YAMLドキュメント形式を使用して定義されます。

※同様にテストを定義するTest Componentsも存在します。

Recipes

Image Builderイメージレシピは、ソースイメージと、ソースイメージに適用して出力イメージに必要な構成を生成するコンポーネントを定義するドキュメントです。

Image pipelines

イメージパイプラインは、AWSで安全なOSイメージを構築するための自動化構成です。 Image Builderイメージパイプラインは、イメージビルドライフサイクルのビルド、検証、およびテストフェーズを定義するイメージレシピに関連付けられています。

簡単にまとめると、ソフトウェアのダウンロードやインストールを定義したyamlファイルがComponentで、ComponentをまとめてベースとなるAMIをの情報をまとめたものがRecipe、Recipeから実際にAMIを取得するパイプラインを定義したものがImage pipelineです。

やってみること

(Build, Test)Componentを作成、それを元にRecipeを作成します。そのRecipeを元にImage pipelineを作成し、AMIの取得までを行います。

文字と図にすると長く見えるのですが、実際行ってみるとシンプルです。

Components

まずはComponentの作成を行います。右上のCreate Componentから始めます。

Build componentの情報を入力します。Use build component exampleにチェックを入れるとサンプルが入力されます。同様にTest componentもサンプルから作成します。

以下のように作成されます。

Recipes

Componentと同様に右上のボタンから始めます。

recipeの詳細を入力します。

今回は、Amazon Linux2のAMIをベースに先ほど作成した2つのCompornetを指定しました。

以下の様に作成されました。

Image pipelines

先ほど完成したrecipeの名前をクリックし、詳細画面へ移動、右上の Create pipeline from this recipeをクリックします。

次にpipelineの設定を行います。

IAMロールが必要になります。今回はAdminを利用していますが、本番では最小権限のIAMロールを付与してください。 なお、IAMロールについてはこちらのドキュメントに記載がありEC2InstanceProfileForImageBuilder およびAmazonSSMManagedInstanceCore ポリシーを含むロールが必要とされています。

また、起動スケジュールの設定が可能です。スケジュール実行も可能ですが、今回はマニュアルを選択しました。

他に、AMI取得時に起動するインスタンスタイプや通知用のSNS、起動するVPC等の設定が可能です。加えて、トラブルシュートのため、AMI作成用のインスタンスにログインするための秘密鍵の設定やS3バケットへのログ出力も可能です。

※ S3にログ出力を行う場合には、追加のポリシーが必要になります。

次の画面でpipelineのオプショナルな設定が行えます。

ライセンス情報や、AMIの名前、タグ、公開範囲を設定可能です。

レビュー画面で確認後、以下の画面が表示されるので、Pipeline nameをクリックして詳細に移動します。

右上のActionsから Run pipelineをクリックします。

しばらくするとAMI取得のためEC2が起動します。ビルド用のインスタンスが起動、終了した後にテスト用のインスタンスが起動します。

なお、インスタンスタイプは指定しない場合、m5.largeで起動するようです。

 

以上でAMIが取得できました。

おわりに

簡単にImage builderに入門し、AMIを取得してみました。

今回は手動起動でしたが、文中で触れたように、スケジュール起動も可能です。 また、下記の関連記事にもありますように、CodePipelineとの連携により、Componentファイルの更新をトリガーにゴールデンイメージを自動生成する構成も可能となります。

かなり色々なことが出来るサービスなので、今後試してみたいと思います。

以上、何かのお役に立てれば幸いです。

関連記事