しまかぜメモ

Masanori Yamaguchi の雑なメモ

EC2 Image Builderのエラーパターン

12月12日にFinJAWSのreCapイベントLTしてきました。内容をブログにも書いておきます。

EC2 Image Builder

re:Invent 2019で発表された、EC2のマシンイメージであるAMIを構成する為の下処理(パッケージインストール、設定、テストなど)を自動化でき、かつ自動化するためにはコードが必要なので、AMIをコードで管理出来るというメリットをもつサービス。
今までHashiCorpのPackerとAnsibleやServerspecなどを組み合わせて実現してきたことをAWSサービス内で完結できるようになった。
ちなみに、僕は触っていはいるけど、まだPacker使ってます。もう少し触ってみたり、周りの人達の情報ももらいながら、移行するか考えたいと思います。

エラーパターン

EC2 Image Builderは、その名の通りビルドジョブを走らせます。ということは、ビルドジョブでエラーも発生するということです。
更にエラーが発生するということはエラー解析が必要になるということですね。
遊びでいくつかエラーを発生してみましたので、その時のエラーメッセージなどを参考に記載していきます。

AutoScaling Groupを用意せず(削除して)ビルドパイプラインを実行する

EC2 Image Builderは、構成要件としてAutoScalint Groupを必要とします。AutoScaling Groupはビルドジョブ実行時に作成されます。
作成されたがAutoScaling Group存在しない場合は、構成要件を満たせないため、ビルドジョブでエラーになります。
基本的に発生しないエラーですが、共有環境で誰かが誤って消してしまった場合、などですかね。

f:id:kinunori:20200518222821p:plain

インターネットからパッケージをダウンロードするジョブに対して、IGWやNATが存在しないサブネットでビルドさせてみる

10分ほどビルドジョブが動作したあと、タイムアウトで死にます。なお、ログ出力先のS3にはログが出力されませんでした。
画像の塗りつぶし部分は環境によって変わる部分です。

f:id:kinunori:20200518223201p:plain

ビルドジョブ実行中に実行対象のEC2インスタンスを終了させてみる

インスタンスは終了したものの、ビルドジョブが走り続けます。最終的にはタイムアウトで終了します。
EC2 Image Builderのジョブは途中終了できないため、ジョブの間違いに気づいたらEC2インスタンスを終了することで途中終了できるということですね。(料金は、EC2の処理実行時間で課金される)

f:id:kinunori:20200518223445p:plain

この手のサービスに関しては事前にテストが難しく、静的構文解析実施後に実際にビルドジョブは実行することがテストになりがちです。
エラー解析の知識が必要になるため、可能な限り利用者で共有していけると、みんな幸せになれるかも知れませんね。