🙄
Amazon ECS サービスリビジョンから対象のクラスター・サービスを特定するスクリプトを書いてみた
なぜやろうと思ったのか
デプロイの状況を監視するために、EventBridge経由でECS Deployment State Changeのイベントをslackに通知しています。
こんな感じです。
ただ、この通知Deployment IDは記載されているんですが、クラスター・サービスの情報がない
→これだと問題が発生した時にどのクラスター・サービスで発生するかが分からない。。。。
ってことでサクッと特定できればいいかなと思いって作ってみました。
Amazon ECS サービスリビジョンって
slackの通知には「Deployment ID」ってなっているんですが、正式には「Amazon ECS サービスリビジョン」という名称らしい?
マネコンでいうとここの部分
アプリケーションがECS化してから結構経っていますが、正直これを意識したことは今まであまりなかったです。。。。
スクリプト(Ruby)
引数にAmazon ECS サービスリビジョンを渡してあげて検索かけるみたいな感じです。
CLI一発とかで検索できればいいんだけど、微妙にめんどくさい。。。。
ちょっと検索するところは雑かも?💦
スクリプト本体(test.rb)
require 'aws-sdk-ecs'
# AWSクライアントの設定
ecs_client = Aws::ECS::Client.new(region: 'ap-northeast-1')
# サービスリビジョンID
#service_revision_id = 'ecs-svc/5104029439159861045'
service_revision_id = ARGV[0]
# クラスタのリストを取得
clusters = ecs_client.list_clusters.cluster_arns
clusters.each do |cluster_arn|
# クラスタ内のサービスを取得
services = ecs_client.list_services(cluster: cluster_arn).service_arns
services.each do |service_arn|
# サービスの詳細を取得
service = ecs_client.describe_services(cluster: cluster_arn, services: [service_arn]).services.first
# サービスリビジョンIDと一致するか確認
if service.deployments[0].include?(service_revision_id)
puts "Cluster ARN: #{cluster_arn}"
puts "Service ARN: #{service_arn}"
end
end
end
Gemfile
source "https://rubygems.org"
gem 'aws-sdk-ecs'
実行例
$ ruby test.rb ecs-svc/{{ Amazon ECS サービスリビジョン }}
Cluster ARN: arn:aws:ecs:ap-northeast-1:{{ AWSのアカウントID }}:cluster/{{ クラスター名 }}
Service ARN: arn:aws:ecs:ap-northeast-1:{{ AWSのアカウントID }}:service/{{ クラスター名 }}/{{ サービス名 }}
Discussion