Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 교체하지 않고 AWS CloudFormation에서 Amazon Elastic Block Store(Amazon EBS) 볼륨을 업데이트하고 싶습니다.
간략한 설명
AWS::EC2::Volume 리소스 유형을 사용하여 CloudFormation에서 EBS 볼륨을 업데이트할 때 인스턴스가 교체되지 않도록 하는 것이 가장 좋습니다.
인스턴스 교체는 AWS::EC2::Instance 및 AWS::EC2::Template 리소스 유형의 BlockDeviceMappings 속성에서 볼륨을 지정할 때 발생합니다. 이 경우 DeletionPolicy 유지 속성을 추가해야 합니다.
사전 조건: 볼륨을 gp2에서 gp3으로 수정하는 경우 인스턴스에 연결된 볼륨이 gp3으로 수정되었는지 확인합니다. 또한 인스턴스가 최적화 또는 수정 상태가 아닌지 확인합니다. 볼륨을 gp3로 수정하기 전에 제한 사항이 무엇인지 확인합니다.
중요: 문제를 해결하기 전에 볼륨의 스냅샷을 만들어 중요한 워크로드의 백업을 만듭니다.
해결 방법
1. 볼륨을 업데이트하려는 인스턴스의 CloudFormation 스택에DeletionPolicy 유지를 추가한 다음 스택을 업데이트합니다.
AWSTemplateFormatVersion: '2010-09-09'
Resources:
Myinstance:
Type: AWS::EC2::Instance
DeletionPolicy: Retain
Properties:
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp2
VolumeSize: 10
DeleteOnTermination: true
EbsOptimized: false
ImageId: ami-064ff912f78e3e561
InstanceInitiatedShutdownBehavior: stop
InstanceType: t2.micro
Monitoring: false
2. 템플릿에서 인스턴스를 제거하여 CloudFormation 스택을 다시 업데이트합니다. 참고: 템플릿에 리소스가 하나만 있는 경우 다른 인스턴스와 같은 독립 리소스를 생성해야 합니다. 작업을 마친 후 템플릿에서 리소스를 삭제할 수 있습니다.
3. EBS 볼륨 속성을 요구 사항에 맞게 수정합니다.
4. 인스턴스를 CloudFormation 스택으로 다시 가져옵니다.
인스턴스를 CloudFormation 스택으로 다시 가져오려면 다음을 수행합니다.
1. AWS CloudFormation 콘솔을 엽니다.
2. 스택 페이지에서 스택 작업을 선택한 다음 스택으로 리소스 가져오기를 선택합니다.
3. 템플릿을 업데이트합니다.
AWSTemplateFormatVersion: '2010-09-09'
Resources:
Myinstance:
Type: AWS::EC2::Instance
DeletionPolicy: Retain
Properties:
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp3
VolumeSize: 100
DeleteOnTermination: true
EbsOptimized: false
ImageId: ami-064ff912f78e3e561
InstanceInitiatedShutdownBehavior: stop
InstanceType: t2.micro
Monitoring: false
4. 식별자 필드에 인스턴스 ID 값을 입력합니다.
5. 리소스 가져오기를 선택합니다.
CloudFormation이 IMPORT_COMPLETE 상태로 변경된 후 인스턴스는 다시 스택의 일부가 됩니다.
참고: 다음과 같은 오류가 발생할 수 있습니다. 이 변경 세트를 생성하는 동안 오류가 발생했습니다. 가져오기 작업의 일부로 [출력]을 수정하거나 추가할 수 없습니다. 이 문제를 해결하려면 최신 CloudFormation 템플릿의 출력 섹션과 스택에서 사용 중인 템플릿이 동일한지 확인합니다. 그렇지 않은 경우 스택에서 사용 중인 템플릿의 출력 섹션에 있는 값과 일치하도록 최신 CloudFormation 템플릿을 업데이트합니다. 그런 다음 스택을 다시 업데이트합니다.