EC2 Image Builderの「ロール」と「ビルド環境」は適切に設定しよう

先日のre:Inventで発表されたEC2 Image Builderを試してみた.EC2 Image Builderで簡単なAMIを作成して,つまづいた箇所があったのでメモとして残しておこうと思う.

EC2 Image Builder

EC2 Image Builderとは,OSイメージのレシピとイメージ作成後のテストをパイプラインでつないでAMIの作成を自動化してくれるサービスである.従来,AMIの作成を自動化するにはAWS Systems Manager(以下,SSM)やHashiCorp製品のPackerなどを組み合わせる利用が目立ったが,EC2 Image BuilderはAMI作成に関する一連の作業を一気に引き受けて自動化してくれる.仕組みとしてはEC2 Image Builderが裏でSSMを動かしてAMI作成作業を抽象化している.現状ではAmazon Linux 2Windows Server 2012R2, 2016, 2019をOSとしてサポートしており,すべてのリージョンで使用可能である.

今回試してみること

以下のブログを参考にEC2 Image BuilderでAMIを作成する.今回はPHP7.3がインストールされたAMIを作成し,そのAMIが正常にEC2で起動するかテストする.その中でつまづいたポイントを紹介していく.

aws.amazon.com

EC2 Image Builderを使用してAMIを作成

説明に入る前につまづいたポイントを列挙しておく.

  1. EC2 Image Builderで使うロールのポリシーにEC2InstanceProfileForImageBuilderAmazonSSMManagedInstanceCoreが必要
  2. AMIをビルドする環境がインターネットに出ることができないとダメ

それではEC2 Image BuilderでAMIを使っていく.まずはEC2 Image Builderのサービスページで「Create image pipeline」を押下する.すると全部で3ステップあるパイプラインの作成画面が出てくる.1ステップ目でレシピを設定し,2ステップ目でパイプラインを設定し,3ステップ目でオプションを設定する.それぞれ設定していく.

1ステップ目では,AMIのOSAMIに入れるソフトウェアテスト方法を設定する.
今回使うOSはAmazon Linux 2とし,新規でAMIを作成することとする.ちなみに既存のAMIを指定することも可能である.
次に,componentsを選択する.EC2 Image BuilderではAMIにインストールするパッケージやミドルウェアcomponentsとして管理しており,componentsを選択することでAMIに必要なソフトウェア群を入れることができる.componentsはカスタムして作成することもできるが,ここではAWS管理のPHP7.3のパッケージを指定する.設定は以下のようになる.

f:id:a-mochan:20191213224408p:plain
AMIにインストールされるOS

f:id:a-mochan:20191214000955p:plain
AMIにインストールするソフトウェア群とテスト方法

2ステップ目では,EC2 Image Builderを実行するロールビルドのスケジュールビルドする環境を設定する.
ロールの設定では1つめのつまづきポイントに気をつける必要がある.AWS管理のcomponentsのビルドとテスト実行に必要十分な権限を持つEC2InstanceProfileForImageBuilderポリシーとSSMを動かすためのAmazonSSMManagedInstanceCoreポリシーをロールに付与しなければ,ほとんどの場合EC2 Image Builderが正常に動かない.自分はAmazonSSMManagedInstanceCoreポリシーをつけ忘れたのでエラーが出た.エラーの詳細はSSMの「オートメーション」ページで確認することができる.このポリシーをつけ忘れると下図のようなタイムアウトが起こるので,もしこのエラーが出たらAmazonSSMManagedInstanceCoreポリシーの付与忘れを疑うとよいかもしれない.

f:id:a-mochan:20191213211441p:plain
SSMでのエラー

ビルドのスケジュールは手動で行うように設定しておき,ビルドする環境の設定に移る.ここでは2つめのつまづきポイントに気をつける.AMIを作成する際多くの場合インターネットを通して通信すると思うので,ビルドする環境はインターネットへ通信可能なところに置いておく必要がある.自分はビルド環境を特に何も指定していなかったので,インターネットに出ることができないデフォルトの環境でビルドしてエラーが出てしまった.このエラー画面はいくつかあるので割愛させていただくが,1つめのつまづきポイントを解消してなお失敗する場合はビルド環境を疑うとよいかもしれない.設定は以下のようになる.

f:id:a-mochan:20191213233737p:plain
ロールとビルドスケジュールの設定

f:id:a-mochan:20191213234355p:plain
ビルド環境の設定

3ステップ目は,ソフトウェアライセンスとAMIの関連付けAMIの名前・タグAMIの配布先指定の設定を行う.
こちらはオプションなので必要であれば設定する.

これでパイプラインの設定は終わりである.あとは作成したパイプラインを実行すれば,EC2上での起動テスト済みかつPHP7.3がインストールされたAMIの出来上がり.

まとめ

  • EC2 Image Builderを使って簡単なAMIを作成した
  • AMI作成に自動化をサクッと作れるのはいい
  • エラー内容から直接的な原因が分かりづらかった
  • AWS管理されていないソフトウェアをcomponentsに書いて管理するより,既存で管理しているGitHubやCodeCommitから適用したいができない
  • サポートしているOSが増えて欲しいなという気持ち
  • まだまだ出たばかりなので今後に期待