[re:Invent 2019] EC2 Image Builder で複数コンポーネントを実行してみた #reinvent

こんにちは、コンサル部の望月です。

Image Builder おじさん化し、2本ブログを更新しました。

[re:Invent 2019] EC2 Image Builder でコンポーネントを作成してみた #reinvent

[re:Invent 2019] EC2 Image Builder で S3 からコンテンツをデプロイしてみた #reinvent

今回は、複数コンポーネントをイメージパイプラインで実行してみたいと思います。前回のコンポーネントで、OS アップデート、Apache インストール、コンテンツデプロイと行っていたので、これらの処理を 3 つのコンポーネントで分ける形で実行してみたいと思います。

上記、2 本のブログでやった内容は本ブログでは詳しく触れないため、不明な点がある場合は上記ブログを参照いただくのがよいかと思います。

やってみた

コンポーネントの作成

コンポーネントの作成方法については、最初に紹介した 2 本のブログを参考にしてください。

ここでは Definition document に記入する内容について、説明します。

  • OSアップデートコンポーネント
    • build
      • OSの最新化
name: OS Update
description: This is OS Update testing document.
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: InstallLinuxUpdate
        action: UpdateOS
  • Apache インストールコンポーネント
    • build
      • Apache のインストール、有効化
    • validate
      • パッケージがインストールされたかの確認
    • test
      • 80 番ポートへ接続できることの確認
name: Install Apache
description: This is Install Apache testing document.
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: InstallApache
        action: ExecuteBash
        inputs:
          commands:
            - sudo yum install httpd -y
            - sudo systemctl enable httpd
            - sudo systemctl start httpd

  - name: validate
    steps:
      - name: CheckApache
        action: ExecuteBash
        inputs:
          commands:
            - rpm -qi httpd

  - name: test
    steps:
      - name: TestApache
        action: ExecuteBash
        inputs:
          commands:
            - curl localhost
  • コンテンツデプロイコンポーネント
    • build
      • コンテンツの配置
        • <バケット名> は自分の環境に合わせてください。
    • validate
      • コンテンツが配置されたかの確認
    • test
      • 80 番ポートへ接続し、HTTPステータスコードが 200 を返すことを確認
name: Contents Deploy
description: This is Contents Deploy testing document.
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: ContentsDeploy
        action: S3Download
        maxAttempts: 3
        inputs:
          - source: s3://<バケット名>/contents/*
            destination: /var/www/html/

  - name: validate
    steps:
      - name: CheckContents
        action: ExecuteBash
        inputs:
          commands:
            - ls /var/www/html/*html

  - name: test
    steps:
      - name: TestContents
        action: ExecuteBash
        inputs:
          commands:
            - HTTP_STATUS=`curl -I localhost -o /dev/null -w '%{http_code}\n' -s`;  if [ $HTTP_STATUS -eq 200 ]; then echo $?; else echo $?; fi
  • コンポーネントが 3 つ作成されたことを確認

イメージパイプラインの作成

イメージパイプラインの作成時に先程バージョンアップしたコンポーネントを指定します

  • イメージパイプライン内の Build components から 『Browse Build components』をクリック

  • Select build components から検索条件を『Created by me』に変更し、作成した 3 つのコンポーネントを選択する

  • イメージパイプラインを作成したら『Run pipeline』を選択し、パイプラインを実行します

AMI の確認

EC2 サービスページから AMI が作成されていることを確認します。

  • AMI を確認し、起動する

  • 起動したインスタンスへアクセスし、デプロイしたコンテンツのページが表示されることを確認します

まとめ

EC2 Image Builder を使って複数コンポーネントを実行を行うことができました。

このようにコンポーネントを分けることで、サービスごとの AMI 管理が必要な環境で、共通化できる部分を分けてコンポーネント化することでコンポーネントの管理がしやすくなるかと思います。

まだまだ、やれることが多そうな Image Builder を引き続き触っていきたいと思います。