인스턴스를 중지하지 않고 Amazon EC2 인스턴스의 루트 볼륨 교체
인스턴스를 중지하지 않고 Amazon EC2 인스턴스의 루트 볼륨 교체 (Replace the root volume for an Amazon EC2 instance without stopping it)
Amazon EC2를 사용하면 실행 중인 인스턴스의 루트 Amazon EBS 볼륨을 교체하면서 다음 항목을 유지할 수 있어요.
출처: 문서
본문
- 인스턴스 스토어 볼륨에 저장된 데이터 — 루트 볼륨이 복원된 후에도 인스턴스 스토어 볼륨은 인스턴스에 연결된 상태로 유지돼요.
- 데이터(non-root) Amazon EBS 볼륨에 저장된 데이터 — 루트 볼륨이 복원된 후에도 non-root Amazon EBS 볼륨은 인스턴스에 연결된 상태로 유지돼요.
- 네트워크 구성 — 모든 네트워크 인터페이스는 인스턴스에 연결된 상태로 유지되며 IP 주소, 식별자, 연결 ID를 유지해요. 인스턴스를 사용할 수 있게 되면 대기 중인 모든 네트워크 트래픽이 플러시돼요. 또한 인스턴스는 같은 물리적 호스트에 유지되므로 공개·프라이빗 IP 주소와 DNS 이름을 유지해요.
- IAM 정책 — 인스턴스에 연결된 IAM 프로필과 정책(예: 태그 기반 정책)은 유지·적용돼요.
목차 (Contents)
- How root volume replacement works
- Considerations
- Replace a root volume
루트 볼륨 교체 작동 방식 (How root volume replacement works)
인스턴스의 루트 볼륨을 교체하면 루트 볼륨 교체 작업(root volume replacement task)이 만들어져요. 원래 루트 볼륨은 인스턴스에서 분리되고, 새 루트 볼륨이 그 자리에 인스턴스에 연결돼요. 인스턴스의 블록 디바이스 매핑은 교체 루트 볼륨의 ID를 반영하도록 업데이트돼요.
인스턴스의 루트 볼륨을 교체할 때 새 볼륨의 출처를 지정해야 해요. 가능한 옵션은 다음과 같아요.
시작 상태(Launch state) — 이 옵션은 현재 루트 볼륨을 만드는 데 사용된 스냅샷을 기반으로 하는 볼륨으로 현재 루트 볼륨을 교체해요.
시작 상태 사용 시 고려 사항 (Considerations for using the launch state)
교체 루트 볼륨은 원래 루트 볼륨과 동일한 유형, 크기, terminate 시 삭제(delete on termination) 속성을 갖게 돼요.
스냅샷(Snapshot) — 이 옵션은 지정한 스냅샷을 기반으로 하는 교체 볼륨으로 현재 루트 볼륨을 교체해요. 예를 들어 이전에 이 루트 볼륨에서 만든 특정 스냅샷을 사용할 수 있어요. 게스트 운영체제에서 루트 볼륨 손상이나 네트워크 구성 오류로 인한 문제에서 복구해야 할 때 유용해요.
교체 루트 볼륨은 원래 루트 볼륨과 동일한 유형, 크기, terminate 시 삭제 속성을 갖게 돼요.
- 인스턴스의 현재 또는 이전 루트 볼륨에서 직접 만든 스냅샷만 사용할 수 있어요.
- 루트 볼륨에서 가져온 스냅샷으로 만든 스냅샷 사본은 사용할 수 없어요.
- 루트 볼륨을 성공적으로 교체한 후에도 원래 루트 볼륨에서 가져온 스냅샷을 사용해 새(교체) 루트 볼륨을 교체할 수 있어요.
이미지(AMI) — 이 옵션은 지정한 AMI를 사용해 현재 루트 볼륨을 교체해요. 운영체제 및 애플리케이션 패치나 업그레이드를 수행해야 할 때 유용해요. AMI는 인스턴스와 동일한 제품 코드, 청구 정보, 아키텍처 유형, 가상화 유형을 가져야 해요.
인스턴스가 ENA나 sriov-net으로 활성화된 경우 해당 기능을 지원하는 AMI를 사용해야 해요. 인스턴스가 ENA나 sriov-net으로 활성화되지 않은 경우 해당 기능을 포함하지 않는 AMI를 선택하거나, ENA나 sriov-net을 지원하는 AMI를 선택하면 지원을 자동으로 추가할 수 있어요.
인스턴스가 NitroTPM으로 활성화된 경우 NitroTPM이 활성화된 AMI를 사용해야 해요. 선택한 AMI와 관계없이 NitroTPM으로 구성되지 않은 인스턴스에는 NitroTPM 지원이 활성화되지 않아요.
인스턴스가 AMI의 부트 모드를 지원하는 한, 인스턴스와 다른 부트 모드의 AMI를 선택할 수 있어요. 인스턴스가 부트 모드를 지원하지 않으면 요청이 실패해요. 인스턴스가 부트 모드를 지원하면 새 부트 모드가 인스턴스에 전파되고 UEFI 데이터가 그에 따라 업데이트돼요. 부트 순서를 수동으로 수정했거나 프라이빗 UEFI Secure Boot 키를 추가해 프라이빗 커널 모듈을 로드했다면, 루트 볼륨 교체 중에 변경 사항이 손실돼요.
교체 루트 볼륨은 원래 루트 볼륨과 동일한 볼륨 유형과 terminate 시 삭제 속성을 갖게 돼요. 교체 루트 볼륨의 크기는 AMI 루트 볼륨 블록 디바이스 매핑 크기와 현재 루트 볼륨 크기 중 큰 쪽이에요.
루트 볼륨 교체 작업이 완료된 후 콘솔, AWS CLI, AWS SDK로 인스턴스를 설명(describe)하면 다음의 새 정보·업데이트 정보가 반영돼요.
- 새 AMI ID
- 루트 볼륨의 새 볼륨 ID
- 업데이트된 부트 모드 구성(AMI로 변경된 경우)
- 업데이트된 NitroTPM 구성(AMI로 활성화된 경우)
- 업데이트된 ENA 구성(AMI로 활성화된 경우)
- 업데이트된 sriov-net 구성(AMI로 활성화된 경우)
새 AMI ID는 인스턴스 메타데이터에도 반영돼요.
- 여러 블록 디바이스 매핑이 있는 AMI를 사용하는 경우 AMI의 루트 볼륨만 사용돼요. 다른(non-root) 볼륨은 무시돼요.
- 이 기능은 AMI와 연결된 루트 볼륨 스냅샷에 대한 권한이 있을 때만 사용할 수 있어요. AWS Marketplace AMI에는 이 기능을 사용할 수 없어요.
- 인스턴스에 제품 코드가 없는 경우에만 제품 코드가 없는 AMI를 사용할 수 있어요.
- 교체 루트 볼륨의 크기는 AMI 루트 볼륨 블록 디바이스 매핑 크기와 현재 루트 볼륨 크기 중 큰 쪽이에요.
- 인스턴스의 인스턴스 ID 문서(instance identity document)가 자동으로 업데이트돼요.
- 인스턴스가 NitroTPM을 지원하는 경우 인스턴스의 NitroTPM 데이터가 재설정되고 새 키가 생성돼요.
기존 EBS 볼륨(Existing Amazon EBS volume) — 새 볼륨을 만드는 스냅샷·AMI 옵션과 달리, 이 옵션은 이미 구성한 기존 Amazon EBS 볼륨으로 현재 루트 볼륨을 교체해요. 데이터베이스 같은 상태 유지(stateful) 워크로드에 유용한데, 인스턴스에 연결하기 전에 루트 볼륨에 메타데이터나 소프트웨어를 준비하려는 경우에 적합해요.
이 옵션을 사용하기 전에 교체용 Amazon EBS 볼륨을 만들고 준비해야 해요. 볼륨을 데이터 볼륨으로 인스턴스에 연결하고, 필요한 데이터를 복사한 다음 분리해서 준비할 수 있어요. 볼륨은 인스턴스와 같은 가용 영역에 있어야 해요.
교체 루트 볼륨은 만들고 준비할 때 구성한 크기, 유형, 기타 속성을 유지해요. 원래 루트 볼륨의 terminate 시 삭제 속성은 교체 루트 볼륨으로 전송되지 않아요.
- 교체 볼륨은 인스턴스와 같은 가용 영역에 있어야 해요.
- 교체 볼륨은 요청 시점에 어떤 인스턴스에도 연결되어 있지 않아야 해요.
- 교체 볼륨은
available상태여야 해요. - 교체 볼륨이 이러한 요구 사항을 충족하지 않으면 루트 볼륨 교체 요청이 실패해요.
- AWS Marketplace 인스턴스에서 이 옵션을 사용할 수 있지만, 교체 볼륨의 마켓플레이스 제품 코드와 청구 코드가 모두 인스턴스와 일치해야 해요.
- 원래 루트 볼륨이 암호화된 경우 교체 볼륨도 암호화되어야 해요. 암호화되지 않은 볼륨에서 암호화된 볼륨으로는 이동할 수 있지만, 암호화에서 비암호화로는 이동할 수 없어요. 교체 볼륨이 암호화된 경우 IAM 주체는 원래 볼륨을 분리하는 데 필요한 AWS KMS 권한이 있어야 해요. 교체 볼륨을 연결하고 복호화할 권한도 있어야 해요. 이는 암호화된 볼륨을 연결하는 데 필요한 것과 동일한 권한이에요.
루트 볼륨 교체 과정이 완료된 후 원래 루트 볼륨을 유지할지 선택할 수 있어요. 교체 과정이 완료된 후 원래 루트 볼륨을 삭제하도록 선택하면 원래 루트 볼륨이 자동으로 삭제되어 복구할 수 없게 돼요. 과정이 완료된 후 원래 루트 볼륨을 유지하도록 선택하면 그 볼륨은 계정에 프로비저닝된 상태로 남으며, 더 이상 필요 없을 때 수동으로 삭제해야 해요.
루트 볼륨 교체 작업은 다음 상태를 거쳐요.
pending— 교체 볼륨을 만드는 중이에요.in-progress— 원래 볼륨을 분리하고 교체 볼륨을 연결하는 중이에요.succeeded— 교체 볼륨이 인스턴스에 성공적으로 연결되었고 인스턴스를 사용할 수 있어요.failing— 교체 작업이 실패하는 과정에 있어요.failed— 교체 작업이 실패했지만 루트 볼륨은 여전히 연결되어 있어요.failing-detached— 교체 작업이 실패하는 과정에 있고 인스턴스에 루트 볼륨이 연결되어 있지 않을 수 있어요.failed-detached— 교체 작업이 실패했고 인스턴스에 루트 볼륨이 연결되어 있지 않아요.
루트 볼륨 교체 작업이 실패하면 인스턴스가 재부팅되고 원래 루트 볼륨이 인스턴스에 연결된 상태로 유지돼요.
고려 사항 (Considerations)
시작하기 전에 다음 사항을 고려하세요.
- 인스턴스는
running상태여야 해요. - 인스턴스는 과정 중에 자동으로 재부팅돼요. 재부팅 중 메모리(RAM) 내용은 지워져요. 수동 재부팅은 필요 없어요.
- 루트 볼륨이 인스턴스 스토어 볼륨이면 교체할 수 없어요. Amazon EBS 루트 볼륨이 있는 인스턴스만 지원돼요.
- 모든 가상화 인스턴스 유형과 EC2 Mac 베어 메탈 인스턴스에 대해 루트 볼륨을 교체할 수 있어요. 다른 베어 메탈 인스턴스 유형은 지원되지 않아요.
- 스냅샷을 사용할 때는 인스턴스의 현재 또는 이전 루트 볼륨에서 직접 만든 스냅샷만 사용할 수 있어요.
- 현재 리전에서 계정이 기본적으로 Amazon EBS 암호화로 활성화되어 있다면, 루트 볼륨 교체 작업이 만든 교체 루트 볼륨은 지정된 스냅샷이나 지정된 AMI의 루트 볼륨의 암호화 상태와 관계없이 항상 암호화돼요.
암호화 결과 (Encryption outcomes)
다음 표는 가능한 암호화 결과를 요약해요.
| 원래 루트 볼륨 | 지정된 스냅샷·AMI·볼륨 | 기본 암호화 | 교체 루트 볼륨 | 교체 루트 볼륨에 사용된 암호화 키 | |
|---|---|---|---|---|---|
| 교체 루트 볼륨을 초기 시작 상태로 복원 | 암호화됨 | 해당 없음 | 고려 안 함 | 암호화됨 | 원래 루트 볼륨과 동일한 KMS 키 |
| 암호화되지 않음 | 해당 없음 | 비활성화 | 암호화되지 않음 | 해당 없음 | |
| 암호화되지 않음 | 해당 없음 | 활성화 | 암호화됨 | Amazon EBS 암호화용 계정 기본 KMS 키 | |
| 교체 루트 볼륨을 스냅샷·AMI에서 복원 | 암호화됨 | 암호화되지 않음 | 고려 안 함 | 암호화됨 | 원래 루트 볼륨과 동일한 KMS 키 |
| 암호화됨 | 암호화됨 | 고려 안 함 | 암호화됨 | 원래 루트 볼륨과 동일한 KMS 키 | |
| 암호화되지 않음 | 암호화되지 않음 | 비활성화 | 암호화되지 않음 | 해당 없음 | |
| 암호화되지 않음 | 암호화되지 않음 | 활성화 | 암호화됨 | Amazon EBS 암호화용 계정 기본 KMS 키 | |
| 암호화되지 않음 | 암호화됨 | 고려 안 함 | 암호화됨 | AMI나 스냅샷이 계정 소유이면 AMI·스냅샷의 KMS 키로, 계정과 공유된 것이면 Amazon EBS 암호화용 계정 기본 KMS 키로 | |
| 교체 루트 볼륨을 기존 Amazon EBS 볼륨에서 복원 | 암호화됨 | 암호화됨 | 해당 없음 | 암호화됨 | 지정된 볼륨의 KMS 키 |
| 암호화됨 | 암호화되지 않음 | 해당 없음 | 허용되지 않음. 암호화된 루트 볼륨을 암호화되지 않은 볼륨으로 교체할 수 없음. Amazon EC2가 교체 작업을 거부함. | 해당 없음 | |
| 암호화되지 않음 | 암호화되지 않음 | 해당 없음 | 암호화되지 않음 | 해당 없음 | |
| 암호화되지 않음 | 암호화됨 | 해당 없음 | 암호화됨 | 지정된 볼륨의 KMS 키 |
루트 볼륨 교체 (Replace a root volume)
인스턴스의 루트 볼륨을 교체하면 루트 볼륨 교체 작업이 만들어져요. 루트 볼륨 교체 작업을 사용해 교체 과정의 진행 상황과 결과를 모니터링할 수 있어요.
콘솔 (Console)
루트 볼륨을 교체하려면: Amazon EC2 콘솔(https://console.aws.amazon.com/ec2/)을 엽니다. 탐색 창에서 Instances를 선택해요. 루트 볼륨을 교체할 인스턴스를 선택하고 Actions, Monitor and troubleshoot, Replace root volume을 선택해요. 참고 선택한 인스턴스가 running 상태가 아니면 Replace root volume 작업이 비활성화돼요. Restore에서 다음 옵션 중 하나를 선택해요: Launch state – 현재 루트 볼륨을 만드는 데 사용된 스냅샷에서 교체 루트 볼륨을 복원해요. Snapshot – 지정한 스냅샷으로 교체 루트 볼륨을 복원해요. Snapshot에서 사용할 스냅샷을 선택해요. Image – 지정한 AMI로 교체 루트 볼륨을 복원해요. Image에서 사용할 AMI를 선택해요. (선택 사항) Volume initialization rate에서 스냅샷 블록이 Amazon S3에서 볼륨으로 다운로드되는 속도인 Amazon EBS Provisioned Rate for Volume Initialization(볼륨 초기화 속도)을 MiB/s 단위로 지정할 수 있어요. 기본 초기화 속도나 빠른 스냅샷 복원(fast snapshot restore, 선택한 스냅샷에 활성화된 경우)을 사용하려면 속도를 지정하지 마세요. (선택 사항) 교체 중인 루트 볼륨을 삭제하려면 Delete replaced root volume을 선택해요. Create replacement task를 선택해요. 교체 작업을 모니터링하려면 인스턴스의 Storage 탭을 선택하고 Recent root volume replacement tasks를 펼쳐요.
AWS CLI
교체 루트 볼륨을 시작 상태로 복원하려면: create-replace-root-volume-task 명령을 사용해요. --instance-id에는 루트 볼륨을 교체할 인스턴스의 ID를 지정해요. --snapshot-id와 --image-id 파라미터는 생략해요. 교체 후 원래 루트 볼륨을 삭제하려면 --delete-replaced-root-volume을 포함하고 true를 지정해요. 스냅샷 블록이 Amazon S3에서 볼륨으로 다운로드되는 볼륨 초기화 속도를 지정하려면 --volume-initialization-rate에 100~300 MiB/s 값을 지정해요.
aws ec2 create-replace-root-volume-task \
--instance-id i-1234567890abcdef0 \
--delete-replaced-root-volume \
--volume-initialization-rate 150
교체 루트 볼륨을 특정 스냅샷으로 복원하려면: create-replace-root-volume-task 명령을 사용해요. --instance-id에는 인스턴스의 ID를, --snapshot-id에는 사용할 스냅샷의 ID를 지정해요.
aws ec2 create-replace-root-volume-task \
--instance-id i-1234567890abcdef0 \
--snapshot-id snap-9876543210abcdef0 \
--delete-replaced-root-volume \
--volume-initialization-rate 150
교체 루트 볼륨을 AMI로 복원하려면: create-replace-root-volume-task 명령을 사용해요. --instance-id에는 인스턴스의 ID를, --image-id에는 사용할 AMI의 ID를 지정해요.
aws ec2 create-replace-root-volume-task \
--instance-id i-1234567890abcdef0 \
--image-id ami-1234567890abcdef0 \
--delete-replaced-root-volume \
--volume-initialization-rate 150
PowerShell
교체 루트 볼륨을 시작 상태로 복원하려면: New-EC2ReplaceRootVolumeTask 명령을 사용해요. -InstanceId에는 인스턴스의 ID를 지정해요. -SnapshotId와 -ImageId 파라미터는 생략해요.
New-EC2ReplaceRootVolumeTask `
-InstanceId i-1234567890abcdef0 `
-VolumeInitializationRate 150 `
-DeleteReplacedRootVolume $true
교체 루트 볼륨을 특정 스냅샷으로 복원하려면: New-EC2ReplaceRootVolumeTask 명령을 사용해요. -InstanceId에는 인스턴스의 ID를, -SnapshotId에는 사용할 스냅샷의 ID를 지정해요.
New-EC2ReplaceRootVolumeTask `
-InstanceId i-1234567890abcdef0 `
-SnapshotId snap-9876543210abcdef0 `
-VolumeInitializationRate 150 `
-DeleteReplacedRootVolume $true
교체 루트 볼륨을 AMI로 복원하려면: New-EC2ReplaceRootVolumeTask 명령을 사용해요. -InstanceId에는 인스턴스의 ID를, -ImageId에는 사용할 AMI의 ID를 지정해요.
New-EC2ReplaceRootVolumeTask `
-InstanceId i-1234567890abcdef0 `
-ImageId ami-1234567890abcdef0 `
-VolumeInitializationRate 150 `
-DeleteReplacedRootVolume $true