

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

 開発環境またはテスト環境で多数の 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
   ```

1. このクラスターにタグ `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
   ```

1. タグがクラスターに存在することを確認します。

   これらのコマンドは、クラスターのタグ情報を 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
   ```

1. `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 インスタンスクラスに変更するように指定することもできます。