인스턴스 스토어 기반 AMI를 Amazon EBS-backed AMI로 변환 - Amazon Elastic Compute Cloud

인스턴스 스토어 기반 AMI를 Amazon EBS-backed AMI로 변환

사용자 소유의 인스턴스 스토어 기반 Linux AMI를 Amazon EBS 기반 Linux AMI로 변환할 수 있습니다.

중요

인스턴스 스토어 기반 Windows AMI는 Amazon EBS 기반 Windows AMI로 변환할 수 없으며 본인 소유가 아닌 AMI도 변환할 수 없습니다.

인스턴스 스토어 기반 AMI를 Amazon EBS 기반 AMI로 변환하려면
  1. Amazon EBS 기반 AMI에서 Amazon Linux 인스턴스를 시작합니다. 자세한 내용은 새 인스턴스 시작 마법사를 사용하여 인스턴스 시작 단원을 참조하십시오. Amazon Linux 인스턴스에는 AWS CLI 및 AMI 도구가 미리 설치되어 있습니다.

  2. 인스턴스 스토어 기반 AMI를 번들링하는 데 사용한 X.509 프라이빗 키를 인스턴스로 업로드합니다. 이 키는 사용자와 Amazon EC2만 사용자의 AMI에 액세스할 수 있음을 보장하는 데 사용됩니다.

    1. 다음과 같이 인스턴스에서 X.509 프라이빗 키에 대한 임시 디렉터리를 생성합니다.

      [ec2-user ~]$ mkdir /tmp/cert
    2. scp 등의 보안 복사 도구를 사용하여 컴퓨터의 X.509 프라이빗 키를 인스턴스의 /tmp/cert 디렉터리로 복사합니다. 다음 명령의 my-private-key 파라미터는 SSH를 사용하여 인스턴스에 연결하는 데 사용되는 프라이빗 키입니다. 예:

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00
  3. AWS CLI를 사용하도록 환경 변수를 구성합니다. 자세한 내용은 키 페어 생성을 참조하세요.

    1. (권장) 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
    2. AWS 액세스 키와 보안 키에 대한 환경 변수를 설정합니다.

      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
  4. 새 AMI용 Amazon Elastic Block Store(Amazon EBS) 볼륨을 준비합니다.

    1. create-volume 명령을 사용하여 인스턴스와 동일한 가용 영역에 빈 EBS 볼륨을 생성합니다. 명령 출력의 볼륨 ID를 메모해 둡니다.

      중요

      이 EBS 볼륨은 크기가 원본 인스턴스 스토어 루트 볼륨보다 크거나 같아야 합니다.

      [ec2-user ~]$ aws ec2 create-volume --size 10 --region us-west-2 --availability-zone us-west-2b
    2. attach-volume 명령을 사용하여 이 볼륨을 Amazon EBS 기반 인스턴스에 연결합니다.

      [ec2-user ~]$ aws ec2 attach-volume --volume-id volume_id --instance-id instance_id --device /dev/sdb --region us-west-2
  5. 번들용 폴더를 생성합니다.

    [ec2-user ~]$ mkdir /tmp/bundle
  6. /tmp/bundle using the ec2-download-bundle 명령을 사용하여 인스턴스 스토어 기반 AMI용 번들을 /tmp/bundle로 다운로드합니다.

    [ec2-user ~]$ ec2-download-bundle -b my-s3-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
  7. ec2-unbundle 명령을 사용하여 번들에서 이미지 파일을 다시 구성합니다.

    1. 디렉터리를 번들 폴더로 변경합니다.

      [ec2-user ~]$ cd /tmp/bundle/
    2. ec2-unbundle 명령을 실행합니다.

      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
  8. 번들링되지 않은 이미지의 파일을 새 EBS 볼륨으로 복사합니다.

    [ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
  9. 번들링되지 않은 새 파티션용 볼륨을 검색합니다.

    [ec2-user bundle]$ sudo partprobe /dev/sdb1
  10. 블록 디바이스를 나열하여 마운트할 디바이스 이름을 찾습니다.

    [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(디바이스 파티션 끝 숫자가 없음)와 비슷할 것입니다.

  11. 새 EBS 볼륨에 대한 탑재 지점을 생성하고 볼륨을 탑재합니다.

    [ec2-user bundle]$ sudo mkdir /mnt/ebs [ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
  12. 주로 사용하는 텍스트 편집기(예: /etc/fstab 또는 vim)를 사용하여 EBS 볼륨의 nano 파일을 열고 인스턴스 스토어(휘발성) 볼륨에 대한 항목을 모두 제거합니다. 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

    이 예에서는 마지막 줄을 제거해야 합니다.

  13. 볼륨 마운트를 해제하고 인스턴스에서 볼륨을 분리합니다.

    [ec2-user bundle]$ sudo umount /mnt/ebs [ec2-user bundle]$ aws ec2 detach-volume --volume-id volume_id --region us-west-2
  14. 다음과 같이 새 EBS 볼륨에서 AMI를 생성합니다.

    1. 새 EBS 볼륨의 스냅샷을 생성합니다.

      [ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id volume_id
    2. 스냅샷이 완전한지 확인합니다.

      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snapshot_id
    3. describe-imagesaki 명령을 사용하여 원래의 AMI에 사용된 프로세스 아키텍처, 가상화 유형 및 커널 이미지(describe-images)를 식별합니다. 이 단계의 경우 원본 인스턴스 스토어 기반 AMI의 AMI ID가 필요합니다.

      [ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-id --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도 나열되면 이 ID도 메모해 둡니다.

    4. 새 EBS 볼륨의 스냅샷 ID와 이전 단계의 값을 사용하여 새 AMI를 등록합니다. 이전 명령 출력에 ari ID가 나열된 경우, --ramdisk-id ari_id를 사용하여 이 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=snapshot_id} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
  15. (선택 사항) 새 AMI에서 인스턴스를 시작할 수 있음을 테스트한 후에는 이 절차용으로 생성한 EBS 볼륨을 삭제할 수 있습니다.

    aws ec2 delete-volume --volume-id volume_id