ECSサービスのタグをECSタスクに伝播させる

2023/07/15に公開

はじめに

今回はECSタスクにタグを設定してみます。
タグの伝播(tag propagation)という機能があり、ECSサービスかタスク定義のタグをタスクに自動で適用させることが可能となるため、それを試してみます。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs-using-tags.html#tag-resources-for-billing

なぜ設定する必要がある?

例えばECSのコストをタグで管理する場合、ECSタスクにタグをつける必要があります。
タスクはオートスケール・インで削除・生成が発生するため、手動でタスクにタグをつけるのは望ましくありません。

そこでタグの伝播を有効にすると自動でタスクにコストタグが付与されるため、
正確にタグのコストを出せるようになります。

検証

事前確認

  • ECSリソース群準備済み
  • ECSサービスに伝播したいタグを設定済み

設定の確認

awscliとjqで確認します。
デフォルトでは有効になっていないため、NONEとなっていることを確認します。

$ aws ecs describe-services \
> --services <service_name>\
> --cluster <cluster_name> | jq ".services[].propagateTags"
"NONE"

設定の適用

こちらもawscliで試します。
Serviceのタグがタスクに伝播されるように設定してみます。

aws ecs update-service \
--service <service_name> \
--cluster <cluster_name> \
--propagate-tags "SERVICE"

また既存のタスクには適用されないため、再デプロイする必要があります

aws ecs update-service \
--service <service_name> \
--cluster <cluster_name> \
--force-new-deployment

タグがついていることを確認

タスクにタグが付与されていたらOKです。

Terraform化

せっかくなのでTerraform化します。
aws_ecs_servicepropagate_tagsを設定すればよいです。

resource "aws_ecs_service" "service" {
  // 略
  propagate_tags  = "SERVICE"
  tags = {
    "tag_propagate" = "True"
  }
}

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecs_service

おわりに

無事に設定出来ました。
ECSタスクの正確なコスト集計にご利用下さい。

参考

https://dev.classmethod.jp/articles/ecs-using-tags/
https://tech.enechange.co.jp/entry/2022/10/18/100000

Discussion