인스턴스 스토어 지원 AMI 생성 - Amazon Elastic Compute Cloud

인스턴스 스토어 지원 AMI 생성

루트 디바이스 볼륨 유형은 인스턴스를 시작할 때 지정한 AMI에 따라 결정됩니다.

인스턴스 스토어 기반 Linux AMI를 만들려면 기존 인스턴스 스토어 기반 Linux AMI에서 시작한 인스턴스에서 시작합니다. 필요에 맞게 인스턴스를 사용자 지정한 후에는 볼륨을 번들링하고 이러한 사용자 지정을 적용하여 새 인스턴스를 시작하는 데 사용할 수 있는 새 AMI를 등록합니다.

Windows AMI는 루트 디바이스에 대한 인스턴스 스토어를 지원하지 않으므로 인스턴스 스토어 지원 Windows AMI를 생성할 수 없습니다.

중요

다음 인스턴스 유형만 인스턴스 스토어 볼륨을 루트 디바이스로 지원하며, C1, C3, D2, I2, M1, M2, M3, R3 및 X1 등의 인스턴스 스토어 지원 AMI를 요구합니다.

이 AMI의 생성 과정은 Amazon EBS 지원 AMI와 다릅니다. 자세한 내용은 Amazon EBS 지원 AMI 생성 단원을 참조하십시오.

AMI 생성 개요

다음 다이어그램은 인스턴스 스토어 기반 인스턴스에서 AMI를 만드는 프로세스를 요약한 것입니다.

인스턴스 스토어 기반 AMI를 생성합니다.

우선 만들려는 AMI와 비슷한 AMI에서 인스턴스를 시작합니다. 인스턴스에 연결하여 인스턴스를 사용자 지정할 수 있습니다. 인스턴스가 원하는 대로 설정되었으면 이 인스턴스를 번들링할 수 있습니다. 번들링 프로세스가 완료되는 데 몇 분 정도 걸립니다. 프로세스가 완료된 후에는 이미지 매니페스트(image.manifest.xml)와 루트 볼륨 템플릿을 포함하는 파일(image.part.xx)로 구성된 번들이 만들어집니다. 그 다음에는 이 번들을 Amazon S3 버킷으로 업로드하고 AMI를 등록합니다.

참고

인스턴스 스토어 지원 Linux AMI의 S3 버킷에 객체를 업로드하려면 버킷에 대해 ACL을 사용하도록 설정해야 합니다. 그렇지 않으면 Amazon EC2는 업로드할 객체에 ACL을 설정할 수 없습니다. 대상 버킷에서 S3 객체 소유권에 대해 버킷 소유자 강제 설정을 사용하는 경우 ACL이 비활성화되어 있으므로 이 설정은 작동하지 않습니다. 자세한 내용은 S3 객체 소유권을 사용하여 업로드된 객체의 소유권 제어를 참조하세요.

새 AMI를 사용하여 인스턴스를 시작하는 경우 Amazon S3으로 업로드한 번들을 사용하여 인스턴스용 루트 볼륨이 생성됩니다. Amazon S3의 번들에 사용된 스토리지 공간에 대해 사용자가 삭제할 때까지 사용자 계정에 요금이 발생합니다. 자세한 내용은 Amazon EC2 AMI 등록 취소 섹션을 참조하세요.

루트 디바이스 볼륨 외에도 인스턴스에 인스턴스 스토어 볼륨을 추가하는 경우, 새 AMI에 대한 블록 디바이스 매핑과 새 AMI에서 시작하는 인스턴스에 대한 블록 디바이스 매핑에 이러한 볼륨에 대한 정보가 포함됩니다. 자세한 내용은 Amazon EC2 인스턴스의 볼륨에 대한 블록 디바이스 매핑 단원을 참조하십시오.

사전 조건

AMI를 만들려면 먼저 다음 작업을 완료해야 합니다.

  • AMI 도구를 설치합니다. 자세한 내용은 Amazon EC2 AMI 도구 설정 섹션을 참조하세요.

  • AWS CLI를 설치합니다. 자세한 내용은 AWS Command Line Interface 설정 시작하기를 참조하세요.

  • 번들용 S3 버킷이 있고 버킷에 ACL이 활성화되어 있는지 확인합니다. ACL 구성에 대한 자세한 내용은 ACL 구성을 참조하세요.

    • AWS Management Console을 사용하여 S3 버킷에 폴더를 생성하려면 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열고 버킷 생성을 선택합니다.

    • AWS CLI을 사용하여 S3 버킷을 생성하려면 mb 명령을 사용할 수 있습니다. 설치된 AMI 도구 버전이 1.5.18 이상일 경우 ec2-upload-bundle 명령을 사용하여 S3 버킷을 생성할 수도 있습니다. 자세한 내용은 ec2-upload-bundle 단원을 참조하십시오.

  • 번들의 파일이 S3 버킷에서 암호화되지 않았는지 확인합니다. AMI에 암호화가 필요한 경우 EBS 지원 AMI를 대신 사용할 수 있습니다. 자세한 내용은 EBS-backed AMI에서 암호화 사용 단원을 참조하십시오.

  • AWS 계정 ID가 있어야 합니다. 자세한 내용은 AWS Account Management 참조 안내서의 View AWS 계정 identifiers를 참조하세요.

  • AWS CLI를 사용하기 위한 자격 증명이 있는지 확인합니다. 자세한 내용을 알아보려면 AWS Account Management 참조 안내서AWS 계정의 모범 사례를 참조하세요.

  • X.509 인증서와 그에 따른 프라이빗 키가 있어야 합니다.

    • X.509 인증서를 만들어야 할 경우 서명 인증서 관리 단원을 참조하세요. X.509 인증서 및 프라이빗 키는 AMI를 암호화하고 해독하는 데 사용됩니다.

    • [중국(베이징)] $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-cn-north-1.pem 인증서를 사용합니다.

    • [AWS GovCloud(미국 서부)] $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-gov.pem 인증서를 사용합니다.

  • 인스턴스에 연결하여 인스턴스를 사용자 지정합니다. 예를 들어, 소프트웨어 및 애플리케이션을 설치하고, 데이터를 복사하고, 임시 파일을 삭제하고, Linux 구성을 수정할 수 있습니다.

Amazon Linux 인스턴스에서 AMI 생성

다음 절차에서는 Amazon Linux 1을 실행하는 인스턴스 스토어 지원 인스턴스에서 AMI를 생성하는 방법을 설명합니다. 다른 Linux 배포를 실행하는 인스턴스에서는 작동하지 않을 수 있습니다.

AMI 도구 사용을 준비하려면(HVM 인스턴스에만 해당)
  1. AMI 도구를 올바르게 부팅하려면 GRUB Legacy가 필요합니다. 다음 명령을 사용하여 GRUB을 설치합니다.

    [ec2-user ~]$ sudo yum install -y grub
  2. 다음 명령을 사용하여 파티션 관리 패키지를 설치합니다.

    [ec2-user ~]$ sudo yum install -y gdisk kpartx parted
인스턴스 스토어 지원 Amazon Linux 인스턴스에서 AMI를 생성하려면

이 절차에서는 사전 조건의 사전 조건을 충족한다고 가정합니다.

다음 명령에서는 자신의 정보로 각각의 사용자 입력 자리 표시자를 바꿉니다.

  1. 인스턴스에 자격 증명을 업로드합니다. 이러한 자격 증명은 사용자와 Amazon EC2만 사용자의 AMI에 액세스할 수 있음을 보장하는 데 사용됩니다.

    1. 다음과 같이 인스턴스에서 자격 증명에 대한 임시 디렉터리를 생성합니다.

      [ec2-user ~]$ mkdir /tmp/cert

      이렇게 하면 생성된 이미지에서 자격 증명을 제외할 수 있습니다.

    2. scp 등의 보안 복사 도구를 사용하여 컴퓨터의 X.509 인증서와 해당 프라이빗 키를 인스턴스의 /tmp/cert 디렉터리로 복사합니다. 다음 -i my-private-key.pem 명령의 scp 옵션은 X.509 프라이빗 키가 아니라 SSH를 사용하여 인스턴스에 연결하는 데 사용되는 프라이빗 키입니다. 예:

      you@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의 새 파일로 복사할 수 있습니다.

  2. 인스턴스 내에서 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 EBS 볼륨을 생성, 연결 및 탑재하여 번들을 저장할 수도 있습니다. 자세한 내용은 Amazon EBS 사용 설명서Create an Amazon EBS volume을 참조하세요.

    1. ec2-bundle-vol 명령을 루트로 실행해야 합니다. 대부분의 명령에 대해 sudo를 사용하여 승격된 권한을 얻을 수 있지만 이 경우 환경 변수를 유지하려면 sudo -E su를 실행해야 합니다.

      [ec2-user ~]$ sudo -E su

      이제 bash 프롬프트가 사용자를 루트 사용자로 식별하고 달러 기호가 해시 태그로 바뀌어 현재 위치가 루트 셸임을 표시합니다.

      [root ec2-user]#
    2. AMI 번들을 실행하려면 다음과 같이 ec2-bundle-vol 명령을 실행합니다.

      [root ec2-user]# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 123456789012 -r x86_64 -e /tmp/cert --partition gpt
      참고

      중국(베이징) 및 AWS GovCloud(미국 서부) 리전의 경우 --ec2cert 파라미터를 사용하고 사전 조건에 따라 인증서를 지정합니다.

      이미지가 생성되는 데 몇 분 정도 걸릴 수 있습니다. 이 명령이 완료되면 /tmp(또는 기본값이 아닌) 디렉터리에 번들(image.manifest.xml과 여러 image.part.xx 파일)이 포함됩니다.

    3. 루트 셸을 종료합니다.

      [root ec2-user]# exit
  3. (선택 사항) 인스턴스 스토어 볼륨을 더 추가하려면 AMI의 image.manifest.xml 파일에서 블록 디바이스 매핑을 편집합니다. 자세한 내용은 Amazon EC2 인스턴스의 볼륨에 대한 블록 디바이스 매핑 섹션을 참조하세요.

    1. image.manifest.xml 파일의 백업을 만듭니다.

      [ec2-user ~]$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
    2. 읽고 편집하기 쉽도록 image.manifest.xml 파일의 서식을 다시 설정합니다.

      [ec2-user ~]$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
    3. 텍스트 편집기로 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>
    4. image.manifest.xml 파일을 저장하고 텍스트 편집기를 종료합니다.

  4. Amazon S3에 번들을 업로드하려면 다음과 같이 ec2-upload-bundle 명령을 실행합니다.

    [ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
    중요

    US East (N. Virginia) 이외 리전에서 AMI를 등록하려면 --region 옵션이 있는 대상 리전과 대상 리전에 이미 존재하는 버킷 경로 또는 대상 리전에 생성할 수 있는 고유 버킷 경로를 모두 지정해야 합니다.

  5. (선택 사항) 번들을 Amazon S3에 업로드한 후에는 다음 /tmp 명령을 사용하여 인스턴스의 rm 디렉터리에서 번들을 제거할 수 있습니다.

    [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
    중요

    -d /path/to/bundle/storage에서 단계 2 옵션과 함께 경로를 지정한 경우 /tmp 대신 해당 경로를 사용합니다.

  6. AMI를 등록하려면 다음과 같이 register-image 명령을 사용합니다.

    [ec2-user ~]$ aws ec2 register-image --image-location amzn-s3-demo-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
    중요

    이전에 ec2-upload-bundle 명령에 리전을 지정한 경우 이 명령에도 해당 리전을 다시 지정하세요.