はじめに
こんにちは。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
に取得したcontainer
とimage
を設定します。
getsentry/sentry-rubyを利用することを想定しています。
Sentry.configure_scope do |scope| scope.set_tags(container: container, image: image) end
以上の設定を追加しておくことで、新しい ECS タスクを作成する時に、タグの設定を追加で書く必要がなくなります。
おわりに
タスクメタデータエンドポイントでは様々な情報を取得できるので、Sentry と組み合わせて利用することで、エラー監視のためのより良い環境を構築できるのではないかと思います。
*1: タスクメタデータエンドポイントバージョン 4が最新のバージョンになります。