

# 자습서: 태그를 사용하여 중지할 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",
           ...
   ```

 매일 일과가 끝날 때 이와 같은 스크립트를 실행하여 불필요한 클러스터가 중지되도록 할 수 있습니다. 매일 밤 이러한 검사를 수행하기 위해 `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 클러스터를 예로 들어 보겠습니다. 여기서 일과가 끝날 때 일부 클러스터를 삭제하도록 지정하거나 해당 클러스터의 리더 DB 인스턴스만 삭제하도록 지정할 수도 있습니다. 또는 사용량이 낮을 것으로 예상되는 시기에 DB 인스턴스를 소규모 DB 인스턴스 클래스로 변경하도록 지정할 수 있습니다.