Amazon S3 백킹 AMI를 EBS 백킹 AMI로 변환하기
Amazon S3 백킹 AMI를 EBS 백킹 AMI로 변환하기
소유하고 있는 Amazon S3 백킹 Linux AMI를 Amazon EBS 백킹 Linux AMI로 변환할 수 있어요. 이 절차는 AMI 번들, EBS 볼륨, 스냅샷, AMI 등록을 순서대로 다루는 큰 작업이에요.
출처: 문서
본문
중요 — 소유하지 않은 AMI는 변환할 수 없어요.
Amazon S3 백킹 AMI를 Amazon EBS 백킹 AMI로 변환하려면
- Amazon EBS 백킹 AMI에서 Amazon Linux 인스턴스를 실행하세요. 자세한 내용은 콘솔의 인스턴스 시작 마법사로 EC2 인스턴스 실행하기 문서를 참고하세요. Amazon Linux 인스턴스에는 AWS CLI와 AMI 도구가 미리 설치되어 있어요.
- S3 백킹 AMI를 번들링할 때 사용했던 X.509 프라이빗 키를 인스턴스에 업로드하세요. 이 키는 오직 사용자와 Amazon EC2만 AMI에 접근할 수 있게 보장하는 데 사용돼요.
- 인스턴스에 X.509 프라이빗 키용 임시 디렉터리를 만듭니다.
[ec2-user ~]$ mkdir /tmp/cert
scp같은 안전한 복사 도구를 사용해 컴퓨터의 X.509 프라이빗 키를 인스턴스의/tmp/cert디렉터리로 복사합니다. 다음 명령에서my-private-key파라미터는 SSH로 인스턴스에 접속할 때 사용하는 프라이빗 키예요.
you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem [email protected]:/tmp/cert/
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00
- AWS CLI를 사용하도록 환경 변수를 구성합니다. 자세한 내용은 환경 변수 문서를 참고하세요.
- (권장) AWS 액세스 키, 시크릿 키, 세션 토큰에 대한 환경 변수를 설정합니다.
[ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id
[ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
[ec2-user ~]$ export AWS_SESSION_TOKEN=your_session_token
- AWS 액세스 키와 시크릿 키에 대한 환경 변수를 설정합니다.
[ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id
[ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
-
새 AMI용 Amazon Elastic Block Store(Amazon EBS) 볼륨을 준비합니다.
-
create-volume명령을 사용해 인스턴스와 같은 가용 영역에 빈 EBS 볼륨을 만듭니다. 명령 출력에서 볼륨 ID를 기록해 두세요.
중요 — 이 EBS 볼륨은 원래 인스턴스 스토어 루트 볼륨과 같거나 더 커야 해요.
aws ec2 create-volume \
--size 10 \
--region us-west-2 \
--availability-zone us-west-2b
attach-volume명령을 사용해 볼륨을 Amazon EBS 백킹 인스턴스에 연결합니다.
aws ec2 attach-volume \
--volume-id vol-01234567890abcdef \
--instance-id i-1234567890abcdef0 \
--region us-west-2
- 번들을 저장할 폴더를 만듭니다.
[ec2-user ~]$ mkdir /tmp/bundle
ec2-download-bundle명령을 사용해 인스턴스 스토어 기반 AMI의 번들을/tmp/bundle에 다운로드합니다.
[ec2-user ~]$ ec2-download-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m image.manifest.xml -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -d /tmp/bundle
-
ec2-unbundle명령을 사용해 번들에서 이미지 파일을 복원합니다. -
번들 폴더로 디렉터리를 변경합니다.
[ec2-user ~]$ cd /tmp/bundle/
ec2-unbundle명령을 실행합니다.
[ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
- 언번들된 이미지의 파일을 새 EBS 볼륨에 복사합니다.
[ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
- 언번들되면서 생긴 새 파티션이 있는지 볼륨을 검사합니다.
[ec2-user bundle]$ sudo partprobe /dev/sdb1
- 마운트할 디바이스 이름을 찾기 위해 블록 디바이스를 나열합니다.
[ec2-user bundle]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda 202:0 0 8G 0 disk
└─/dev/sda1 202:1 0 8G 0 part /
/dev/sdb 202:80 0 10G 0 disk
└─/dev/sdb1 202:81 0 10G 0 part
이 예시에서 마운트할 파티션은 /dev/sdb1이지만, 여러분의 디바이스 이름은 다를 수 있어요. 볼륨이 파티션으로 나뉘어 있지 않다면 마운트할 디바이스는 /dev/sdb처럼 보일 거예요(파티션 번호가 붙지 않은 형태).
- 새 EBS 볼륨의 마운트 지점을 만들고 볼륨을 마운트합니다.
[ec2-user bundle]$ sudo mkdir /mnt/ebs
[ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
- 좋아하는 텍스트 편집기(
vim,nano등)로 EBS 볼륨의/etc/fstab파일을 열고 인스턴스 스토어(임시) 볼륨에 대한 항목을 제거합니다. EBS 볼륨이/mnt/ebs에 마운트되어 있으므로 fstab 파일은/mnt/ebs/etc/fstab에 있어요.
[ec2-user bundle]$ sudo nano /mnt/ebs/etc/fstab
#
LABEL=/ / ext4 defaults,noatime 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sdb /media/ephemeral0 auto defaults,comment=cloudconfig 0 2
이 예시에서는 마지막 줄을 제거하면 돼요.
- 볼륨을 마운트 해제하고 인스턴스에서 분리합니다.
[ec2-user bundle]$ sudo umount /mnt/ebs
[ec2-user bundle]$ aws ec2 detach-volume --volume-id vol-01234567890abcdef --region us-west-2
-
새 EBS 볼륨에서 AMI를 만듭니다.
-
새 EBS 볼륨의 스냅샷을 만듭니다.
[ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id vol-01234567890abcdef
- 스냅샷이 완료되었는지 확인합니다.
[ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snap-0abcdef1234567890
describe-images명령으로 원래 AMI에 사용된 프로세서 아키텍처, 가상화 유형, 커널 이미지(aki)를 확인합니다. 이 단계에서는 원래 Amazon S3 백킹 AMI의 AMI ID가 필요해요.
[ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-0abcdef1234567890 --output text
IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3 ami-8ef297be amazon available public machine aki-fc8f11cc instance-store paravirtual xen
이 예시에서 아키텍처는 x86_64, 커널 이미지 ID는 aki-fc8f11cc예요. 다음 단계에서 이 값을 사용하세요. 위 명령 출력에 ari ID도 나온다면 그것도 기록해 두세요.
- 새 EBS 볼륨의 스냅샷 ID와 이전 단계의 값을 사용해 새 AMI를 등록합니다. 이전 단계에서
ariID가 나왔다면 다음 명령에--ramdisk-id ari_id형태로 포함하세요.
[ec2-user bundle]$ aws ec2 register-image --region us-west-2 --name your_new_ami_name --block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snap-0abcdef1234567890} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
- (선택) 새 AMI에서 인스턴스를 실행할 수 있는지 테스트한 뒤, 이 절차를 위해 만든 EBS 볼륨을 삭제할 수 있습니다.
aws ec2 delete-volume --volume-id vol-01234567890abcdef
더 알아보기
- AMI 도구 참조
- Windows Sysprep을 사용해 AMI 만들기