先日、あるお客様から、Amazon Elastic Container Service(ECS)サービスに付与したリソースタグがECSタスクに引き継がれない、というご相談をいただきました。このタグは特定プロジェクトのコストを追跡・管理するために使われており、お客様にとって不可欠なものでした。
AWSでは、コスト配分タグがコスト追跡の要となります。タグには、リソースに自動付与されるAWS生成タグと、ユーザー自身が作成・適用するユーザー定義タグの2種類があり、後者はリソースを柔軟に整理するのに役立ちます。
本記事では、この問題の根本原因を掘り下げ、ユーザー定義タグがECSマネージドタグと異なる挙動を示す理由を解説します。あわせて、この課題を解消し、コスト配分戦略を有効に保つ方法もご紹介します。
さらに、DoiTが提供する強力なFinOpsツールを活用して、お客様のコスト追跡をどのように強化したかについてもご紹介します。
問題 — ECSリソースのタグ付け
Amazon ECSリソースをより適切に管理するために、タグを使って各リソースに独自のメタデータを付与できます。各タグはキーと任意の値で構成されます。
お客様はECSクラスターを作成し、サービスを関連付けていました。このサービスには、ユーザー定義タグ WebProject:CostTracking が設定されていました。
ECSサービスのユーザー定義タグ
ところが、サービスのタグが、そのサービスから起動されたタスクに引き継がれていないことが判明しました。ECSコンソールを確認すると、サービスから起動されたタスクにはECSマネージドタグのみが付与され、サービス側のユーザー定義タグは反映されていませんでした。
Amazon ECSマネージドタグを使用すると、ECSは新しく起動されるすべてのタスクに対し、クラスター情報を自動的にタグ付けします。
ユーザー定義タグが付与されていないECSタスク
AWS CLIの describe-services コマンドで、サービスのタグが伝播していないことを確認しました。
$ aws ecs describe-services — services nginx-service — cluster web-cluster — region us-east-1 — query 'services[*].propagateTags' — output text
CreateService イベントのCloudTrailログを調べたところ、サービスからタスクへタグを伝播させるパラメータが設定されていないことが分かりました。
サービスタグが伝播していないことを示すCloudTrailログ
CreateService APIを呼び出す際は、タスク定義、希望するタスク数、サービス名のほか、必要に応じてロードバランシングやサービスディスカバリーなどの詳細を指定します。
--propagate-tags パラメータは、タスク定義またはサービスのタグをタスクに伝播するかどうかを指定します。値が指定されない場合、タグは伝播されません。デフォルトは NONE です。タグはタスクの作成時にのみ伝播できます。
CloudTrailログを見ると、ECSサービスを作成した際にデフォルト値が変更されていなかったことが分かります。そのため、サービスがタスクを作成してもタグが伝播しなかったのです。
コンソールからECSサービスを作成する場合、デフォルトではサービスのタグをタスクに伝播しない設定になっています。
ECSサービスのデフォルト動作はタグを伝播しない
サービスを構成する際、サービスのタグをタスクにも適用したい場合は、ドロップダウンメニューからこのオプションを選択する必要があります。具体的には、サービスからのタグ伝播オプションを選択します。

サービス作成時のタグ付けオプション
解決方法
サービスのユーザー定義タグをタスクへ伝播させるには、新たなデプロイが必要です。ただし、この操作はAWSコンソールではなくAWS CLIから実行する必要があります。
これは、UpdateService CLIコマンドでは — propagate-tags パラメータを指定できる一方、AWSコンソールではこのパラメータが利用できないためです。
以下のコマンドでサービスを更新し、新しいデプロイを強制することで、サービスからタスクへタグが伝播されるようにしました。
$ aws ecs update-service — cluster <CLUSTER_NAME> — service <SERVICE_NAME> — force-new-deployment — propagate-tags SERVICE
UpdateService イベントのCloudTrailログを確認すると、propagateTags パラメータが SERVICE に設定されたことが分かります。
タスクへのタグ伝播のためにサービスを更新したことを示すCloudTrailログ
サービスに対して describe-services CLIコマンドを実行することで、さらに確認できます。
新しくデプロイされたタスクを確認すると、ECSマネージドタグとユーザー定義タグの両方がタスクに伝播されていることが分かります。
ECSマネージドタグとユーザー定義タグが付与されたECSタスク
DoiTのFinOpsツール
お客様のタグ付け問題を解決した後、私たちはコスト追跡の改善支援に注力しました。クラウド中心の現代において、クラウド運用の管理と最適化は容易ではありません。そこで力を発揮するのがDoiTです。クラウド管理プロセスを効率化・強化するために設計された、実用的なFinOpsツール群を提供しています。
レポート
主要機能のひとつが、DoiT Cloud Analyticsのレポートです。クラウド支出を分かりやすく可視化する強力なツールです。

このレポートでは、ユーザー定義タグ WebProject:CostTracking を活用してECSリソース別にAWSコストをフィルタリングし、正確かつ精緻なコスト追跡を実現します。
これだけ詳細に把握できれば、お客様はクラウド支出を深く理解した上で、的確な意思決定を行い、クラウド運用を効果的に最適化できます。
アラート
DoiTでは、クラウド運用におけるプロアクティブなコスト管理の重要性を熟知しています。だからこそ今回も、ECS支出をしっかり把握できるよう、課金アラートの設定をサポートしました。
DoiTコンソールから、ECSコストの日次支出を監視するアラートを作成。ECS支出が1日あたり€5を超えた場合にお客様へメールで通知されるよう、条件を設定しました。


このアラートは、日次のECS支出が事前に定めたしきい値に達した時点で、お客様にメールで通知するよう設計されています。

アラートによって配信されるメール通知
この仕組みによって、お客様はクラウドコストを効果的にモニタリングでき、想定を上回るペースで支出が増えた場合にも、迅速に対応できるようになります。
これは、お客様のクラウド運用の最適化と投資価値の最大化を支援するために私たちが取り組む数多くの施策の一例にすぎません。
DoiTによるクラウドリソース管理の支援内容や、FinOps製品・サービスについて詳しく知りたい方は、ぜひお問い合わせください。