

# Amazon S3 지원 AMI 생성
<a name="creating-an-ami-instance-store"></a>

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

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

Windows AMI는 루트 볼륨에 대한 인스턴스 저장소를 지원하지 않으므로 Amazon S3 지원 Windows AMI를 생성할 수 없습니다.

**중요**  
C1, C3, D2, I2, M1, M2, M3, R3, X1 인스턴스 유형만 인스턴스 저장소 볼륨을 루트 볼륨으로 지원하며, Amazon S3 지원 AMI가 필요합니다.

이 AMI의 생성 과정은 Amazon EBS 지원 AMI와 다릅니다. 자세한 내용은 [Amazon EBS 지원 AMI 생성](creating-an-ami-ebs.md) 섹션을 참조하세요.

**Topics**
+ [AMI 생성 개요](#process-creating-an-ami-instance-store)
+ [사전 조건](#bundle-ami-prerequisites)
+ [Amazon Linux 인스턴스에서 AMI 생성](#amazon_linux_instructions)
+ [Amazon EC2 AMI 도구 설정](set-up-ami-tools.md)
+ [Amazon EC2 AMI 도구 참조](ami-tools-commands.md)
+ [Amazon S3 지원 AMI를 EBS 지원 AMI로 변환](Using_ConvertingS3toEBS.md)

## AMI 생성 개요
<a name="process-creating-an-ami-instance-store"></a>

다음 다이어그램은 인스턴스 저장소 루트 볼륨이 있는 인스턴스에서 AMI를 만드는 프로세스를 요약한 것입니다.

![\[Amazon S3 지원 AMI를 생성합니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami_create_instance_store.png)


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

**참고**  
Amazon S3 지원 Linux AMI의 S3 버킷에 객체를 업로드하려면 버킷에 대해 ACL을 사용하도록 설정해야 합니다. 그렇지 않으면 Amazon EC2는 업로드할 객체에 ACL을 설정할 수 없습니다. 대상 버킷에서 S3 객체 소유권에 대해 버킷 소유자 강제 설정을 사용하는 경우 ACL이 비활성화되어 있으므로 이 설정은 작동하지 않습니다. 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)를 참조하십시오.

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

루트 볼륨 외에도 인스턴스에 인스턴스 저장소 볼륨을 추가하는 경우, 새 AMI에 대한 블록 디바이스 매핑과 새 AMI에서 시작하는 인스턴스에 대한 블록 디바이스 매핑에 이러한 볼륨에 대한 정보가 포함됩니다. 자세한 내용은 [Amazon EC2 인스턴스의 볼륨에 대한 블록 디바이스 매핑](block-device-mapping-concepts.md) 섹션을 참조하세요.

## 사전 조건
<a name="bundle-ami-prerequisites"></a>

AMI를 만들려면 먼저 다음 작업을 완료해야 합니다.
+ AMI 도구를 설치합니다. 자세한 내용은 [Amazon EC2 AMI 도구 설정](set-up-ami-tools.md) 섹션을 참조하세요.
+ AWS CLI를 설치합니다. 자세한 내용은 [AWS CLI 시작하기](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)를 참조하세요.
+ 번들용 S3 버킷이 있고 버킷에 ACL이 활성화되어 있는지 확인합니다. ACL 구성에 대한 자세한 내용은 [ACL 구성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)을 참조하세요.
  + AWS Management Console을 사용하여 S3 버킷에 폴더를 생성하려면 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 열고 **버킷 생성**을 선택합니다.
  + AWS CLI을 사용하여 S3 버킷을 생성하려면 [mb](https://docs.aws.amazon.com/cli/latest/reference/s3/mb.html) 명령을 사용할 수 있습니다. 설치된 AMI 도구 버전이 1.5.18 이상일 경우 `ec2-upload-bundle` 명령을 사용하여 S3 버킷을 생성할 수도 있습니다. 자세한 내용은 [ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle) 섹션을 참조하세요.
+ 번들의 파일이 S3 버킷에서 암호화되지 않았는지 확인합니다. AMI에 암호화가 필요한 경우 EBS 지원 AMI를 대신 사용할 수 있습니다. 자세한 내용은 [EBS-backed AMI에서 암호화 사용](AMIEncryption.md) 섹션을 참조하세요.
+ AWS 계정 ID가 있어야 합니다. 자세한 내용은 **AWS Account Management 참조 안내서의 [View AWS 계정 identifiers](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)를 참조하세요.
+ AWS CLI를 사용하기 위한 자격 증명이 있는지 확인합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI 인증 및 액세스 제어](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html)를 참조하세요.
+ X.509 인증서와 그에 따른 프라이빗 키가 있어야 합니다.
  + X.509 인증서를 만들어야 할 경우 [서명 인증서 관리](set-up-ami-tools.md#ami-tools-managing-certs) 단원을 참조하세요. 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 생성
<a name="amazon_linux_instructions"></a>

다음 절차에서는 Amazon Linux 1을 실행하는 인스턴스 저장소 루트 볼륨이 있는 인스턴스에서 AMI를 생성하는 방법을 설명합니다. 다른 Linux 배포를 실행하는 인스턴스에서는 작동하지 않을 수 있습니다.

**AMI 도구 사용을 준비하려면(HVM 인스턴스에만 해당)**

1. AMI 도구를 올바르게 부팅하려면 GRUB Legacy가 필요합니다. 다음 명령을 사용하여 GRUB을 설치합니다.

   ```
   [ec2-user ~]$ sudo yum install -y grub
   ```

1. 다음 명령을 사용하여 파티션 관리 패키지를 설치합니다.

   ```
   [ec2-user ~]$ sudo yum install -y gdisk kpartx parted
   ```

**인스턴스 저장소 루트 볼륨이 있는 Amazon Linux 인스턴스에서 AMI를 생성하려면**

이 절차에서는 [사전 조건](#bundle-ami-prerequisites)의 사전 조건을 충족한다고 가정합니다.

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

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

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

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

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

   1. [scp](linux-file-transfer-scp.md) 등의 보안 복사 도구를 사용하여 컴퓨터의 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`의 새 파일로 복사할 수 있습니다.

1. <a name="step_with_bundle_path_amazon_linux"></a>인스턴스 내에서 [ec2-bundle-vol](ami-tools-commands.md#ami-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](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html)을 참조하세요.

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

      ```
      [ec2-user ~]$ sudo -E su
      ```

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

      ```
      [root ec2-user]#
      ```

   1. AMI 번들을 실행하려면 다음과 같이 [ec2-bundle-vol](ami-tools-commands.md#ami-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` 파라미터를 사용하고 [사전 조건](#bundle-ami-prerequisites)에 따라 인증서를 지정합니다.

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

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

      ```
      [root ec2-user]# exit
      ```

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

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

      ```
      [ec2-user ~]$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
      ```

   1. 읽고 편집하기 쉽도록 `image.manifest.xml` 파일의 서식을 다시 설정합니다.

      ```
      [ec2-user ~]$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
      ```

   1. 텍스트 편집기로 `image.manifest.xml`에서 블록 디바이스 매핑을 편집합니다. 아래 예는 `ephemeral1` 인스턴스 스토어 볼륨의 새 항목을 보여 줍니다.
**참고**  
제외 파일 목록은 [ec2-bundle-vol](ami-tools-commands.md#ami-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>
      ```

   1. `image.manifest.xml` 파일을 저장하고 텍스트 편집기를 종료합니다.

1. Amazon S3에 번들을 업로드하려면 다음과 같이 [ec2-upload-bundle](ami-tools-commands.md#ami-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` 옵션이 있는 대상 리전과 대상 리전에 이미 존재하는 버킷 경로 또는 대상 리전에 생성할 수 있는 고유 버킷 경로를 모두 지정해야 합니다.

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

   ```
   [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
   ```
**중요**  
`-d /path/to/bundle/storage`에서 [Step 2](#step_with_bundle_path_amazon_linux) 옵션과 함께 경로를 지정한 경우 `/tmp` 대신 해당 경로를 사용합니다.

1. AMI를 등록하려면 다음과 같이 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 명령을 사용합니다.

   ```
   [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](ami-tools-commands.md#ami-upload-bundle) 명령에 리전을 지정한 경우 이 명령에도 해당 리전을 다시 지정하세요.