자습서: 태그를 사용하여 중지할 DB 인스턴스를 지정합니다. - Amazon Relational Database Service

자습서: 태그를 사용하여 중지할 DB 인스턴스를 지정합니다.

이 자습서에서는 개발 또는 테스트 환경에 여러 개의 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
  2. 이 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
  3. 태그가 DB 인스턴스에 있는지 확인합니다.

    다음 명령은 DB 인스턴스에 대한 태그 정보를 JSON 형식 및 탭으로 구분된 일반 텍스트로 검색합니다.

    $ 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
  4. 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", ...

매일 일과가 끝날 때마다 위와 같은 스크립트를 실행하여 불필요한 DB 인스턴스가 중지되도록 할 수 있습니다. 매일 밤 이러한 검사를 수행하기 위해 cron 등의 유틸리티를 사용하여 작업을 예약할 수도 있습니다. 예를 들어, 일부 DB 인스턴스가 실수로 실행 중으로 남아 있지 않도록 하려면 검사를 예약하면 됩니다. 이때 검사할 DB 인스턴스 목록을 준비하는 명령을 세부 조정할 수 있습니다.

다음 명령은 DB 인스턴스 목록을 생성하지만 available 상태에 있는 인스턴스만 생성합니다. 스크립트는 이미 중지된 DB 인스턴스를 무시할 수 있습니다. 이러한 인스턴스는 stopped 또는 stopping 등 상태 값이 다르기 때문입니다.

$ 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 인스턴스 클래스로 변경하도록 지정할 수 있습니다.