EC2 SSMのStage ManagerでAMIMOTO内にインストールされたWordPressのバージョンを一覧にする

AMIMOTOではwp-setupというコマンドを実行することで、簡単にインスタンス内にWordPressを追加できます。
ただWordPressを増やせば増やすほど、バージョンや状態の管理が煩雑になってきます。
EC2 Systems Managerを使うことで、AMIMOTOインスタンス内にインストールされているWordPressのバージョンを一覧表示させる方法を思いついたのでまとめてみました。

Goal

以下のサンプルのように、インストールされているディレクトリとバージョンをまとめて見れるようにする。

{
  "domain": "./i-XXXXXXXXXXXXXXXX/",
  "wp_version": "4.7.3"
}
{
  "domain": "./test1.jin-kei.net/",
  "wp_version": "4.7.3"
}
{
  "domain": "./test1.amiage.net/",
  "wp_version": "4.7.3"
}

事前準備

以下の2つをインストールする必要があります。

  • EC2 Systems Manager Agent
  • jo

それぞれ以下の記事などを参考にインストールしてください。

またインスタンスには「AmazonEC2RoleforSSM」のポリシーが適用されたインスタンスロールを設定しておきましょう。

SSM ドキュメントをCloudFormationで作成する

以下のテンプレートを使ってCloudFormationスタックを作成します。

State Managerで関連付けする

以下のような設定で、State Managerを使ってインスタンスにドキュメントを関連付けします。

ここでドキュメントの実行間隔を設定することができますので、WPのバージョンを収集する間隔を指定しておきましょう。
個人的には週1回程度でいいかなと思います。

[ステータス]が[成功]になっていればOK

あとは指定した間隔でState Managerがドキュメントに記載されたコマンドを実行されるのを待ちましょう。
待てない場合は、Run Commandから実行してしまうのも1つです。

収集された情報を確認する

AWSコンソールから取得する

State ManagerまたはRun Commandでドキュメントを実行した場合、「マネージドインスタンス」から情報を確認できます。

ドキュメントの実行が成功していればこうなる

AWS-CLIから確認する

もちろんAWS-CLIから取得することも可能です。

$ aws ssm list-inventory-entries --instance-id YOUR_INSTANCE_ID --type-name "Custom:WPVersionsList" | jq .
{
  "InstanceId": "i-XXXXXXXXXXXXXXXX",
  "TypeName": "Custom:WPVersionsList",
  "Entries": [
    {
      "domain": "./i-XXXXXXXXXXXXXXXX/",
      "wp_version": "4.7.3"
    },
    {
      "domain": "./test1.jin-kei.net/",
      "wp_version": "4.7.3"
    },
    {
      "domain": "./test1.amiage.net/",
      "wp_version": "4.7.3"
    }
  ],
  "SchemaVersion": "1.0",
  "CaptureTime": "2017-03-22T19:04:12Z"
}

AWS SDK for JavaScriptから取得する

もちろんAWS SDKからも取得できます。listInventoryのAPIを呼び出す系の処理を利用しましょう。

実行結果はこのようになります。

$ node test.js 
{ TypeName: 'Custom:WPVersionsList',
  InstanceId: 'i-XXXXXXXXXXXXXXXX',
  SchemaVersion: '1.0',
  CaptureTime: '2017-03-22T19:04:12Z',
  Entries: 
   [ { domain: './i-XXXXXXXXXXXXXXXX/', wp_version: '4.7.3' },
     { domain: './test1.jin-kei.net/', wp_version: '4.7.3' },
     { domain: './test1.amiage.net/', wp_version: '4.7.3' } ] }

さいごに

AWS SDKを使ってSSMのインベントリ情報を取得することができます。
これを上手く使えば、運用中のEC2インスタンスやインスタンス内のアプリケーション情報を一覧管理できるダッシュボードなどを自作できるかなと思います。
今回は情報の取得のみの紹介でしたが、アップデートやインストールを実行するドキュメントを用意しておけばRun Command経由で外部から更新操作を行うことも可能なはずです。

AWS-CLIの方でバッチ処理的に管理していくという手もありますし、EC2 Sytems Managerの機能はどんどん使い込んでいきたいところです。

Follow me!