

# Amazon RDS リソースのタグ付け
<a name="USER_Tagging"></a><a name="tagging"></a>

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

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

タグを使用して Amazon RDS リソースにメタデータを追加できます。タグを使用して、データベースインスタンス、スナップショット、Aurora クラスターなどに関する独自の表記を追加できます。これにより、Amazon RDS リソースを文書化できます。また、自動メンテナンスの手順でタグを使用することもできます。

 特に、これらのタグは IAM ポリシーで使用できます。これらを使用して、Amazon RDS リソースへのアクセスを管理したり、これらのリソースに適用できるアクションを制御したりできます。また、これらのタグを使用して、類似のリソースの費用をグループ化することで、コストを追跡できます。

以下の Amazon RDS リソースにタグを付けることができます。
+ DB インスタンス
+ DB クラスター
+ Aurora グローバルクラスター
+ DB クラスターエンドポイント
+ リードレプリカ
+ DB スナップショット
+ DB クラスタースナップショット
+ リザーブド DB インスタンス
+ イベントサブスクリプション
+ DB オプショングループ
+ DB パラメータグループ
+ DB クラスターのパラメータグループ
+ DB サブネットグループ
+ RDS プロキシ
+ RDS Proxy エンドポイント
+ ブルー/グリーンデプロイ
+ ゼロ ETL 統合
+ 自動バックアップ
+ クラスター自動バックアップ

**注記**  
DB インスタンスにタグを付けると、Amazon RDS はそれらのタグを関連する Performance Insights リソースに自動的に適用します。現在、AWS マネジメントコンソール を使用して、RDS プロキシおよび RDS プロキシエンドポイントにタグ付けすることはできません。

**Topics**
+ [

## Amazon RDS リソースタグを使用する理由
](#Tagging.Purpose)
+ [

## Amazon RDS リソースタグの仕組み
](#Overview.Tagging)
+ [

## Amazon RDS リソースのタグ付けのベストプラクティス
](#Tagging.best-practices)
+ [

## タグを DB スナップショットにコピーする
](#USER_Tagging.CopyTags)
+ [

## 自動バックアップリソースのタグ付け
](#USER_Tagging.AutomatedBackups)
+ [

## Amazon RDS でのタグの追加と削除
](#Tagging.HowTo)
+ [

# チュートリアル: タグを使用して、停止する DB インスタンスを指定する
](Tagging.RDS.Autostop.md)

## Amazon RDS リソースタグを使用する理由
<a name="Tagging.Purpose"></a>

タグを使用して、以下のことを行うことができます。
+ 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 RDS での Identity and Access Management](UsingWithRDS.IAM.md)」および「[AWS リソースへのアクセスの制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-resources)」を参照してください。
+ タグに基づいてリソースをモニタリングします。例えば、`environment=prod` でタグ付けされた DB インスタンス用の Amazon CloudWatch ダッシュボードを作成できます。
+ 同様にタグ付けされたリソースの費用をグループ化することで、コストを追跡します。例えば、`project=Salix` で Salix プロジェクトに関連付けられた RDS リソースにタグ付けした場合、コストレポートを生成して、このプロジェクトに経費を割り当てることができます。詳細については、「[Amazon RDS でのタグを使用した AWS 請求の仕組み](#Tagging.Billing)」を参照してください。

## Amazon RDS リソースタグの仕組み
<a name="Overview.Tagging"></a>

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

**Topics**
+ [

### Amazon RDS のタグセット
](#Overview.Tagging.Sets)
+ [

### Amazon RDS のタグ構造
](#Overview.Tagging.Structure)
+ [

### タグ付けの対象となる Amazon RDS リソース
](#Overview.Tagging.Resources)
+ [

### Amazon RDS でのタグを使用した AWS 請求の仕組み
](#Tagging.Billing)

### Amazon RDS のタグセット
<a name="Overview.Tagging.Sets"></a>

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

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

### Amazon RDS のタグ構造
<a name="Overview.Tagging.Structure"></a>

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

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

**タグ値**  
値は、タグのオプションの文字列値です。文字列値は、1～256 文字の Unicode 文字である必要があります。文字列には、一連の Unicode 文字、数字、空白、`_`、`.`、`:`、`/`、`=`、`+`、`-`、および `@` を含めることができます。Java 正規表現は `"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"` です。タグ値は大文字と小文字が区別されます。したがって、値 `prod` と `Prod` は区別されます。  
値はタグセット内で一意である必要はなく、null にできます。例えば、`project=Trinity` と `cost-center=Trinity` のタグセット内に 1 つのキーと値のペアを使用できます。

### タグ付けの対象となる Amazon RDS リソース
<a name="Overview.Tagging.Resources"></a>

次の Amazon RDS リソースにタグ付けができます。
+ DB インスタンス
+ DB クラスター
+ DB クラスターエンドポイント
+ リードレプリカ
+ DB スナップショット
+ DB クラスタースナップショット
+ リザーブド DB インスタンス
+ イベントサブスクリプション
+ DB オプショングループ
+ DB パラメータグループ
+ DB クラスターのパラメータグループ
+ DB サブネットグループ
+ RDS プロキシ
+ RDS Proxy エンドポイント
**注記**  
現在、AWS マネジメントコンソール を使用して、RDS プロキシおよび RDS プロキシエンドポイントにタグ付けすることはできません。
+ ブルー/グリーンデプロイ
+ ゼロ ETL 統合 (プレビュー)
+ 自動バックアップ
+ クラスター自動バックアップ

### Amazon RDS でのタグを使用した AWS 請求の仕組み
<a name="Tagging.Billing"></a>

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

#### DB スナップショットでのコスト配分タグの仕組み
<a name="Tagging.Billing.Snapshots"></a>

DB スナップショットにタグを追加することができます。ただし、このグループは請求書に反映されません。コスト配分タグを DB スナップショットに適用するには、以下の条件を満たす必要があります。
+ タグは親 DB インスタンスにアタッチする必要があります。
+ 親 DB インスタンスは、DB スナップショットと同じ AWS アカウント に存在する必要があります。
+ 親 DB インスタンスは、DB スナップショットと同じ AWS リージョン に存在する必要があります。

DB スナップショットは、親 DB インスタンスと同じ リージョンに存在しない場合、孤立したと見なされます。孤立した DB スナップショットは、コスト配分タグをサポートしません。孤立したスナップショットのコストは、タグのない単一の項目に集約されます。クロスアカウント DB スナップショットは、次の条件が満たされても孤立したとは見なされません。
+ 親 DB インスタンスと同じリージョンに存在します。
+ 親 DB インスタンスはソースアカウントによって所有されます。
**注記**  
親 DB インスタンスが別の アカウントによって所有されている場合、コスト配分タグはデスティネーションアカウントのクロスアカウントスナップショットに適用されません。

## Amazon RDS リソースのタグ付けのベストプラクティス
<a name="Tagging.best-practices"></a>

タグを使用するときには、以下のベストプラクティスに従うことをおすすめします。
+ 組織内のすべてのチームが従うタグ使用の規則を文書化します。特に、名前が記述的で一貫性があることを確認してください。例えば、`env:production` を持つリソースにタグ付けするのではなく、形式 `environment:prod` で標準化します。
**重要**  
個人を特定できる情報 (PII) などの機密情報や秘匿性の高い情報はタグに格納しないでください。
+ タグ付けを自動化して一貫性を確保します。例えば、以下の技法を使用できます。
  + CloudFormation テンプレートにタグを含めます。テンプレートを使用してリソースを作成すると、リソースは自動的にタグ付けされます。
  + AWS Lambda 関数を使用してタグを定義して適用します。
  + RDS リソースにタグを追加する手順を含む SSM ドキュメントを作成します。
+ タグは必要な場合にのみ使用します。1 つの RDS リソースに最大 50 個のタグを追加できますが、ベストプラクティスは、不要なタグの拡散や複雑さを回避することです。
+ タグの関連性と正確性を定期的に確認します。必要に応じて、古いタグを削除または変更します。
+ AWS マネジメントコンソール で AWS タグエディタを使用してタグを作成することを検討してください。タグエディタを使用して、RDS リソースを含む複数のサポートされている AWS リソースにタグを同時に追加できます。詳細については、*AWS リソースグループユーザーガイド*の[タグエディタ](https://docs.aws.amazon.com/ARG/latest/userguide/tag-editor.html)を参照してください。

## タグを DB スナップショットにコピーする
<a name="USER_Tagging.CopyTags"></a>

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

次のアクションでタグが DB スナップショットにコピーされるように指定できます。
+ DB インスタンスの作成
+ DB インスタンスの復元
+ リードレプリカの作成
+ DB スナップショットのコピー

前述のアクションでタグをコピーするには、AWS マネジメントコンソールで **[スナップショットにタグをコピー]** を選択するか、AWS CLI で `--copy-tags-to-snapshot` を指定します。DB スナップショットのコピー中に、同じアカウントで DB スナップショットをコピーする場合にのみ、関連付けられたタグをコピーできます。アカウント間で DB スナップショットをコピーするときにタグをコピーすることはできません。

ほとんどの場合、デフォルトでタグのコピーは行われません。DB スナップショットから DB インスタンスを復元した際に、RDS は新しいタグが指定されているかどうかをチェックします。新しいタグが指定されている場合、そのタグは復元された DB インスタンスに追加されます。新しいタグがなく、DB スナップショットがソース DB インスタンスと同じアカウントにある場合、RDS は、スナップショットの作成時にソース DB インスタンスから復元された DB インスタンスにタグを追加します。DB スナップショットが別の アカウントにコピーされて復元された場合、RDS はソース DB インスタンスからタグを追加しません。

ソース DB インスタンスのタグが復元された DB インスタンスに追加されることを防ぐには、DB インスタンスの復元時に新しいタグを指定することをお勧めします。

**注記**  
場合によっては、[create-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-snapshot.html) AWS CLI コマンドの `--tags` パラメータに値を含めることができます。または、[CreateDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBSnapshot.html) API オペレーションに少なくとも 1 つのタグを指定することもできます。このような場合、RDS はソース DB インスタンスから新しい DB スナップショットにタグをコピーしません。この機能は、ソース DB インスタンスの `--copy-tags-to-snapshot` (`CopyTagsToSnapshot`) オプションが有効になっている場合でも、適用されます。  
このアプローチを使用すると、DB スナップショットから DB インスタンスのコピーを作成できます。この方法では、新しい DB インスタンスに適用されないタグを追加する必要がなくなります。DB スナップショットは、AWS CLI`create-db-snapshot`コマンド (または`CreateDBSnapshot` RDS API オペレーション) を使用して作成します。DB スナップショットを作成した後、このトピックで説明しているように、タグを追加することができます。

## 自動バックアップリソースのタグ付け
<a name="USER_Tagging.AutomatedBackups"></a>

自動バックアップリソースは、バックアップ保持期間値を 0 から 0 以上に設定したときに作成されます。`--tag-specifications` パラメータを使用して、作成時にインスタンスまたはクラスターの自動バックアップリソースにタグを付けることができます。

### タグ仕様パラメータ
<a name="USER_Tagging.AutomatedBackups.TagSpecifications"></a>

`--tag-specifications` リクエストパラメータをサポートする API ([create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)、[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)、[create-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html) など) は、作成時に自動バックアップ (リソースタイプ: `auto-backup` または `cluster-auto-backup`) にタグを付けることができます。

#### インスタンスの自動バックアップのタグ付け
<a name="USER_Tagging.AutomatedBackups.TagSpecifications.Instance"></a>

自動バックアップが有効になっている DB インスタンスを作成または変更するときは、`ResourceType=auto-backup` を指定した `--tag-specifications` を使用します。

#### クラスター自動バックアップのタグ付け
<a name="USER_Tagging.AutomatedBackups.TagSpecifications.Cluster"></a>

自動バックアップが有効になっている DB クラスターを作成するときは、`ResourceType=cluster-auto-backup` を指定した `--tag-specifications` を使用します。

#### DB インスタンスの変更中の自動バックアップのタグ付け
<a name="USER_Tagging.AutomatedBackups.TagSpecifications.ModifyBehavior"></a>

 バックアップ保持期間を 0 から 0 より大きい値に設定する場合のみ、`--tag-specifications` を使用して自動バックアップにタグを付けることができます。自動バックアップが既に存在する場合は、代わりに [AddTagsToResource](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AddTagsToResource.html) API を使用します。

**注記**  
自動バックアップタグは、ソース DB インスタンスタグ、DB クラスタータグ、または DB スナップショットタグとは独立しています。

## Amazon RDS でのタグの追加と削除
<a name="Tagging.HowTo"></a>

以下の操作を行うことができます。
+ リソースの作成時にタグを作成します。例えば、AWS CLI コマンド `create-db-instance` を実行するときなどです。
+ 既存のリソースにタグを追加するには、コマンド `add-tags-to-resource` を使用します。
+ コマンド `list-tags-for-resource` を使用して、特定のリソースに関連付けられたタグを一覧表示します。
+ コマンド `add-tags-to-resource` を使用してタグを更新します。
+ コマンド `remove-tags-from-resource` を使用して、リソースからタグを削除します。

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

### コンソール
<a name="USER_Tagging.CON"></a>

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

**DB インスタンスにタグを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

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

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

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

1. [**Add**] を選択します。[**タグの追加**] ウィンドウが表示されます。  
![\[[タグの追加] ウィンドウ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/RDSConsoleTagging5.png)

1. [**タグキー**] と [**値**] の値を入力します。

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

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

1. [**Add**] を選択します。

**DB インスタンスからタグを削除するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

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

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

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

1. 削除するタグを選択します。  
![\[タグセクション\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/RDSConsoleTagging6.png)

1. [**削除**] を選択し、[**Delete tags**] (タグの削除) ウィンドウから [**削除**] を選択します。

### AWS CLI
<a name="USER_Tagging.CLI"></a>

AWS CLI を使用して DB インスタンスのタグを追加、一覧表示、または削除できます。
+ Amazon RDS リソースに 1 つ以上のタグを追加するには、AWS CLI コマンド [https://docs.aws.amazon.com/cli/latest/reference/rds/add-tags-to-resource.html](https://docs.aws.amazon.com/cli/latest/reference/rds/add-tags-to-resource.html) を使用します。
+ Amazon RDS リソースのタグを一覧表示するには、AWS CLI コマンド [https://docs.aws.amazon.com/cli/latest/reference/rds/list-tags-for-resource.html](https://docs.aws.amazon.com/cli/latest/reference/rds/list-tags-for-resource.html) を使用します。
+ Amazon RDS リソースから 1 つ以上のタグを削除するには、AWS CLI コマンド [https://docs.aws.amazon.com/cli/latest/reference/rds/remove-tags-from-resource.html](https://docs.aws.amazon.com/cli/latest/reference/rds/remove-tags-from-resource.html) を使用します。

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

### RDS API
<a name="USER_Tagging.API"></a>

Amazon RDS API を使用して DB インスタンスのタグを追加、一覧表示、または削除できます。
+ Amazon RDS リソースにタグを追加するには、[https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AddTagsToResource.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AddTagsToResource.html) オペレーションを使用します。
+ Amazon RDS リソースに割り当てられているタグを一覧表示するには、[https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ListTagsForResource.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ListTagsForResource.html) を使用します。
+ Amazon RDS リソースからタグを削除するには、[https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RemoveTagsFromResource.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RemoveTagsFromResource.html) オペレーションを使用します。

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

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

```
 1. <Tagging>
 2.       <TagSet>
 3.           <Tag>
 4.               <Key>Project</Key>
 5.               <Value>Trinity</Value>
 6.           </Tag>
 7.           <Tag>
 8.               <Key>User</Key>
 9.               <Value>Jones</Value>
10.           </Tag>
11.       </TagSet>
12.   </Tagging>
```

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


****  
<a name="user-tag-reference"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_Tagging.html)

# チュートリアル: タグを使用して、停止する DB インスタンスを指定する
<a name="Tagging.RDS.Autostop"></a>

このチュートリアルでは、開発環境またはテスト環境に複数の DB インスタンスがあることを前提としています。これらの DB インスタンスを数日間保持する必要があります。一部の DB インスタンスは夜間にテストを実行し、その他は夜間に停止し、翌日に再び開始します。

次のチュートリアルでは、夜間に停止するのに適した DB インスタンスにタグを割り当てる方法を示しています。このチュートリアルは、スクリプトがそのタグを持つ DB インスタンスを検出して、タグの付いた DB インスタンスを停止する方法を示しています。この例では、キーと値のペアでの値の部分は重要ではありません。`stoppable` タグが存在するということは、DB インスタンスにこのユーザー定義プロパティがあることを示します。

次のチュートリアルでは、タグ付け用のコマンドと API が ARN と機能し、RDS は同じ短縮名を持つ可能性のある AWS リージョン、AWS アカウント、およびさまざまなタイプのリソース間でシームレスに動作できます。DB インスタンスで動作する CLI コマンドで、DB インスタンス ID の代わりに ARN を指定できます。

**停止する DB インスタンスを指定する**

1. 停止可能として指定する DB インスタンスの ARN を決めます。

   次の例では、*dev-test-db-instance* を独自の DB インスタンスの名前に置き換えます。ARN パラメータを使用する後続のコマンドでは、独自の DB インスタンスの ARN を置き換えます。ARN には、お客様自身の AWS アカウント ID と、DB インスタンスが配置されている AWS リージョンの名前が含まれます。

   ```
   $ aws rds describe-db-instances --db-instance-identifier dev-test-db-instance \
     --query "*[].{DBInstance:DBInstanceArn}" --output text
   arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance
   ```

1. この DB インスタンスに `stoppable` タグを追加します。

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

   ```
   $ aws rds add-tags-to-resource \
     --resource-name arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance \
     --tags Key=stoppable
   ```

1. タグが DB インスタンスに存在することを確認します。

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

   ```
   $ aws rds list-tags-for-resource \
     --resource-name arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance 
   {
       "TagList": [
           {
               "Key": "stoppable",
               "Value": ""
   
           }
       ]
   }
   aws rds list-tags-for-resource \
     --resource-name arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance --output text
   TAGLIST stoppable
   ```

1. `stoppable` として指定されているすべての DB インスタンスを停止します。

   次の例では、すべての DB インスタンスを一覧表示するテキストファイルを作成します。シェルコマンドはリストをループし、各 DB インスタンスに関連属性がタグ付けされているかどうかを確認し、各 DB インスタンスに対してコマンド `aws rds stop-db-instance` を実行します。

   ```
   $ aws rds describe-db-instances --query "*[].[DBInstanceArn]" --output text >/tmp/db_instance_arns.lst
   $ for arn in $(cat /tmp/db_instance_arns.lst)
   do
     match="$(aws rds list-tags-for-resource --resource-name $arn --output text | grep stoppable)"
     if [[ ! -z "$match" ]]
     then
         echo "DB instance $arn is tagged as stoppable. Stopping it now."
   # Note that you need to get the DB instance identifier from the ARN.
         dbid=$(echo $arn | sed -e 's/.*://')
         aws rds stop-db-instance --db-instance-identifier $dbid
     fi
   done
   
   DB instance arn:arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance is tagged as stoppable. Stopping it now.
   {
       "DBInstance": {
           "DBInstanceIdentifier": "dev-test-db-instance",
           "DBInstanceClass": "db.t3.medium",
           ...
   ```

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

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

```
$ aws rds describe-db-instances \
  --query '*[].{DBInstanceArn:DBInstanceArn,DBInstanceStatus:DBInstanceStatus}|[?DBInstanceStatus == `available`]|[].{DBInstanceArn:DBInstanceArn}' \
  --output text
arn:aws:rds:us-east-1:123456789102:db:db-instance-2447
arn:aws:rds:us-east-1:123456789102:db:db-instance-3395
arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance
arn:aws:rds:us-east-1:123456789102:db:pg2-db-instance
```

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