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 2
,Windows Server 2012R2, 2016, 2019
をOSとしてサポートしており,すべてのリージョンで使用可能である.
今回試してみること
以下のブログを参考にEC2 Image BuilderでAMIを作成する.今回はPHP7.3
がインストールされたAMIを作成し,そのAMIが正常にEC2で起動するかテストする.その中でつまづいたポイントを紹介していく.
EC2 Image Builderを使用してAMIを作成
説明に入る前につまづいたポイントを列挙しておく.
- EC2 Image Builderで使うロールのポリシーに
EC2InstanceProfileForImageBuilder
とAmazonSSMManagedInstanceCore
が必要 - AMIをビルドする環境がインターネットに出ることができないとダメ
それではEC2 Image BuilderでAMIを使っていく.まずはEC2 Image Builderのサービスページで「Create image pipeline」を押下する.すると全部で3ステップあるパイプラインの作成画面が出てくる.1ステップ目でレシピを設定し,2ステップ目でパイプラインを設定し,3ステップ目でオプションを設定する.それぞれ設定していく.
1ステップ目では,AMIのOS,AMIに入れるソフトウェア,テスト方法を設定する.
今回使うOSはAmazon Linux 2
とし,新規でAMIを作成することとする.ちなみに既存のAMIを指定することも可能である.
次に,components
を選択する.EC2 Image BuilderではAMIにインストールするパッケージやミドルウェアをcomponents
として管理しており,components
を選択することでAMIに必要なソフトウェア群を入れることができる.components
はカスタムして作成することもできるが,ここではAWS管理のPHP7.3
のパッケージを指定する.設定は以下のようになる.
2ステップ目では,EC2 Image Builderを実行するロール,ビルドのスケジュール,ビルドする環境を設定する.
ロールの設定では1つめのつまづきポイントに気をつける必要がある.AWS管理のcomponents
のビルドとテスト実行に必要十分な権限を持つEC2InstanceProfileForImageBuilder
ポリシーとSSMを動かすためのAmazonSSMManagedInstanceCore
ポリシーをロールに付与しなければ,ほとんどの場合EC2 Image Builderが正常に動かない.自分はAmazonSSMManagedInstanceCore
ポリシーをつけ忘れたのでエラーが出た.エラーの詳細はSSMの「オートメーション」ページで確認することができる.このポリシーをつけ忘れると下図のようなタイムアウトが起こるので,もしこのエラーが出たらAmazonSSMManagedInstanceCore
ポリシーの付与忘れを疑うとよいかもしれない.
ビルドのスケジュールは手動で行うように設定しておき,ビルドする環境の設定に移る.ここでは2つめのつまづきポイントに気をつける.AMIを作成する際多くの場合インターネットを通して通信すると思うので,ビルドする環境はインターネットへ通信可能なところに置いておく必要がある.自分はビルド環境を特に何も指定していなかったので,インターネットに出ることができないデフォルトの環境でビルドしてエラーが出てしまった.このエラー画面はいくつかあるので割愛させていただくが,1つめのつまづきポイントを解消してなお失敗する場合はビルド環境を疑うとよいかもしれない.設定は以下のようになる.
3ステップ目は,ソフトウェアライセンスとAMIの関連付け,AMIの名前・タグ,AMIの配布先指定の設定を行う.
こちらはオプションなので必要であれば設定する.
これでパイプラインの設定は終わりである.あとは作成したパイプラインを実行すれば,EC2上での起動テスト済みかつPHP7.3
がインストールされたAMIの出来上がり.