Amazon Web Services ブログ

EC2 Image BuilderによるOSイメージビルドパイプラインの自動化

社会人になったばかりの頃、開発チーム向けのOSイメージビルドの仕事がアサインされたのを今でも思い出します。時間はかかるし、エラーはよく出るし、再作成とスナップショット再取得をなんども実行する必要がありました。さらに、ご想像のとおり、そのあとには大量の手動テストが控えていたのです。

OSを最新に保つことの重要性は現在も変わりません。場合によっては自動化スクリプトを開発してくれるチームがあるかもしれませんが、いずれにせよVMのスナップショットを手動で取得するという作業は、多くのリソースを消費し、都度エラー対処が要求される、時間のかかる作業であることに変わりはありません。今日ここで、EC2 Image Builderを発表できることを大変うれしく思います。これは、自動化されたビルドパイプラインによる、簡単、かつ高速にセキュアなWindows ServerおよびLinux OSイメージをビルドし保守していくためのツールです。EC2 Image Builderで作成されたイメージは Amazon Elastic Compute Cloud (EC2)で用いることができ、また満たすべき情報セキュリティ基準を遵守できるよう、セキュリティを強化することができます。今後AWSは規制を受ける業界向けに、はじめの一手として使える“Security Technical Implementation Guide (STIG – セキュリティ設定チェックリスト)”に準拠したセキュリティ強化ポリシーを提供していきます。

EC2 Image Builderパイプラインに含めることのできる設定項目は、OSイメージのレシピ、基盤の構成、イメージの配布先、それからテスト構成です。さらに、セキュリティパッチを含むソフトウェアアップデートに応じて、イメージビルドを自動実行する機能も含まれます。パイプラインにより新たなイメージが作成されたタイミングで、各AWSリージョンにイメージを配布する前に検証すべきテストの自動実行を設定することもできます。またEC2 Image BuilderをEC2 VM Import/Export機能と併用することで、オンプレミスに存在するVMDK, VHDX, OVFそれぞれのフォーマットからなるVMイメージと連携することができます。自動テスト機能ではAWS提供のテストとユーザー定義のテストを組み合わせることもできます。

それでは、EC2 Image Builderの開始方法を見ていきましょう。

OSイメージビルドパイプラインの作成

AWSマネジメントコンソールのサービス一覧からEC2 Image Builderを選択し、EC2 Image Builderマネジメントコンソールに進みます。ここで”Create Image Pipeline”ボタンをクリックします。今回はAmazon Linux 2イメージをカスタマイズしてビルドすることにします。はじめの一歩はソースになるOSイメージを選択し、イメージに適用するビルドコンポーネントを指定し、実行するテストを構成するレシピを定義するところからです。

OSソースイメージの選択では、EC2 Image Builderの提供するAWS管理のイメージを選択しました(“Select managed images”).  この手順では他にも、自分で作成したAMIや共有されたAMIを選択することもできます。AMI IDを直接指定することができます。

“Browse images”ボタンを押すとAWS管理のイメージを選択する画面が開きます。イメージを選択するには、OS名のボックス右上のラジオボタンをクリックします。

続いてイメージに適用するビルドコンポーネントを指定します。これはインストールすべき追加ソフトウェアを指定する手順です。ウィザードの”Create build component”をクリックすると、ユーザー定義の新しいビルドコンポーネント作成のためのオプションを指定することができます。新規にビルドコンポーネントを作成するには、ビルドコンポーネントの名前(と説明書き), OS種別、コンポーネント暗号化のためのAWS Key Management Service (KMS)キー、カスタマイズのためのYAMLデータを定義します。ユーザー定義のビルドコンポーネントは複数バージョンを保持できるため、OSイメージに適用すべきソフトウェアの組み合わせを柔軟に指定することができます。複数のビルドコンポーネントを作成して選択できるので、1つのビルドコンポーネントだけであらゆるケースに対応しようとする必要はありません。

この記事ではユーザー定義のものは作成せず、”Browse build components”をクリックし、AWS定義のコンポーネントであるAmazon Corretto, Python 3, PowerShell Coreの3つを選択することにしました。

レシピの最後のステップでは、検証のために実行されるテストを定義します。テストについてもウィザードからユーザー定義のものを作成することができますが、ここではビルドコンポーネントと同様にAWS定義のものを選びたいと思います。”Browse tests”をクリックし、リブートの正常終了を確認するテストを選択しました。ここでは1項目だけでなく、複数のテスト項目を指定できることを覚えておいてください。

これでレシピの作成が完了しました。”Next”を押してパイプラインの作成に移ります。まずパイプライン名を指定し、新たなイメージをビルドするためのEC2インスタンスに関連づけるAWS Identity and Access Management (IAM)ロールを選択します。EC2 Image Builderはここで指定したIAMロールを、お使いのアカウントに起動するイメージビルドとテストのためのAmazon Elastic Compute Cloud (EC2)インスタンスに対して付与します。パイプラインによるビルド作業は手動、もしくはスケジュール実行を選択することができます。スケジュール指定には日・週・月と時刻ベースのシンプルな方法、およびcron書式による方法があります。

IAMロールに指定するIAM管理ポリシーには、AWS管理のコンポーネントのビルドとテスト実行に必要十分な権限を持つ、EC2InstanceProfileForImageBuilderを選択しました。Image Builderをカスタマイズして使用する際には、OSカスタマイズ、テスト実行、トラブルシューティング用ログのS3アップロードなどの作業が許可されるよう、十分な権限設定が必要になります。これらアクションを許可するユーザー定義の権限設定を作成するのに、AmazonSSMManagedInstanceCoreという管理ポリシーを確認するところから始めていくことをお勧めします。

パイプライン設定の最後に、ビルド用インスタンスのインスタンスタイプ、通知先Amazon Simple Notification Service (SNS)トピックといった、パイプライン基盤として起動されるリソースの詳細を指定します。必要があればAmazon Virtual Private Cloud (VPC)の詳細を指定することもできます。

ビルド対象のOSがソフトウェアライセンスで管理される場合、次の画面で指定する、もしくは新規のライセンス構成を作成して指定することができます。また出力となるAMIイメージ名、共有したいAWSリージョンとAMIの公開・非公開の設定を指定します。

“Review”をクリックしてこれまでの指定項目を確認したのち、”Create Pipeline”をクリックして準備完了です。

この例では毎日06:00 UTCにビルドするよう指定しましたが、このスケジュール設定によらず、任意のタイミングでパイプラインを実行できます。パイプラインを選択し、”Actions”メニューから”Run pipeline”をクリックします。

ビルドが完了するとAMIが作成され、Amazon EC2マネジメントコンソールから起動できるようになります。

仕事を始めたばかりにアサインされたビルド業務を思い返したとき、当時この機能があったらどれだけの時間と労力を削減できたことかと思います。EC2 Image Builderの機能はAWSの全ての商用リージョンにて、無料でお使いいただけます。イメージの作成、保管、共有のために必要となるAWSリソースにのみ費用がかかる点をご承知おきください。

— Steve

この記事はソリューションアーキテクト滝口が翻訳しました。原文はこちら