現地の皆様、おはようございます。 日本の皆様、夜分に失礼致します。
初めて参加する re:Invent に興奮が冷めずにいる尾谷です。
昨日、re:Invent 2019 で新しく発表された EC2 Image Builder のセッションを受けてきましたので、早速使ってみました。
EC2 Image Builder とは
EC2 Image Builder は、AMI (マシンイメージ) のセキュリティアップデートを自動化できる画期的なサービスです。
これまでは、取得した AMI は、定期的にセキュリティアップデートやアプリケーションのアップデートをするのが面倒でした。 また、オンプレミスでプライベートで利用している仮想マシンも、VM Import/Export で生成したイメージを EC2 インスタンスとしてデプロイしたあとに、NAT Gateway や NAT インスタンスを別途構築してアップデートする必要がありました。
EC2 Image Builder を利用すると、こうした面倒な作業(インスタンスを起動してアップデート)をすることなくマネージドされたサービスで、しかも自動でアップデートできるので、非常に効率的になります。しかも、このサービス自体は無料で利用できます。(ログの出力機能などを利用すると、S3 などのリソースで課金される場合もあります)
EC2 Image Builder の使い方
では、早速、今日セッションで教わったとおり、この画期的なサービスを使ってみることにします。
AWS マネジメントコンソールで、コンピューティングに EC2 Image Builder が追加されているので選択します。
EC2 Image Builder のコンソールでウェルカム画面が表示されたら「Create image pipeline]」ボタンをクリックします。
「Define recipe」画面に遷移するので、イメージを選択します。
「Image operating system (OS)」で、マシンイメージの OS が Windows か、Linux かを選択します。
ここは、マシンイメージから自動判定されるのかと思いきや、指定が必要でした。今後、スマートに自動判定されるとよいですね。「Select image」は、「Select managed images」か「Enter custom AMI ID」を選択します。
セッションでは、前者の方を選択してマーケットプレイスから AMI を選択されていました。
僕は、アップデートしたいマシンイメージがあるので、後者を選択しました。- AMI ID を入力すると、自動で Name タグ情報と Description が表示されました。これは、ミスが防げる素晴らしい導線です。
ちなみに、入力ミスの場合はエラー表示してくれます。
「Select build components」から、アップデートするコンポーネントを選択します。
選択できるテンプレートの中から 3 つご紹介しておきます。現在は、14 種類しかないので、今後増えていきそうです。
・ python-3-linux | Version 1.0.0
・ php-7_3-linux | Version 1.0.0
・ update-linux | Version 1.0.0
ちなみに「Create build component」から、yml 形式で自分で作成することも可能です。
今回は、予め準備された python 3 のアップデートを利用してみます。複数選択も可能です。最後に「Tests」コンポーネントを選択します。
こちらも予め準備されたテンプレートから選択が可能です。
今回は、セッションで選択されていた「simple-boot-test-linux | Version 1.0.0」を使ってみます。
「Next」ボタンをクリックすると「Configure pipeline」画面に遷移します。
Configure pipeline を設定する
次に構成したパイプラインをいつ、どの IAM ロールで、どのインスタンスタイプで実行するか?を決めます。
Configure pipeline で設定できるのは次の通りです。
- 「Pipeline details」では、名前 とパイプラインの説明を定義します。また、ロールは実行権限なので EC2 インスタンスを起動したり、再起動したりするためのロールを設定する必要があります。
- 「Build schedule」では「手動実行」、「スケジュールでの実行」、「cron 式で指定して実行」の 3 種類から選択が可能です。
- 「Infrastructure settings」はオプションなので、指定は不要しなくても動作します。
どのインスタンスファミリーで実行させるか指定したり、実行後に SNS で通知させたりしたい場合は入力してください。
今回は、セッションで教えてもらった通りに設定してみました。
・Name:「demopipeline」と入力。
・Description:「空欄」のまま。
・Role:EC2 フルコントロールが設定された「DemoRole」を選択。
・Build schedule:「Schedule builder」を選択し、「Week」、「Wednesday」、「12:01」を選択。
・Troubleshooting settings:「Terminate instance on failure」のチェックは入れたまま。
Configure additional settings - optional
「Next」をクリックすると、「Configure additional settings」に画面遷移します。
こちらは「Output AMI」だけ、「demoAMI」としました。
セッションでは、「AMI distribution settings」が、「ap-southeast-2」「us-east-1」「us-east-2」の 3 つを選択されていたのですが、省略しました。
実行してみた
プレビュー後に「create」ボタンをクリックすると、以下のようにパイプラインが作成されました。
水曜に実行されるようにしたので、すぐには動きません。手動で動かしてみます。
セッションでは時間の関係で、ここまでしか教えてもらえなかったのですが、「demopipeline」の左側にあるチェックボックスにチェックを入れて、「Actions」から「Run pipeline」をクリックすると、EC2 コンソールでインスタンスが起動しました。
普段、テストで使っているインスタンスは「t2.micro」なのですが、インスタンスファミリーを指定しないと「m5.large」で起動してきました。
また、Output Image のサマリーを見ると、進行状況が確認できるようです。
残念ながら、何故か失敗!
恥ずかしながら、今回はこの後上手く AMI が作成されませんでした。上手くいくと AMI まで作成されるはずです。
時間の関係上、今夜はここまでにして、帰国後、再度試してみて更新したいと思います。
最後までお読みくださり、ありがとうございました。