AWS タグの活用方法と命名ルールを考える

AWS 上で大量のリソースを稼働させている、または、させる予定がある場合、「何がどのシステムなのか」が一見して分からなくなることは往々にしてあると思います。 見る人が見れば理解出来る状態は管理上好ましくないと考えます。 そんな悩みを解消するのがタグ付けです。
2020.08.17

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きなネクストモード株式会社 の吉井です。

今回はタグ付けの活用方法を考えてみます。

タグとは

そもそもタグとは何でしょうか?
AWS リソースを識別および整理するためのメタデータとして使用される単語やフレーズです。
タグはキーと 1 つのオプションの値で構成されています。
以下はタグ付けの例です。

タグ活用パターン

タグを活用する主なパターンを洗い出してみました。

  • AWS リソースを識別/グルーピングする
  • IAM ポリシーのアクセス制御として
  • コストのグルーピング

AWS リソースを識別/グルーピングする

例えば EC2 が10台起動しているとします。
どの EC2 が自分のプロジェクトのものなのか、一覧できると便利です。
そうしたい際には以下のようなタグ付けを行います。
(タグの命名例は本エントリ後半に記述します)

タグ 設定値
キー Project
プロジェクト名称

これをマネジメントコンソールなら タグエディター で検索します。

タグエディターで検索した例を示します。
この例だと「example プロジェクト」では EC2 が2台稼働していることがわかります。

タグをまとめて付ける

AWS リソース作成時にタグ付けすればよいのですが
付け忘れてしまった場合でも後からまとめてタグ付けすることが可能です。
以下のエントリが参考になると思います。

IAM ポリシーのアクセス制御として

IAM ポリシーで「特定タグが付けられているリソースは許可/拒否」といった権限設定が可能です。
以下のポリシーは、タグキー:project、タグ値:example の EC2 のみスタートストップ権限を持っているポリシーです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "StringEquals": {"ec2:ResourceTag/project": "example"}
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeInstances",
            "Resource": "*"
        }
    ]
}

コストのグルーピング

コスト配分タグという機能が用意されています。
ユーザーが定義したタグごとにコストをグルーピングして表示する機能です。

マネジメントコンソールの Billing and Cost Management からコスト配分に使用するタグを指定します。
すぐには有効にならない(最大24時間)ので予め定義しておくことをおすすめします。

コスト配分タグごとの実際に発生したコストは Cost Explorer で見ることが可能です。
CSV でダウンロード出来るので MS Excel 等の使い慣れたアプリケーションで加工したほうが分析しやすいかもしれません。
以下の例だと、1行目太字になっている文字列がユーザー定義タグです。

https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html より引用

コスト配分タグについては AWS ブログが詳しいので参考にしてみてください。
コスト配分タグを用いた効率的なコスト管理

手動按分の必要性

コスト配分タグはコストのグルーピングを助けますが、全てのコストを明確に分離することはできないのでご注意ください。
ネットワーク通信量や特定リソースに限定しないサービス (CloudTrail、GuardDuty、CloudWatch など) の利用料金を按分したい場合には、人間が行うしかありません。
後々の揉め事にならないよう、事前に社内で按分ルールを決めておくことをおすすめします。

タグの命名ルール

タグを活用して管理をエクセレントにしたいところですが、命名ルールが決まっていないと上手に活用できないのでルールは事前に決めておきます。

タグの制限

タグにはいくつかの制限事項があります。

  • リソースあたりのタグの最大数は 50 です。
  • タグキーは、リソースごとにそれぞれ一意である必要があります。また、各タグキーに設定できる値は 1 つのみです。
  • キーの最大長 – 128 文字 (Unicode) (UTF-8)
  • 値の最大長 – 256 文字 (Unicode) (UTF-8)
  • EC2 ではタグ内に任意の文字を使用できますが、他のサービスでは制限があります。すべてのサービスで使用できる文字は、UTF-8 で表現できる文字、数字、およびスペースに加えて、 + - = . _ : / @ です。
  • タグのキーと値は大文字と小文字が区別されます。
  • aws: プレフィックスは AWS 専用として予約されています。

命名ルール例

タグ命名ルール例を示します。

Technical Tags

タグキー タグ値
Name 命名規則で定めたリソース名称を入力
Environment 環境名 (prod/stg/dev など)
SystemName システムを識別可能な文字列
ApplicationID 稼働しているアプリケーションを識別する文字列
ApplicationRole アプリケーション機能 (Web/DB/batch など)

Automation

何らかのオペレーションを自動化している場合はタグを活用して対象システムやタスク実行時間を記述します。
以下は例です。

タグキー タグ値 パターン
EC2DailyStartTime 0800 EC2 自動起動を行っている場合、0800 など時刻を指定
EC2DailyStopTime 2100 EC2 自動停止を行っている場合、2100 など時刻を指定
SSM-Inventory true or false Systems Manager インベントリを収集する対象を指定
SSM-patch-os Windows / AL2 など Patch Manager でパッチ適用を行う対象を指定
backup daily-03 AWS Backup などのバックアップ対象を指定。頻度世代を含めてもよい

ビジネスタグ

コストセンター、プロジェクト、顧客などの識別に活用します。

タグキー タグ値
Project プロジェクト名を識別する文字列
CostCenter コストを負担する部門やチームを識別する文字列
Owner 当該リソースに関する問い合わせを誰にすればよいか、管理者や PM の氏名を入力
Customer リソースを使用している顧客名

AWS が付与したタグ

aws: で始まるタグキーは AWS サービスがタグ付けしたタグです。
ユーザーが aws: で始まるタグキーを作成することはできません。
すでにタグ付けされているタグを削除することもできません。
リソースあたり 50 という最大数には影響しません。

まとめ

タグを制す者はリソース管理を制す、とまでは言いませんが、タグをフル活用することで管理上の利便性は向上すると思います。
後回しにされがちなタグ付けですが、効果的なタグ付けを覚えたいと思います。

参考

AWS リソースのタグ付け
AWS Tagging Strategies
タグエディタの使用
コスト配分タグを用いた効率的なコスト管理
リソースタグを使用した AWS リソースへのアクセスの制御

以上、吉井 亮 がお届けしました。