[小ネタ] PackerでAuto Scaling 用のMackerelエージェント導入済みAMIを作った

2020.01.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

おはようございます、もきゅりんです。

あけましておめでとうございます。

今回は機会があって作ることになったMackerelエージェント導入済みAMIについてまとめておきます。

どなたか必要になった際にご活用頂ければと思います。

なお、ユーザーデータで同様の対応するものとしては下記があります。

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

前提となるPackerに関する詳しい図や概念の説明については古い記事なのですが、こちらをご確認下さい。

簡単にAMIを作ってくれるよ、というのがPackerです。

PackerでAmazon LinuxのAMI(Amazon Machine Image)を作成する

今回やること

  1. 最新のAmazon Linux2 に apache と Mackerelエージェントをインストール
  2. Auto Scaling環境で利用するための設定を行う

1 については、こちらの通り。

Amazon Linuxにmackerel-agentをインストールする

2 については、公式で記載されているとおりなのですが、以下の処理を行います。

Auto Scaling環境で使う - Mackerel ヘルプ

  • ホスト起動時にホストステータスをworkingにする
  • ホスト縮退時に自動退役させる

なお、公式に記載されている /var/lib/mackerel-agent/id を消すコマンドはあえて実行していません。記載すると、amazon-ebs: rm: cannot remove ‘/var/lib/mackerel-agent/id’: No such file or directory と怒られます。Mackerelヘルプにも確認しましたが、Packerでエージェント起動して即停止するため、ホストIDを取得することなくシャットダウンするようです。

やってみる

しばらくPackerを触っていなかったので更新しておきます。

$ packer version
Packer v1.4.3
Your version of Packer is out of date! The latest version
is 1.5.1. You can update by downloading from www.packer.io/downloads.html

$ brew upgrade packer
==> Upgrading 1 outdated package:
packer 1.4.3 -> 1.5.1

Packerがお初のMacユーザの方はbrewでいけます。

$ brew update
$ brew install packer

下記ファイルを作成します。

# packer-apache-mackerel.json
{
  "variables": {
    "mfa_code": "000000"
  },
  "builders": [
    {
      "type": "amazon-ebs",
      "ami_name": "apache-mackerel",
      "region": "ap-northeast-1",
      "source_ami_filter": {
        "filters": {
          "name": "amzn2-ami-hvm-*-x86_64-gp2"
        },
        "owners": ["137112412989"],
        "most_recent": true
      },
      "instance_type": "t2.micro",
      "ssh_username": "ec2-user",
      "profile": "switch",
      "mfa_code": "{{user `mfa_code`}}"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sudo yum -y update",
        "sudo yum -y install httpd",
        "sudo systemctl start httpd && sudo systemctl enable httpd",
        "curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='YOUR_MACKEREL_APIKEY' sh",
        "sudo sed -i -e '/^#\\s*\\[host_status\\]/s/^#\\s*//' /etc/mackerel-agent/mackerel-agent.conf",
        "sudo sed -i -e '/^#\\s*on_start\\s*=\\s*\"working\"/s/^#\\s*//' /etc/mackerel-agent/mackerel-agent.conf",
        "sudo sed -i -e '/^#\\s*AUTO_RETIREMENT\\s*=\\s*1/s/^#\\s*//' /etc/sysconfig/mackerel-agent"
      ]
    }
  ]
}

MACKEREL_APIKEYはご自身の環境のAPIKEYを代入下さい。

とりあえず apache をインストールしてますが、必要なミドルウェアにして下さい。

mfa仕様となっていますので、不要であれば該当箇所を削ってお使い下さい。

PackerがIAM RoleとMFAに対応していました

あとは下記叩いてAMIは出来上がりです。

packer build -var "mfa_code=123456" packer-apache-mackerel.json

以上です。

どなたかのお役に立てば幸いです。

参考: