CloudFormation에서 RDS를 업데이트할 때의 주의

7412 단어 RDSCloudFormationAWS

배경


CloudFormation에서 관리하는 MariaDB 인스턴스의 공개 액세스를 변경하고 싶었습니다.
스택 파일 (json)에서 업데이트하면 다음 오류로 빠졌습니다.
CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename (DBインスタンス名) and update the stack again.

공식 문서을 읽고 보면

InstanceIdentifier
중요
이름을 지정하면 이 리소스를 대체해야 하는 업데이트를 수행할 수 없습니다. 중단이 필요하지 않거나 일정한 중단이 필요한 업데이트라면 수행할 수 있습니다. 리소스를 교체해야 하는 경우 새 이름을 지정합니다.
CloudFormation에서 DBInstanceのInstanceIdentifier (DB 인스턴스 이름)을 설정하면 대체 할 수 없습니다. . . .

그럼 반대로 이름을 지정하지 않으면 어떻게 될까라고 하면

DB 인스턴스의 이름. 이름을 지정하면 AWS CloudFormation은 이름을 소문자로 변환합니다. 이름을 지정하지 않으면 AWS CloudFormation은 고유한 물리적 ID를 생성하고 ID를 DB 인스턴스 이름으로 사용합니다. 자세한 내용은 이름 유형을 참조하십시오.

AWS에서 ID를 생성해 DB 인스턴스 이름이 되지만, 인간에게 알기 쉬운 이름을 지정할 수 없기 때문에 관리는 어렵게 될 것 같습니다.

이름을 지정할 때는 어떻게 하는가?



예를 들면 다음과 같은 기존의 스택 파일(json)로 DB의 이름을 지정하고 있는 경우로, 그 이름을 재이용하기 위해서는
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "rds stack",
  "Resources" : {
    "DevRDSDBInstance" : {
      "Type" : "AWS::RDS::DBInstance",
      "Properties" : {
        "DBInstanceIdentifier":"sample-instance01",
        "DBSubnetGroupName" : "sample-rds-subnet-group",
        "AvailabilityZone" : "ap-northeast-1a",
        "AllocatedStorage" : "50",
        "DBInstanceClass" : "db.t2.medium",
        "PubliclyAccessible": "true",
        "Engine" : "MariaDB",
        "DBParameterGroupName": "sample-rds-parameter-group",
        "MasterUsername" : "sample-master-user",
        "MasterUserPassword" : "sample-master-password",
        "DBSnapshotIdentifier" :"snapshot-sample-instance01",
        "Tags" : [ { "Key" : "Name", "Value" : "sample-Instance01-rds01" } ],
        "VPCSecurityGroups": "sg-sample"
      }
    }
  }
}

1. 업데이트할 DB 인스턴스의 스냅샷을 찍습니다.



위의 스택 파일에서 예제 snapshot-sample-instance01


2. 다른 이름으로 변경하고 CloudFormation을 반영


CloudFormation 파일 (json)의 DBInstanceIdentifier에 지정된 이름sample-instance02 등으로 변경하고 DBSnapshotIdentifier를 1로 얻은 스탭의 이름으로 만듭니다.



스택을 업데이트하면 AWS에서 생성한 인스턴스 이름의 DB 인스턴스가 생성되고 원래 설정된 sample-instance01 DB 인스턴스가 삭제됩니다.

3. 원래 이름으로 돌아가서 CloudFormation을 반영



다시 CloudFormation json 파일에 DBInstanceIdentifier를 추가하고 이름 (sample-instance01)을 지정합니다.



이름이 지정된 DB 인스턴스가 생성되고 2로 생성된 DB 인스턴스가 삭제됨

라고 하는 작업이 되어, 꽤 귀찮습니다. . . .

aws의 콘솔 화면에서 보면 공개 액세스 변경은 특히 가동 중지 시간없이 업데이트됩니다.
공용 액세스 및 옵션 그룹 변경과 같이 일반적으로 CloudFormation 재시작이 발생할 수 있는 변경 사항을 수행하면 DB 인스턴스를 교체해야 하는 작업이 엄청납니다.

끝에



이러한 사정을 고려하면 DB 인스턴스의 이름은 특별히 설정하지 않고, DB 인스턴스에 DNS를 설정하여 RDS의 엔드포인트가 바뀌어도 관리하는 것이 즐거울 것 같네요.

좋은 웹페이지 즐겨찾기