Amazon Lightsail Container を Mackerel で監視する

Mackerel Advent Calendar 2020 8日目の参加記事です。

2020年11月に、Amazon Lightsail Container というサービスがリリースされました。

dev.classmethod.jp

最低月額 $7 で、コンテナを気軽に(ロードバランサー込みで!) Amazon Lightsail 上にデプロイできるというものです。普通に AWS で Fargate のコンテナとロードバランサー(ALB)を動かすと最低でも$25/月程度はかかってしまうので、これはお手軽でよさそうですよね。

ということで、この Lightsail Container を Mackerel で監視してみましょう。

Lightsail Container の実体は?

なにはともあれ、Ligtsail Container に環境変数を出力する Web アプリケーションをデプロイして素性を探ってみます。環境変数JSON で出力する HTTP サーバを起動してくれる便利な phamviet/printenv という Public Image があるので、これを適当に Lightsail Container にデプロイしてアクセスしてみると、以下のようなレスポンスが得られました。

{
  "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI": "/v2/credentials/03aed4fb-11f7-4c84-967a-34389ff48412",
  "AWS_DEFAULT_REGION": "ap-northeast-1",
  "AWS_EXECUTION_ENV": "AWS_ECS_FARGATE",
  "AWS_REGION": "ap-northeast-1",
  "ECS_CONTAINER_METADATA_URI": "http://169.254.170.2/v3/3715f73c-a351-4df9-a923-02163d4df095",
  "ECS_CONTAINER_METADATA_URI_V4": "http://169.254.170.2/v4/3715f73c-a351-4df9-a923-02163d4df095",
  "HOME": "/root",
  "HOSTNAME": "ip-172-26-26-31.ap-northeast-1.compute.internal",
  "NODE_VERSION": "10.16.3",
  "PATH": "/usr/src/app/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  "PWD": "/usr/src/app",
  "SHLVL": "1",
  "YARN_VERSION": "1.17.3"
}

"AWS_EXECUTION_ENV": "AWS_ECS_FARGATE" なるほどですね。

Lightsail Container = Fargate を簡単に使えるようにいい感じにしてくれているなにか、のようです(あくまで推測ですよ?)

ということは普通に mackerel-container-agent で ECS / Fargate を監視するのと同じ方法でいけそうですよね。サイドカーを追加してみましょう。

mackerel-container-agent のサイドカーを追加する

公式のドキュメントをもとに、以下のような設定でコンテナを追加しました Amazon ECSにmackerel-container-agentをセットアップする

f:id:sfujiwara:20201205022844p:plain

  • image: mackerel/mackerel-container-agent:v0.5.0
  • environment
    • MACKEREL_APIKEY: *************
    • MACKEREL_CONTAINER_PLATFORM: ecs

デプロイしてしばらく待ってみると…

f:id:sfujiwara:20201205022918p:plain

普通に Fargate task として認識され、同様のメトリックが得られました。よかったですね。

[PR] デプロイツール sailtrim 開発中

現在、fujiwara/sailtrim という、Lightsail Container 用のデプロイツールを開発しています。

まだまだ荒削りですが、ECSのデプロイツール ecspresso や Lambda のデプロイツール lambroll と同じような使い勝手で Lightsail Container をコード管理してデプロイできるツールです。よろしくどうぞ。