EBS 지원 AMI로 인스턴스 스토어 지원 AMI 변환 - Amazon Elastic Compute Cloud

EBS 지원 AMI로 인스턴스 스토어 지원 AMI 변환

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

중요

소유하지 않은 AMI는 변환할 수 없습니다.

인스턴스 스토어 기반 AMI를 Amazon EBS 기반 AMI로 변환하려면
  1. Amazon EBS 기반 AMI에서 Amazon Linux 인스턴스를 시작합니다. 자세한 내용은 콘솔에서 인스턴스 시작 마법사를 사용하여 EC2 인스턴스 시작 단원을 참조하십시오. 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 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
  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