ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

【re:Invent 2019】新機能 EC2 Image Builder を使ってみた

現地の皆様、おはようございます。 日本の皆様、夜分に失礼致します。

初めて参加する 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」画面に遷移するので、イメージを選択します。

  1. 「Image operating system (OS)」で、マシンイメージの OS が Windows か、Linux かを選択します。
    ここは、マシンイメージから自動判定されるのかと思いきや、指定が必要でした。今後、スマートに自動判定されるとよいですね。

  2. 「Select image」は、「Select managed images」か「Enter custom AMI ID」を選択します。
    セッションでは、前者の方を選択してマーケットプレイスから AMI を選択されていました。
    僕は、アップデートしたいマシンイメージがあるので、後者を選択しました。

  3. AMI ID を入力すると、自動で Name タグ情報と Description が表示されました。これは、ミスが防げる素晴らしい導線です。
    ちなみに、入力ミスの場合はエラー表示してくれます。
  4. 「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 のアップデートを利用してみます。複数選択も可能です。

  5. 最後に「Tests」コンポーネントを選択します。
    こちらも予め準備されたテンプレートから選択が可能です。
    今回は、セッションで選択されていた「simple-boot-test-linux | Version 1.0.0」を使ってみます。
    「Next」ボタンをクリックすると「Configure pipeline」画面に遷移します。

Configure pipeline を設定する

次に構成したパイプラインをいつ、どの IAM ロールで、どのインスタンスタイプで実行するか?を決めます。
Configure pipeline で設定できるのは次の通りです。

  1. 「Pipeline details」では、名前 とパイプラインの説明を定義します。また、ロールは実行権限なので EC2 インスタンスを起動したり、再起動したりするためのロールを設定する必要があります。
  2. 「Build schedule」では「手動実行」、「スケジュールでの実行」、「cron 式で指定して実行」の 3 種類から選択が可能です。
  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 コンソールでインスタンスが起動しました。

m5.large で起動された...。課金が。。。

普段、テストで使っているインスタンスは「t2.micro」なのですが、インスタンスファミリーを指定しないと「m5.large」で起動してきました。
また、Output Image のサマリーを見ると、進行状況が確認できるようです。

残念ながら、何故か失敗!

恥ずかしながら、今回はこの後上手く AMI が作成されませんでした。上手くいくと AMI まで作成されるはずです。
時間の関係上、今夜はここまでにして、帰国後、再度試してみて更新したいと思います。
最後までお読みくださり、ありがとうございました。