

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立 Amazon S3 支援的 AMI
<a name="creating-an-ami-instance-store"></a>

您啟動執行個體時指定的 AMI，會判定根磁碟區的類型。

若要建立 Amazon S3 支援的 Linux AMI，請從您已從現有 Amazon S3 支援的 Linux AMI 啟動的執行個體開始。在您將執行個體自訂到符合您的需求後，建立磁碟區並註冊新的 AMI。您可以搭配這些自訂項目，使用這個新的 AMI 啟動新的執行個體。

您無法建立 Amazon S3 支援的 Windows AMI，因為 Windows AMI 不支援根磁碟區的執行個體儲存體。

**重要**  
只有下列執行個體類型支援執行個體儲存體磁碟區做為根磁碟區，且需要 Amazon S3 支援的 AMI：C1、C3、D2、I2、M1、M2、M3、R3 和 X1。

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/zh_tw/AWSEC2/latest/UserGuide/images/ami_create_instance_store.png)


首先，請先從與您要建立的 AMI 相似的 AMI 啟動執行個體。您可以連線到您的執行個體並自訂。設定好所要的執行個體後，您可以組合執行個體。完成綁定程序需要幾分鐘。程序完成後，您將擁有 bundle，其中包含映像工作資訊清單檔案 (`image.manifest.xml`) 和含有根磁碟區範本的檔案 (`image.part.`*xx*)。接著您上傳 bundle 至 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 的 bundle 建立執行個體的根磁碟區。Amazon S3 中 bundle 所用的儲存空間會使您的帳戶產生費用，直到刪除為止。如需詳細資訊，請參閱[取消註冊 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)。
  + 若要使用 建立 S3 儲存貯體 AWS 管理主控台，請在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台，然後選擇**建立儲存貯體**。
  + 若要使用 建立 S3 儲存貯體 AWS CLI，您可以使用 [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 後端 AMI 使用加密](AMIEncryption.md)。
+ 請確定您擁有 AWS 帳戶 ID。如需詳細資訊，請參閱《*AWS 帳戶管理參考指南*》中的[檢視 AWS 帳戶 識別符](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 舊版才能正常開機。請使用下列命令安裝 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** 選項為用來透過 SSH 連接執行個體的私有金鑰，而非 X.509 私有金鑰。例如：

      ```
      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 的 bundle。務必指定 `-e` 選項，以排除憑證存放位置的目錄。根據預設，bundle 程序不包含可能帶有敏感資訊的檔案。這些檔案包含 `*.sw`、`*.swo`、`*.swp`、`*.pem`、`*.priv`、`*id_rsa*`、`*id_dsa*` `*.gpg`、`*.jks`、`*/.ssh/authorized_keys` 和 `*/.bash_history`。若要包含所有這些檔案，請使用 `--no-filter` 選項。若要包含這些檔案中的一部分，請使用 `--include` 選項。
**重要**  
根據預設，AMI 綁定程序會在代表根磁碟區的 `/tmp` 目錄內建立經過壓縮加密的檔案集合。如果 `/tmp` 內沒有足夠的可用磁碟空間可存放 bundle，您需要用 `-d /path/to/bundle/storage` 選項指定其他的 bundle 存放位置。部分執行個體會有暫時性儲存區掛載於 `/mnt` 或 `/media/ephemeral0` 以供您使用，或者您也可以建立、連接及掛載新的 Amazon EBS 磁碟區，以存放 bundle。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的[建立 Amazon EBS 磁碟區](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html)。

   1. 您必須以 root 執行 **ec2-bundle-vol** 命令。針對多數命令，您皆能用 **sudo** 來取得更高級的許可，但在此情況下您應執行 **sudo -E su** 以保持環境變數。

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

      請注意，bash 提示現在將您識別為根使用者，且貨幣符號已換成雜湊標籤，表示您正在根 shell 下：

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

   1. 若要建立 AMI bundle，請照下列所示執行 [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` (或非預設的) 目錄將包含 bundle (`image.manifest.xml`，加上多個 `image.part.`*xx* 檔案)。

   1. 退出根 shell。

      ```
      [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. 若要上傳 bundle 至 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. (選用) bundle 上傳至 Amazon S3 之後，您可使用下列 `/tmp` 命令將 bundle 從執行個體的 **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) 命令的區域，請在此命令中再次指定該區域。