Amazon RDS リソースのタグ付け - Amazon Aurora

Amazon RDS リソースのタグ付け

Amazon RDS タグは、DB インスタンスや DB スナップショットなど、Amazon RDS リソースを定義して関連付ける名前と値のペアです。その名前はキーと呼ばれます。オプションで、キーに値を追加できます。

AWS Management Console、AWS CLI、または Amazon RDS API を使用して、Amazon RDS リソースに対してタグを追加、一覧表示、削除できます。CLI または API を使用するときは、操作する RDS リソースの Amazon リソースネーム (ARN) を指定する必要があります。ARN の作成の詳細については、「Amazon RDS 用 ARN の構築」をご参照ください。

Amazon RDS リソースタグを使用する理由

タグを使用して、以下のことを行うことができます。

  • RDS リソースをアプリケーション、プロジェクト、部門、環境などに分類します。例えば、タグキーを使用してカテゴリを定義し、タグ値をそのカテゴリのアイテムにすることができます。タグ environment=prod を作成できます。または、project のタグキーと Salix のタグ値を定義して、Amazon RDS リソースが Salix プロジェクトに割り当てられていることを示すことができます。

  • リソース管理タスクを自動化します。例えば、environment=test にタグ付けされたインスタンスのウィンドウとは異なる environment=prod にタグ付けされたインスタンスのメンテナンスウィンドウを作成できます。インスタンスにタグ付けされた environment=prod の自動 DB スナップショットを設定することもできます。

  • IAM ポリシー内の RDS リソースへのアクセスを制御します。これを行うには、グローバル条件キー aws:ResourceTag/tag-key を使用します。例えば、ポリシーでは、DBAdmin グループ内のユーザーのみを environment=prod でタグ付けされた DB インスタンスの変更を許可できます。IAM ポリシーでタグ付けされたリソースへのアクセスの管理については、「AWS Identity and Access Management ユーザーガイド」の「Amazon Aurora での Identity and Access Management」および「AWS リソースへのアクセスの制御」を参照してください。

  • タグに基づいてリソースをモニタリングします。例えば、environment=prod でタグ付けされた DB インスタンス用の Amazon CloudWatch ダッシュボードを作成できます。

  • 同様にタグ付けされたリソースの費用をグループ化することで、コストを追跡します。例えば、project=Salix で Salix プロジェクトに関連付けられた RDS リソースにタグ付けした場合、コストレポートを生成して、このプロジェクトに経費を割り当てることができます。詳細については、「Amazon RDS でのタグを使用した AWS 請求の仕組み」を参照してください。

Amazon RDS リソースタグの仕組み

AWS はタグに意味論的意味を適用しません。タグは単なる文字列として解釈されます。

Amazon RDS のタグセット

すべての Amazon RDS リソースには、タグセットと呼ばれるコンテナがあります。コンテナには、リソースに割り当てられたすべてのタグが含まれます。リソースにはタグセットが 1 つだけあります。

タグセットには 0~50 個のタグが含まれます。既存のリソースタグと同じキーを持つタグを RDS リソースに追加した場合、既存の値は新しい値によって上書きされます。

Amazon RDS のタグ構造

RDS タグの構造は次のとおりです。

タグキー

キーは、タグの必須の名前です。文字列値は、1~128 文字の Unicode 文字であり、aws: または rds: をプレフィックスとして使用することはできません。文字列には、一連の Unicode 文字、数字、空白、_.:/=+-、および @ を含めることができます。Java 正規表現は "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" です。タグキーでは、大文字と小文字が区別されます。したがって、キー projectProject は区別されます。

キーはタグセットに固有です。例えば、project=Trinityproject=Xanadu など、タグセットでキーが同じで値が異なるキーと値のペアは使用できません。

タグ値

値は、タグのオプションの文字列値です。文字列値は、1~256 文字の Unicode 文字である必要があります。文字列には、一連の Unicode 文字、数字、空白、_.:/=+-、および @ を含めることができます。Java 正規表現は "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" です。タグ値は大文字と小文字が区別されます。したがって、値 prodProd は区別されます。

値はタグセット内で一意である必要はなく、null にできます。例えば、project=Trinitycost-center=Trinity のタグセット内に 1 つのキーと値のペアを使用できます。

タグ付けの対象となる Amazon RDS リソース

次の Amazon RDS リソースにタグ付けができます。

  • DB インスタンス

  • DB クラスター

  • DB クラスターエンドポイント

  • リードレプリカ

  • DB スナップショット

  • DB クラスタースナップショット

  • リザーブド DB インスタンス

  • イベントサブスクリプション

  • DB オプショングループ

  • DB パラメータグループ

  • DB クラスターのパラメータグループ

  • DB サブネットグループ

  • RDS プロキシ

  • RDS Proxy エンドポイント

    注記

    現在、AWS Management Console を使用して、RDS プロキシおよび RDS プロキシエンドポイントにタグ付けすることはできません。

  • ブルー/グリーンデプロイ

  • ゼロ ETL 統合 (プレビュー)

Amazon RDS でのタグを使用した AWS 請求の仕組み

タグを使用して、自分のコスト構造を反映するように AWS 請求書を整理します。そのためには、サインアップして、タグキー値が含まれた AWS アカウント の請求書を取得する必要があります。次に、結合したリソースのコストを見るには、同じタグキー値のリソースに従って請求書情報を整理します。例えば、複数のリソースに特定のアプリケーション名のタグを付け、請求情報を整理することで、複数のサービスを利用しているアプリケーションの合計コストを確認することができます。詳細については、AWS Billingユーザーガイド の「コスト配分タグの使用」をご参照ください。

DB クラスタースナップショットでのコスト配分タグの仕組み

DB クラスタースナップショットにタグを追加することができます。ただし、このグループは請求書に反映されません。コスト配分タグを DB クラスタースナップショットに適用するには、以下の条件を満たす必要があります。

  • タグは親 DB インスタンスにアタッチする必要があります。

  • 親 DB インスタンスは、DB クラスタースナップショットと同じ AWS アカウント に存在する必要があります。

  • 親 DB インスタンスは、DB クラスタースナップショットと同じ AWS リージョン に存在する必要があります。

DB クラスタースナップショットは、親 DB インスタンスと同じ リージョンに存在しない場合、孤立したと見なされます。孤立したスナップショットのコストは、タグのない単一の項目に集約されます。クロスアカウント DB クラスタースナップショットは、次の条件が満たされても孤立したとは見なされません。

  • 親 DB インスタンスと同じリージョンに存在します。

  • 親 DB インスタンスはソースアカウントによって所有されます。

    注記

    親 DB インスタンスが別の アカウントによって所有されている場合、コスト配分タグはデスティネーションアカウントのクロスアカウントスナップショットに適用されません。

Amazon RDS リソースのタグ付けのベストプラクティス

タグを使用するときには、以下のベストプラクティスに従うことをおすすめします。

  • 組織内のすべてのチームが従うタグ使用の規則を文書化します。特に、名前が記述的で一貫性があることを確認してください。例えば、env:production を持つリソースにタグ付けするのではなく、形式 environment:prod で標準化します。

    重要

    個人情報 (PII) などの機密情報や秘匿性の高い情報はタグに格納しないでください。

  • タグ付けを自動化して一貫性を確保します。例えば、以下の技法を使用できます。

    • AWS CloudFormation テンプレートにタグを含めます。テンプレートを使用してリソースを作成すると、リソースは自動的にタグ付けされます。

    • AWS Lambda 関数を使用してタグを定義して適用します。

    • RDS リソースにタグを追加する手順を含む SSM ドキュメントを作成します。

  • タグは必要な場合にのみ使用します。1 つの RDS リソースに最大 50 個のタグを追加できますが、ベストプラクティスは、不要なタグの拡散や複雑さを回避することです。

  • タグの関連性と正確性を定期的に確認します。必要に応じて、古いタグを削除または変更します。

  • AWS Management Console で AWS タグエディタを使用してタグを作成することを検討してください。タグエディタを使用して、RDS リソースを含む複数のサポートされている AWS リソースにタグを同時に追加できます。詳細については、AWS リソースグループユーザーガイドタグエディタを参照してください。

Amazon RDS でタグを管理する

以下の操作を行うことができます。

  • リソースの作成時にタグを作成します。例えば、AWS CLI コマンド create-db-instance を実行するときなどです。

  • 既存のリソースにタグを追加するには、add-tags-to-resource コマンドを使用します。

  • コマンド list-tags-for-resource を使用して、特定のリソースに関連付けられたタグを一覧表示します。

  • コマンド add-tags-to-resource を使用してタグを更新します。

  • コマンド remove-tags-from-resource を使用して、リソースからタグを削除します。

次の手順は、DB インスタンスおよび Aurora DB クラスターに関連するリソースに対して一般的なタグ付け操作を実行する方法を示しています。タグはリソース承認用にキャッシュに格納されます。このため、Amazon RDS リソースにタグを追加または更新すると、変更が利用可能になるまでに数分かかることがあります。

Amazon RDS リソースにタグを追加するプロセスはすべてのリソースで同様です。以下の手順では、Amazon RDS DB インスタンスにタグを付加する方法を示します。

DB インスタンスにタグを追加するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択します。

    注記

    [Filter databases (データベースのフィルター)] ペインで DB インスタンスの一覧をフィルターするには、[Filter databases (データベースのフィルター)] のテキスト文字列を入力します。その文字列を含む DB インスタンスのみが表示されます。

  3. タグ付けする DB インスタンスの名前を選択して、その詳細を表示します。

  4. 詳細セクションで、下にスクロールし、[タグ] を選択します。

  5. 追加 を選択します。[タグの追加] ウィンドウが表示されます。

    [タグの追加] ウィンドウ
  6. [タグキー] と [] の値を入力します。

  7. 別のタグを追加するには、[別のタグを追加] を選択し、[タブキー] と [] の値を入力します。

    このステップを必要な回数繰り返します。

  8. 追加 を選択します。

DB インスタンスからタグを削除するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択します。

    注記

    [Filter databases (データベースのフィルター)] ペインで DB インスタンスの一覧をフィルターするには、[Filter databases (データベースのフィルター)] ボックスにテキスト文字列を入力します。その文字列を含む DB インスタンスのみが表示されます。

  3. DB インスタンスの名前を選択して、その詳細を表示します。

  4. 詳細セクションで、下にスクロールし、[タグ] を選択します。

  5. 削除するタグを選択します。

    タグセクション
  6. [削除] を選択し、[Delete tags] (タグの削除) ウィンドウから [削除] を選択します。

AWS CLI を使用して DB インスタンスのタグを追加、一覧表示、または削除できます。

  • Amazon RDS リソースに 1 つ以上のタグを追加するには、AWS CLI コマンド add-tags-to-resource を使用します。

  • Amazon RDS リソースのタグを一覧表示するには、AWS CLI コマンド list-tags-for-resource を使用します。

  • Amazon RDS リソースから 1 つ以上のタグを削除するには、AWS CLI コマンド remove-tags-from-resource を使用します。

必要な ARN を作成する方法の詳細については、「Amazon RDS 用 ARN の構築」を参照してください。

Amazon RDS API を使用して DB インスタンスのタグを追加、一覧表示、または削除できます。

  • Amazon RDS リソースにタグを追加するには、AddTagsToResource オペレーションを使用します。

  • Amazon RDS リソースに割り当てられているタグを一覧表示するには、ListTagsForResource を使用します。

  • Amazon RDS リソースからタグを削除するには、RemoveTagsFromResource オペレーションを使用します。

必要な ARN を作成する方法の詳細については、「Amazon RDS 用 ARN の構築」を参照してください。

Amazon RDS API を使用して XML を操作する場合、タグでは以下のスキーマを使用します。

<Tagging> <TagSet> <Tag> <Key>Project</Key> <Value>Trinity</Value> </Tag> <Tag> <Key>User</Key> <Value>Jones</Value> </Tag> </TagSet> </Tagging>

以下の表に示しているのは、使用可能な XML タグとその特性のリストです。KeyValue の値は、大文字と小文字が区別されます。例えば、project=TrinityPROJECT=Trinity は別個のタグです。

タグ付け要素 説明
タグセット タグセットは、Amazon RDS リソースに割り当てられるすべてのタグのコンテナです。リソースごとに割り当て可能なのは 1 つのタグセットのみです。Amazon RDS API によってのみタグセットを操作できます。
Tag タグはユーザー定義のキーと値のペアです。1~50 個のタグをタグセットに含めることができます。
キー

キーはタグの必須の名前です。制限については、「Amazon RDS のタグ構造」を参照してください。

文字列値は、1~128 文字の Unicode 文字です。aws: または rds: をプレフィックスとして使用することはできません。文字列には、一連の Unicode 文字、数字、空白、「_」、「.」、「/」、「=」、「+」、「-」 (Java 正規表現: "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)") のみ使用できます。

キーはタグセットに対して一意である必要があります。例えば、タグセットでキーが同じで値が異なるキーと値のペアは使用できません。例えば、project/Trinity や project/Xanadu は使用できません。

値はタグの省略可能な値です。制限については、「Amazon RDS のタグ構造」を参照してください。

文字列値は、1~256 文字の Unicode 文字です。aws: または rds: をプレフィックスとして使用することはできません。文字列には、一連の Unicode 文字、数字、空白、「_」、「.」、「/」、「=」、「+」、「-」 (Java 正規表現: "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)") のみ使用できます。

値はタグセット内で一意である必要はなく、null を指定できます。例えば、project/Trinity と cost-center/Trinity のタグセット内に 1 つのキーと値のペアを使用できます。

DB クラスタースナップショットへのタグのコピー

DB クラスターを作成または復元するとき、クラスターのタグが DB クラスターのスナップショットにコピーされるように指定できます。タグをコピーすると、DB スナップショットとソース DB クラスターのメタデータが確実に一致するようになります。また、DB スナップショットとソース DB クラスターのアクセスポリシーが確実に一致するようになります。タグは、デフォルトではコピーされません。

次のアクションでタグが DB スナップショットにコピーされるように指定できます。

  • DB クラスターの作成

  • DB クラスターの復元

  • リードレプリカの作成

  • DB クラスターのスナップショットのコピー

注記

場合によっては、create-db-snapshot AWS CLI コマンドの --tags パラメータに値を含めることができます。または、CreateDBSnapshot API オペレーションに少なくとも 1 つのタグを指定することもできます。このような場合、RDS はソース DB インスタンスから新しい DB スナップショットにタグをコピーしません。この機能は、ソース DB インスタンスの --copy-tags-to-snapshot (CopyTagsToSnapshot) オプションが有効になっている場合でも、適用されます。

このアプローチを使用すると、DB スナップショットから DB インスタンスのコピーを作成できます。この方法では、新しい DB インスタンスに適用されないタグを追加する必要がなくなります。DB スナップショットは、AWS CLIcreate-db-snapshotコマンド (またはCreateDBSnapshot RDS API オペレーション) を使用して作成します。DB スナップショットを作成した後、このトピックで説明しているように、タグを追加することができます。

チュートリアル: タグを使用して、停止する Aurora DB クラスターを指定します

開発環境またはテスト環境で多数の Aurora DB クラスターを作成するとします。これらのクラスターをすべて数日間保持する必要があります。一部のクラスターは、夜間にテストを実施します。他のクラスターは、夜間に停止し、翌日に再び開始することができます。次の例では、夜間の停止に適したクラスターにタグを割り当てる方法を示しています。次に、この例では、スクリプトがそのタグを持つクラスターを検出し、それらのクラスターを停止する方法を示しています。この例では、キーと値のペアでの値の部分は重要ではありません。stoppable タグが存在するということは、クラスターがこのユーザー定義プロパティを持っていることを示します。

停止する Aurora DB クラスターを指定するには
  1. 停止可能として指定するクラスターの ARN を決めます。

    タグ付け用のコマンドと API は、ARN で使用できます。そうすることで、AWS リージョン、AWS アカウント、および同様の短い名前を持つ可能性のあるさまざまなタイプのリソース間でシームレスに機能できます。クラスターで動作する CLI コマンドでは、クラスター ID の代わりに ARN を指定できます。dev-test-cluster は、独自のクラスターの名前に置き換えます。ARN パラメータを使用する後続のコマンドでは、独自のクラスターの ARN を置き換えます。ARN には、独自の AWS アカウント ID と、クラスターが配置されている AWS リージョンの名前が含まれます。

    $ aws rds describe-db-clusters --db-cluster-identifier dev-test-cluster \ --query "*[].{DBClusterArn:DBClusterArn}" --output text arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
  2. このクラスターにタグ stoppable を追加します。

    このタグの名前を選択します。このアプローチにより、すべての関連情報を名前にエンコードする命名規則を考案する必要がなくなります。このような規則では、DB インスタンス名または他のリソースの名前に情報をエンコードすることができます。この例では、タグが存在するか存在しないかの属性として扱うため、Value= パラメータの --tags 部分を省略します。

    $ aws rds add-tags-to-resource \ --resource-name arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster \ --tags Key=stoppable
  3. タグがクラスターに存在することを確認します。

    これらのコマンドは、クラスターのタグ情報を JSON 形式およびタブ区切りのテキストで取得します。

    $ aws rds list-tags-for-resource \ --resource-name arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster { "TagList": [ { "Key": "stoppable", "Value": "" } ] } $ aws rds list-tags-for-resource \ --resource-name arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster --output text TAGLIST stoppable
  4. stoppable に指定されているすべてのクラスターを停止するには、すべてのクラスターのリストを準備します。リストをループし、各クラスターが関連する属性でタグ付けされているかどうかを確認します。

    この Linux の例では、シェルスクリプトを使用してクラスター ARN のリストを一時ファイルに保存し、クラスターごとに CLI コマンドを実行します。

    $ aws rds describe-db-clusters --query "*[].[DBClusterArn]" --output text >/tmp/cluster_arns.lst $ for arn in $(cat /tmp/cluster_arns.lst) do match="$(aws rds list-tags-for-resource --resource-name $arn --output text | grep 'TAGLIST\tstoppable')" if [[ ! -z "$match" ]] then echo "Cluster $arn is tagged as stoppable. Stopping it now." # Note that you can specify the full ARN value as the parameter instead of the short ID 'dev-test-cluster'. aws rds stop-db-cluster --db-cluster-identifier $arn fi done Cluster arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster is tagged as stoppable. Stopping it now. { "DBCluster": { "AllocatedStorage": 1, "AvailabilityZones": [ "us-east-1e", "us-east-1c", "us-east-1d" ], "BackupRetentionPeriod": 1, "DBClusterIdentifier": "dev-test-cluster", ...

このようなスクリプトを 1 日の終わりに実行して、重要でないクラスターが停止していることを確認できます。cron などのユーティリティを使用してジョブのスケジュールを組み、毎晩そのような確認を実行することもできます。例えば、一部のクラスターが誤って実行されたままになった場合にこれを行うことができます。ここでは、確認するクラスターのリストを準備するコマンドを微調整できます。

次のコマンドは、クラスターのリストを生成しますが、available 状態のクラスターのみを生成します。スクリプトでは、すでに停止しているクラスターを無視できます。これは、stopped または stopping などのステータス値が異なるためです。

$ aws rds describe-db-clusters \ --query '*[].{DBClusterArn:DBClusterArn,Status:Status}|[?Status == `available`]|[].{DBClusterArn:DBClusterArn}' \ --output text arn:aws:rds:us-east-1:123456789:cluster:cluster-2447 arn:aws:rds:us-east-1:123456789:cluster:cluster-3395 arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster arn:aws:rds:us-east-1:123456789:cluster:pg2-cluster
ヒント

タグを割り当てて、それらのタグを持つクラスターを検索して、他の方法でコストを削減することができます。例えば、開発とテストに使用される Aurora DB クラスターのシナリオを考えてみましょう。ここでは、一部のクラスターを 1 日の終わりに削除するか、読み取り DB インスタンスを 1 日の終わりに削除するように指定することができます。あるいは、使用率が低いと予想される時間帯に DB インスタンスを小さな DB インスタンスクラスに変更するように指定することもできます。