AWSTOE で ローカルテスト

AWS EC2 Image Builder というサービスがあります。

Production Ready ないわゆるゴールデンマスターになる AMI の構築は結構手間で、実際の環境を構築してからイメージ作成をおこなう手順が必要でした。

EC2 Image Builder は、この作業を自動化してくれるのと、セットアップされた内容の検証も自動でやってくれるサービス。

EC2 Image Builder は、「OS のアップデート」や「CloudWatch Agent のインストール」といったコンポーネントと呼ばれるパーツを組み合わせてパイプラインを構築していくんです。そして、動作としては AWS Systems Manager の Automation 機能を利用して EC2 インスタンスの起動、コンポーネントの実行、イメージ作成、イメージ検証を一気にやってくれます。

このコンポーネントは、Amazon が最初から用意していくれているものに加え、自分でも Buildspec を用意すれば作れるんでが、コンポーネントに記述した内容の検証のために毎度 EC2 Image Builder のパイプラインを回していると時間がかかるし、ログが探しにくいのですよ・・・。

しかし、AWSTOE というツールを使うことで、コンポーネントをローカル実行させることが出来ちゃいます。

ローカルの開発環境で動かしてもいいんですけど、クローズドな環境を用意しないと実際にコマンドが実行されるから厄介なことにもなるので、これを EC2 で動かすほうがラクだとおもう。何度でも繰り返し使い捨てできますし。それに、EC2 Image Builder のパイプラインで利用するインスタンスプロフィールと同じものをつけてあげれば IAM ロールの権限チェックも一緒にできますね。

AWSTOE on EC2

  1. EC2 インスタンスを起動する(EC2 Image Builder で利用する IAM ロールを付ける)
  2. EC2 インスタンスに SSH/RDS/Session Manager などで入る
  3. アーキテクチャ別に用意された AWSTOE の実行ファイルをダウンロードする
  4. 動作検証するコンポーネントの YAML ファイルを用意する
  5. この段階で AMI を作っておく(2回め以降の検証は、この AMI から起動する)
  6. YAML ファイルの検証をする
    $ awstoe validate --documents /path/to/nginx.yml
  7. 問題があれば直すし、なければコンポーネントを実行する
    $ awstoe run --documents /path/to/nginx.yml --phases build
  8. 実行されたログが画面上に流れるので問題があれば確認する
  9. 出来上がった環境で漏れや抜けが無いかチェックして問題がなければコンポーネント登録する

この辺が参考になる。

さらなる先へ

Github などと連携して、EC2 の ユーザーデータからコンポーネントの YAML ファイルをダウンロードするようにすれば、コンポーネント自体の確認用 CI パイプライン構築と自動化もできるんじゃないかしら。

EC2 Image Builder の API や CloudFormation も対応しているっぽいから CD パイプラインまで自動化がきっとできるんじゃないかしら。

まとめ

結果として、EC2 から AMI 作ってるのと変わらない?

いやいや。

  • EC2 Image Builder を使うと使い回しができるコンポーネントを用意できる。
  • 導入だけではなく、環境の検証もできる
  • Ansible とかすでにある資産を使うこともできる