esm アジャイル事業部 開発者ブログ

永和システムマネジメント アジャイル事業部の開発者ブログです。

Amazon ECS タスクメタデータを利用して、Sentry のタグを設定する

はじめに

こんにちは。yoshino です。

私が開発に参加しているチームではECSタスクで処理を実行して、エラー監視にはSentryを利用しています。

その際、Sentry のCustomize Tagsは、Sentry からの通知をタグで絞り込むことができるので便利です。

この記事では、Amazon ECS タスクメタデータエンドポイントを利用して、「タスク定義で指定されたコンテナの名前」と「コンテナのイメージ名」を Sentry のタグに設定する方法を紹介します。

Amazon ECS タスクメタデータ

タスクメタデータエンドポイントバージョン 3 のECS_CONTAINER_METADATA_URIを利用する例です*1

エージェントはタスクの各コンテナに、環境変数 ECS_CONTAINER_METADATA_URI を挿入するため、環境変数経由でエンドポイントへ GET リクエストをするだけでタスクのメタデータを取得することができます。

require 'net/http'

response = Net::HTTP.get(URI.parse(ENV['ECS_CONTAINER_METADATA_URI']))
meta_data = JSON.parse(response.body, symbolize_names: true)
container = meta_data[:Name]   # => 'nginx-curl'
image = meta_data[:Image]      # => 'nrdlngr/nginx-curl'

Sentry のタグの設定

Railsであればconfig/initializers/sentry.rbに取得したcontainerimageを設定します。

getsentry/sentry-rubyを利用することを想定しています。

Sentry.configure_scope do |scope|
  scope.set_tags(container: container, image: image)
end

以上の設定を追加しておくことで、新しい ECS タスクを作成する時に、タグの設定を追加で書く必要がなくなります。

おわりに

タスクメタデータエンドポイントでは様々な情報を取得できるので、Sentry と組み合わせて利用することで、エラー監視のためのより良い環境を構築できるのではないかと思います。

*1: タスクメタデータエンドポイントバージョン 4が最新のバージョンになります。