인스턴스 스토어 기반 인스턴스에서 AMI 생성
다음은 인스턴스 스토어 기반 인스턴스에서 인스턴스 스토어 기반 AMI를 만드는 절차입니다. 시작하기 전에 먼저 사전 조건을 읽으십시오.
인스턴스 스토어 기반 Amazon Linux 인스턴스에서 AMI 생성
이 섹션에서는 Amazon Linux 인스턴스에서 AMI를 생성하는 방법을 살펴봅니다. 다음 절차는 다른 Linux 배포를 실행하는 인스턴스에서는 작동하지 않을 수 있습니다. Ubuntu 관련 절차는 인스턴스 스토어 기반 Ubuntu 인스턴스에서 AMI 생성 단원을 참조하세요.
AMI 도구 사용을 준비하려면(HVM 인스턴스에만 해당)
-
AMI 도구를 올바르게 부팅하려면 GRUB Legacy가 필요합니다. 다음 명령을 사용하여 GRUB을 설치합니다.
[ec2-user ~]$
sudo yum install -y grub
-
다음 명령을 사용하여 파티션 관리 패키지를 설치합니다.
[ec2-user ~]$
sudo yum install -y gdisk kpartx parted
인스턴스 스토어 지원 Amazon Linux 인스턴스에서 AMI를 생성하려면
이 절차에서는 사전 조건의 사전 조건을 충족한다고 가정합니다.
다음 명령에서는 자신의 정보로 각각의 사용자 입력 자리 표시자
를 바꿉니다.
-
인스턴스에 자격 증명을 업로드합니다. 이러한 자격 증명은 사용자와 Amazon EC2만 사용자의 AMI에 액세스할 수 있음을 보장하는 데 사용됩니다.
-
다음과 같이 인스턴스에서 자격 증명에 대한 임시 디렉터리를 생성합니다.
[ec2-user ~]$
mkdir /tmp/cert
이렇게 하면 생성된 이미지에서 자격 증명을 제외할 수 있습니다.
-
scp 등의 보안 복사 도구를 사용하여 컴퓨터의 X.509 인증서와 해당 프라이빗 키를 인스턴스의
/tmp/cert
디렉터리로 복사합니다. 다음-i
명령의 scp 옵션은 X.509 프라이빗 키가 아니라 SSH를 사용하여 인스턴스에 연결하는 데 사용되는 프라이빗 키입니다. 예:my-private-key
.pemyou@your_computer:~ $
scp -i
my-private-key
.pem/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
/path/to/cert-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 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00
또는 이들은 일반 텍스트 파일이므로 텍스트 편집기에서 인증서와 키를 열고 내용을
/tmp/cert
의 새 파일로 복사할 수 있습니다. -
-
인스턴스 내에서 ec2-bundle-vol 명령을 실행하여 Amazon S3로 업로드할 번들을 준비합니다.
-e
옵션을 지정하여 자격 증명이 저장되어 있는 디렉터리를 제외해야 합니다. 기본적으로 번들 프로세스에는 중요 정보를 포함할 수 있는 파일이 제외됩니다. 값에는*.sw
,*.swo
,*.swp
,*.pem
,*.priv
,*id_rsa*
,*id_dsa*
*.gpg
,*.jks
,*/.ssh/authorized_keys
및*/.bash_history
가 포함됩니다. 이러한 파일을 모든 포함하려면--no-filter
옵션을 사용합니다. 이러한 파일 중 일부만 포함하려면--include
옵션을 사용합니다.중요
기본적으로 AMI 번들링 프로세스에서는 루트 볼륨을 나타내는
/tmp
디렉터리에 압축 및 암호화된 파일 모음이 생성됩니다./tmp
에 사용 가능한 디스크 공간이 충분하지 않아서 번들을 저장할 수 없으면-d
옵션을 사용하여 번들을 저장할 다른 위치를 지정합니다. 일부 인스턴스의/path/to/bundle/storage
/mnt
또는/media/ephemeral0
에 탑재된 임시 스토리지를 사용하거나 새 Amazon Elastic Block Store(Amazon EBS) 볼륨을 생성, 연결 및 탑재하여 번들을 저장할 수도 있습니다.-
ec2-bundle-vol 명령을 루트로 실행해야 합니다. 대부분의 명령에 대해 sudo를 사용하여 승격된 권한을 얻을 수 있지만 이 경우 환경 변수를 유지하려면 sudo -E su를 실행해야 합니다.
[ec2-user ~]$
sudo -E su
이제 bash 프롬프트가 사용자를 루트 사용자로 식별하고 달러 기호가 해시 태그로 바뀌어 현재 위치가 루트 셸임을 표시합니다.
[root ec2-user]#
-
AMI 번들을 실행하려면 다음과 같이 ec2-bundle-vol 명령을 실행합니다.
[root ec2-user]#
ec2-bundle-vol -k /tmp/cert/
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-u123456789012
-r x86_64 -e /tmp/cert --partitiongpt
참고
중국(베이징) 및 AWS GovCloud(미국 서부) 리전의 경우
--ec2cert
파라미터를 사용하고 사전 조건에 따라 인증서를 지정합니다.이미지가 생성되는 데 몇 분 정도 걸릴 수 있습니다. 이 명령이 완료되면
/tmp
(또는 기본값이 아닌) 디렉터리에 번들(image.manifest.xml
과 여러image.part.
xx
파일)이 포함됩니다. -
루트 셸을 종료합니다.
[root ec2-user]#
exit
-
-
(선택 사항) 인스턴스 스토어 볼륨을 더 추가하려면 AMI의
image.manifest.xml
파일에서 블록 디바이스 매핑을 편집합니다. 자세한 내용은 블록 디바이스 매핑 섹션을 참조하세요.-
image.manifest.xml
파일의 백업을 만듭니다.[ec2-user ~]$
sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
-
읽고 편집하기 쉽도록
image.manifest.xml
파일의 서식을 다시 설정합니다.[ec2-user ~]$
sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
-
텍스트 편집기로
image.manifest.xml
에서 블록 디바이스 매핑을 편집합니다. 아래 예는ephemeral1
인스턴스 스토어 볼륨의 새 항목을 보여 줍니다.참고
제외 파일 목록은 ec2-bundle-vol 단원을 참조하세요.
<block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping>
<mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping>
<mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping> -
image.manifest.xml
파일을 저장하고 텍스트 편집기를 종료합니다.
-
-
Amazon S3에 번들을 업로드하려면 다음과 같이 ec2-upload-bundle 명령을 실행합니다.
[ec2-user ~]$
ec2-upload-bundle -b
my-s3-bucket
/bundle_folder
/bundle_name
-m /tmp/image.manifest.xml -ayour_access_key_id
-syour_secret_access_key
중요
US East (N. Virginia) 이외 리전에서 AMI를 등록하려면
--region
옵션이 있는 대상 리전과 대상 리전에 이미 존재하는 버킷 경로 또는 대상 리전에 생성할 수 있는 고유 버킷 경로를 모두 지정해야 합니다. -
(선택 사항) 번들을 Amazon S3에 업로드한 후에는 다음
/tmp
명령을 사용하여 인스턴스의 rm 디렉터리에서 번들을 제거할 수 있습니다.[ec2-user ~]$
sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
중요
-d
에서 단계 2 옵션과 함께 경로를 지정한 경우/path/to/bundle/storage
/tmp
대신 해당 경로를 사용합니다. -
AMI를 등록하려면 다음과 같이 register-image 명령을 사용합니다.
[ec2-user ~]$
aws ec2 register-image --image-location
my-s3-bucket
/bundle_folder
/bundle_name
/image.manifest.xml --nameAMI_name
--virtualization-typehvm
중요
이전에 ec2-upload-bundle 명령에 리전을 지정한 경우 이 명령에도 해당 리전을 다시 지정하세요.
인스턴스 스토어 기반 Ubuntu 인스턴스에서 AMI 생성
이 섹션에서는 인스턴스 스토어 볼륨을 루트 볼륨으로 사용하여 Ubuntu Linux 인스턴스에서 AMI를 생성하는 방법에 대해 설명합니다. 다음 절차는 다른 Linux 배포를 실행하는 인스턴스에서는 작동하지 않을 수 있습니다. Amazon Linux 관련 절차는 인스턴스 스토어 기반 Amazon Linux 인스턴스에서 AMI 생성 단원을 참조하세요.
AMI 도구 사용을 준비하려면(HVM 인스턴스에만 해당)
AMI 도구를 올바르게 부팅하려면 GRUB Legacy가 필요합니다. 하지만 Ubuntu는 GRUB 2를 사용하도록 구성됩니다. 인스턴스에 GRUB Legacy가 사용되는지 확인하고 사용되지 않는 경우 설치하고 구성해야 합니다.
HVM 인스턴스에서도 AMI 도구가 올바르게 작동하려면 파티셔닝 도구를 설치해야 합니다.
-
인스턴스에 GRUB Legacy(버전 0.9
x
이하)가 설치되어 있어야 합니다. GRUB Legacy가 존재하는지 확인하고 필요하면 설치합니다. -
배포용 패키지 관리자를 사용하여 다음 파티션 관리 패키지를 설치합니다.
-
gdisk
(일부 배포에서는 이gptfdisk
패키지를 대신 호출할 수 있음) -
kpartx
-
parted
다음 명령을 사용합니다.
ubuntu:~$
sudo apt-get install -y gdisk kpartx parted
-
-
인스턴스용 커널 파라미터를 확인합니다.
ubuntu:~$
cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.2.0-54-virtual root=UUID=4f392932-ed93-4f8f-aee7-72bc5bb6ca9d ro console=ttyS0 xen_emul_unplug=unnecessary
커널 및 루트 디바이스 파라미터인
ro
,console=ttyS0
및xen_emul_unplug=unnecessary
뒤에 이어지는 옵션을 메모해 둡니다. 옵션이 이와 다를 수도 있습니다. -
/boot/grub/menu.lst
의 커널 항목을 확인합니다.ubuntu:~$
grep ^kernel /boot/grub/menu.lst
kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=hvc0 kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single kernel /boot/memtest86+.bin
console
파라미터가hvc0
대신ttyS0
을 가리키고 있으며xen_emul_unplug=unnecessary
파라미터가 없습니다. 앞에서 말했듯이, 옵션이 이와 다를 수도 있습니다. -
주로 사용하는 텍스트 편집기(예:
/boot/grub/menu.lst
또는 vim)에서 nano 파일을 편집하여 콘솔을 변경하고 앞에서 식별한 파라미터를 부팅 항목에 추가합니다.title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro
console=ttyS0 xen_emul_unplug=unnecessary
initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual (recovery mode) root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro singleconsole=ttyS0 xen_emul_unplug=unnecessary
initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, memtest86+ root (hd0) kernel /boot/memtest86+.bin -
이제 커널 항목에 올바른 파라미터가 들어 있는지 확인합니다.
ubuntu:~$
grep ^kernel /boot/grub/menu.lst
kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/memtest86+.bin
-
[Ubuntu 14.04 이상에만 해당] Ubuntu 14.04부터는
/boot/efi
에 탑재된 별도의 EFI 파티션과 GPT 파티션 테이블이 인스턴스 스토어 기반 Ubuntu AMI에 사용됩니다. ec2-bundle-vol 명령은 이 부팅 파티션을 번들링할 수 없으므로, 아래 예와 같이 EFI 파티션에 대한/etc/fstab
항목을 주석으로 처리해야 합니다.LABEL=cloudimg-rootfs / ext4 defaults 0 0
#
LABEL=UEFI /boot/efi vfat defaults 0 0 /dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
인스턴스 스토어 기반 Ubuntu 인스턴스에서 AMI를 생성하려면
이 절차에서는 사전 조건의 사전 조건을 충족한다고 가정합니다.
다음 명령에서는 자신의 정보로 각각의 사용자 입력 자리 표시자
를 바꿉니다.
-
인스턴스에 자격 증명을 업로드합니다. 이러한 자격 증명은 사용자와 Amazon EC2만 사용자의 AMI에 액세스할 수 있음을 보장하는 데 사용됩니다.
-
다음과 같이 인스턴스에서 자격 증명에 대한 임시 디렉터리를 생성합니다.
ubuntu:~$
mkdir /tmp/cert
이렇게 하면 생성된 이미지에서 자격 증명을 제외할 수 있습니다.
-
scp 등의 보안 복사 도구를 사용하여 컴퓨터의 X.509 인증서와 프라이빗 키를 인스턴스의
/tmp/cert
디렉터리로 복사합니다. 다음-i
명령의 scp 옵션은 X.509 프라이빗 키가 아니라 SSH를 사용하여 인스턴스에 연결하는 데 사용되는 프라이빗 키입니다. 예:my-private-key
.pemyou@your_computer:~ $
scp -i
my-private-key
.pem/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
/path/to/cert-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 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00
또는 이들은 일반 텍스트 파일이므로 텍스트 편집기에서 인증서와 키를 열고 내용을
/tmp/cert
의 새 파일로 복사할 수 있습니다. -
-
인스턴스에서 ec2-bundle-vol 명령을 실행하여 Amazon S3로 업로드할 번들을 준비합니다.
-e
옵션을 지정하여 자격 증명이 저장되어 있는 디렉터리를 제외해야 합니다. 기본적으로 번들 프로세스에는 중요 정보를 포함할 수 있는 파일이 제외됩니다. 값에는*.sw
,*.swo
,*.swp
,*.pem
,*.priv
,*id_rsa*
,*id_dsa*
*.gpg
,*.jks
,*/.ssh/authorized_keys
및*/.bash_history
가 포함됩니다. 이러한 파일을 모든 포함하려면--no-filter
옵션을 사용합니다. 이러한 파일 중 일부만 포함하려면--include
옵션을 사용합니다.중요
기본적으로 AMI 번들링 프로세스에서는 루트 볼륨을 나타내는
/tmp
디렉터리에 압축 및 암호화된 파일 모음이 생성됩니다./tmp
에 사용 가능한 디스크 공간이 충분하지 않아서 번들을 저장할 수 없으면-d
옵션을 사용하여 번들을 저장할 다른 위치를 지정합니다. 일부 인스턴스의/path/to/bundle/storage
/mnt
또는/media/ephemeral0
에 탑재된 임시 스토리지를 사용하거나 새 Amazon Elastic Block Store(Amazon EBS) 볼륨을 생성, 연결 및 탑재하여 번들을 저장할 수도 있습니다.-
ec2-bundle-vol 명령을 루트로 실행해야 합니다. 대부분의 명령에 대해 sudo를 사용하여 승격된 권한을 얻을 수 있지만 이 경우 환경 변수를 유지하려면 sudo -E su를 실행해야 합니다.
ubuntu:~$
sudo -E su
이제 bash 프롬프트가 사용자를 루트 사용자로 식별하고 달러 기호가 해시 태그로 바뀌어 현재 위치가 루트 셸임을 표시합니다.
root@ubuntu:#
-
AMI 번들을 실행하려면 다음과 같이 ec2-bundle-vol 명령을 실행합니다.
root@ubuntu:#
ec2-bundle-vol -k /tmp/cert/
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-uyour_aws_account_id
-r x86_64 -e /tmp/cert --partitiongpt
중요
Ubuntu 14.04 이상 HVM 인스턴스의 경우 부팅 명령을 제대로 번들링하려면
--partition mbr
플래그를 추가합니다. 그렇지 않으면 새로 생성된 AMI가 부팅되지 않습니다.이미지가 생성되는 데 몇 분 정도 걸릴 수 있습니다. 이 명령이 완료되면
tmp
디렉터리에 번들(image.manifest.xml
과 여러image.part.
xx
파일)이 포함됩니다. -
루트 셸을 종료합니다.
root@ubuntu:#
exit
-
-
(선택 사항) 인스턴스 스토어 볼륨을 더 추가하려면 AMI의
image.manifest.xml
파일에서 블록 디바이스 매핑을 편집합니다. 자세한 내용은 블록 디바이스 매핑 섹션을 참조하세요.-
image.manifest.xml
파일의 백업을 만듭니다.ubuntu:~$
sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
-
읽고 편집하기 쉽도록
image.manifest.xml
파일의 서식을 다시 설정합니다.ubuntu:~$
sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
-
텍스트 편집기로
image.manifest.xml
에서 블록 디바이스 매핑을 편집합니다. 아래 예는ephemeral1
인스턴스 스토어 볼륨의 새 항목을 보여 줍니다.<block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping>
<mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping>
<mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping> -
image.manifest.xml
파일을 저장하고 텍스트 편집기를 종료합니다.
-
-
Amazon S3에 번들을 업로드하려면 다음과 같이 ec2-upload-bundle 명령을 실행합니다.
ubuntu:~$
ec2-upload-bundle -b
my-s3-bucket
/bundle_folder
/bundle_name
-m /tmp/image.manifest.xml -ayour_access_key_id
-syour_secret_access_key
중요
US East (N. Virginia) 이외 리전에서 AMI를 등록하려면
--region
옵션이 있는 대상 리전과 대상 리전에 이미 존재하는 버킷 경로 또는 대상 리전에 생성할 수 있는 고유 버킷 경로를 모두 지정해야 합니다. -
(선택 사항) 번들을 Amazon S3에 업로드한 후에는 다음
/tmp
명령을 사용하여 인스턴스의 rm 디렉터리에서 번들을 제거할 수 있습니다.ubuntu:~$
sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
중요
-d
에서 단계 2 옵션과 함께 경로를 지정한 경우/path/to/bundle/storage
/tmp
대신 아래 동일 경로를 사용합니다. -
AMI를 등록하려면 다음과 같이 register-image AWS CLI 명령을 사용합니다.
ubuntu:~$
aws ec2 register-image --image-location
my-s3-bucket
/bundle_folder
/bundle_name
/image.manifest.xml --nameAMI_name
--virtualization-typehvm
중요
이전에 ec2-upload-bundle 명령에 리전을 지정한 경우 이 명령에도 해당 리전을 다시 지정하세요.
-
[Ubuntu 14.04 이상에 해당]
/etc/fstab
에서 EFI 항목의 주석 처리를 제거합니다. 그렇지 않으면 실행 중인 인스턴스를 재부팅할 수 없습니다.