EC2 Image Builder でカスケードパイプラインを作ってみた

EC2 Image Builder でカスケードパイプラインを作ってみた

Image Builderってボディビルダーみたいでカッコよくない?
Clock Icon2021.02.13

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

どうも太るときも痩せるときも10kg単位は当たり前のオンジーです。

EC2 Image Builder でカスケードパイプラインを組んでみました。

カスケードパイプラインって何?

cascadeの意味を調べてみると「(連続した)小さな滝」と出てきます。

たぶんこんな感じの滝(あぁ・・・癒される・・・)

EC2 Image Builder でのカスケードパイプラインは上流のパイプラインで作成されたイメージを使って下流のパイプラインで更にコンポーネントを実行してイメージを作成する一連の流れのことです。

こちらの図が分かりやすいです。

(引用)20200825 AWS Black Belt Online Seminar AWS EC2 Image Builder

左側(上流パイプライン)で作成されたセキュアなイメージを使って右側(下流パイプライン)で分岐してそれぞれのイメージを作成している図になります。

やってみた

上流でセキュリティを向上させたイメージを作成して、下流で必要なミドルウェアを設定するというケースを想定してやってみます。

上流パイプラインの作成

今回はサクッと試すためにAWSから提供されているSTIGコンポーネントを使用します。

Security Technical Implementation Guides (STIGs) に準拠するようにセキュリティ設定を実施してくれるコンポーネントになります。low,medium,highとあり順に適用される項目が増えます。

まずはSTIGコンポーネントを選択したレシピを作成します。

レシピ名は「upstream-stig-recipe」としました。パイプラインの設定でイメージの命名を設定しない場合このレシピ名がそのまま使われます。

このレシピを選択したパイプラインを作成し実行、しばらく待つとイメージができました。(バージョン1.0.0)

下流パイプラインの作成

まずはレシピ作ります。「イメージのオリジン」で上流で作られたイメージを選択することができます。(ここがこの記事のメイン)

利用可能な最新の OS バージョンを使用する」を選択することで上流パイプラインのレシピのバージョンが上がってイメージが更新されたとしても最新のものを勝手に選んでくれることになります。

下流のコンポーネントは適当にapache,tomcatをインストールするものにしました。

レシピ名は「downstream-apache-tomcat-recipe」としました。

レシピが準備できたので下流パイプラインを作成します。

レシピ選択画面で先ほどのレシピを選択するソースイメージのバージョン部分が「x.x.x」となっており最新のものを選択する設定になっていることが分かります!

ということでこのまま下流パイプラインも作成・実行します。無事にイメージが作成されました。

作成されるイメージのバージョンを上げてみる

本当に上流のバージョンが上がるとそれを使って下流パイプラインが実行されるかを確認してみます。

STIGコンポーネントをlow→mediumに変更してバージョン2.0.0のレシピを作成します。

上流パイプラインの編集から新しいバージョンのレシピを選択して保存します。

上流パイプラインを実行します。無事にバージョンが上がりよりセキュアになったイメージができました!

ということで下流パイプラインはなにも設定をいじらずに再実行します。

実際にどのバージョンが選ばれたかはImage Builderの管理画面から確認できなかったので少し慌てたんですがCloudTrailのRunInstancesイベントから最新のイメージが選択されてEC2が起動されていることが無事に確認できました!

下流のイメージのバージョン1.0.0の中に再実行によって新しくイメージが追加されていることが確認できました。

おわり

今回は検証なので下流での分岐もない上にパイプラインも手動で実行していましたが、パイプラインをスケジュール実行しておりかつ下流で分岐している様な構成の場合はカスケードパイプラインで最新のイメージを自動的に使うことは効率化・ミス防止の面で効果が大きそうです。

参考

合わせて読みたい

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.