EC2 Image BuilderでMackerelエージェントイントール済みのAMI(Auto Scaling環境向け)を作成してみた #reinvent

EC2 Image Builderを使用してMackerel Agentイントール済みのAmazon Linux 2 AMI(AutoScaling環境向け)を作成してみました。
2020.01.01

AWSを愛する皆さま、あけましておめでとうございます。
もしお年玉をもらえるなら 広いキッチン が欲しいコンサルティング部の西野(@xiye_gen)です。

2020年のAWS初めとして、いまさらながらEC2 Image Builderをさわってみました。

目次

お題

Auto Scaling環境向けのゴールデンイメージを作成する

タイトルのとおり、MackerelエージェントをインストールしたAmazon Linux 2のゴールデンイメージを作成してみました。
Auto Scaling環境においてMackerelエージェントを導入する際にはいくつか注意しなければならないこと(下記ブログを参照)がございます。

MackerelエージェントをAuto Scaling環境へ導入する

今回は下記の3点を必須の要件とします。

  • Mackerelエージェントのインストール
  • ホストIDファイルの削除
  • エージェント自動退役の設定

おことわり

EC2 Image Builderの一般的な使用方法については本ブログで解説しません。
公式ドキュメントや後述の参考ブログ等をご参照ください。

EC2 Image Builderの設定

Componentの作成

Definition documentを下記のとおり設定します。

name: InstallMackerelAgentDocument
description: Install Mackerel Agent for Auto Scaling environment.
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: UpdateOS
        action: UpdateOS
      - name: InstallMackerelAgent
        action: ExecuteBash
        inputs:
          commands:
            - sudo curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='YOUR API KEY' sh
            - sudo rm /var/lib/mackerel-agent/id
            - sudo sed -i -e '/^#\s*AUTO_RETIREMENT\s*=\s*1/s/^#\s*//' /etc/sysconfig/mackerel-agent

  - name: validate
    steps:
      - name: CheckMackerelAgent
        action: ExecuteBash
        inputs:
          commands:
            - rpm -qi mackerel-agent
            - mackerel-agent configtest

  - name: test
    steps:
      - name: TestMackerelAgent
        action: ExecuteBash
        inputs:
          commands:
            - sudo systemctl status mackerel-agent

14-16行目で上述した下記の作業を実施しています。

  • Mackerelエージェントのインストール
  • ホストIDファイルの削除
  • エージェント自動退役の設定

'YOUR API KEY'の部分にはご自身の環境にあわせた値を指定してください。

Image Pipelineの作成

Source Image

本日時点で最新版のAmazon Linux 2(Version 2019.11.21)を指定しました。

Build components

先ほど作成したComponentを指定します。

IAM role

下記のAWS管理ポリシーを割り当てたIAMロールを指定します。

  • EC2InstanceProfileForImageBuilder
  • AmazonSSMManagedInstanceCore

その他(検証作業中にハマったこと)

Infrastructure settings(optional)のLogsにアクセス権限未設定のS3を設定したところ、Pipelineの実行に失敗しました。
適切な権限を設定するか、あるいはLogsを指定しないようにしてください。

動作確認

Image Pipelineを実行し、出来上がったAMIから2台のEC2インスタンスを起動します。

MackerelのHosts画面から当該インスタンスを確認できます。

自動退役設定がうまくいっているか見るため、当該インスタンスを終了させます。

しばらく経つとHosts画面からインスタンスの情報が見えなくなります。自動退役設定も成功しているようです。

参考ブログ

EC2のイメージ作成を劇的に効率化するEC2 Image Builderが発表されました!

[re:Invent 2019] EC2イメージビルダーをサクッと試してみた

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

EC2 Image BuilderでCloudwatch Agent構築したAMIを作成してみた

終わりに

つい先日に同様の作業を手作業(ベースのインスタンスにSSH接続→コマンドラインによる作業→AMI化)で実施したばかりだったので、とても嬉しいアップデートでした。ゴールデンイメージの作成や管理の利便性が高まりましたね。

このブログがほんの少しでも世界を良くできれば嬉しいです。
コンサルティング部の西野(@xiye_gen)がお送りしました。