

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

# 建立 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) 命令的區域，請在此命令中再次指定該區域。

# 設定 Amazon EC2 AMI 工具
<a name="set-up-ami-tools"></a>

您可使用 AMI 工具來建立及管理 Amazon S3 支援的 Linux AMI。若要使用工具，您必須在 Linux 執行個體上安裝工具。AMI 工具在不支援 RPM 的 Linux 發行版本上會同時以 RPM 和 .zip 檔案的方式提供。

**使用 RPM 設定 AMI 工具**

1. 使用 Linux 發行版本的套件管理工具 (例如 yum) 來安裝 Ruby。例如：

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

1. 使用 wget 或 curl 等工具下載 RPM 檔案。例如：

   ```
   [ec2-user ~]$ wget https://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm
   ```

1. 使用下列命令驗證 RPM 檔案的簽章：

   ```
   [ec2-user ~]$ rpm -K ec2-ami-tools.noarch.rpm
   ```

   上述命令應該會顯示檔案的 SHA1 和 MD5 雜湊為 `OK.` 如果命令顯示雜湊為 `NOT OK`，請用下列命令檢視檔案的 Header SHA1 和 MD5 雜湊：

   ```
   [ec2-user ~]$ rpm -Kv ec2-ami-tools.noarch.rpm
   ```

   接著比較檔案的 Header SHA1 和 MD5 雜湊與下列已驗證的 AMI 工具雜湊，以確認檔案的真偽：
   + Header SHA1：a1f662d6f25f69871104e6a62187fa4df508f880
   + MD5：9faff05258064e2f7909b66142de6782

   如果檔案的 Header SHA1 和 MD5 雜湊符合已驗證的 AMI 工具雜湊，請繼續下一步。

1. 使用以下命令安裝 RPM：

   ```
   [ec2-user ~]$ sudo yum install ec2-ami-tools.noarch.rpm
   ```

1. 使用 [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 命令確認 AMI 工具的安裝。

   ```
   [ec2-user ~]$ ec2-ami-tools-version
   ```
**注意**  
如果出現「cannot load such file -- ec2/amitools/version (LoadError)」之類的載入錯誤，請完成下一個步驟，將 AMI 工具的安裝位置加入到 `RUBYLIB` 路徑。

1. (選用) 如果您在上一步驟中發生錯誤，請將 AMI 工具的安裝位置加入到 `RUBYLIB` 路徑。

   1. 執行下列命令來判斷要加入的路徑。

      ```
      [ec2-user ~]$ rpm -qil ec2-ami-tools | grep ec2/amitools/version
      /usr/lib/ruby/site_ruby/ec2/amitools/version.rb
      /usr/lib64/ruby/site_ruby/ec2/amitools/version.rb
      ```

      在上例中，先前載入錯誤所缺少的檔案位在 `/usr/lib/ruby/site_ruby` 和 `/usr/lib64/ruby/site_ruby`。

   1. 在先前的步驟中將位置加入到 `RUBYLIB` 路徑。

      ```
      [ec2-user ~]$ export RUBYLIB=$RUBYLIB:/usr/lib/ruby/site_ruby:/usr/lib64/ruby/site_ruby
      ```

   1. 使用 [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 命令確認 AMI 工具的安裝。

      ```
      [ec2-user ~]$ ec2-ami-tools-version
      ```

**使用 .zip 檔案設定 AMI 工具**

1. 使用 Linux 發行版本的套件管理工具 (例如 **apt-get**) 來安裝 Ruby 及解壓縮。例如：

   ```
   [ec2-user ~]$ sudo apt-get update -y && sudo apt-get install -y ruby unzip
   ```

1. 使用 wget 或 curl 等工具下載 .zip 檔案。例如：

   ```
   [ec2-user ~]$ wget https://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
   ```

1. 將檔案解壓縮到適當的安裝目錄，例如 `/usr/local/ec2`。

   ```
   [ec2-user ~]$ sudo mkdir -p /usr/local/ec2
   $ sudo unzip ec2-ami-tools.zip -d /usr/local/ec2
   ```

   請注意，.zip 檔案包含資料夾 ec2-ami-tools-*x*.*x*.*x*，其中 *x*.*x*.*x* 是工具的版本號碼 (例如，`ec2-ami-tools-1.5.7`)。

1. 將 `EC2_AMITOOL_HOME` 環境變數設定為工具的安裝目錄。例如：

   ```
   [ec2-user ~]$ export EC2_AMITOOL_HOME=/usr/local/ec2/ec2-ami-tools-x.x.x
   ```

1. 將工具加入到 `PATH` 環境變數。例如：

   ```
   [ec2-user ~]$ export PATH=$EC2_AMITOOL_HOME/bin:$PATH
   ```

1. 使用 [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 命令確認 AMI 工具的安裝。

   ```
   [ec2-user ~]$ ec2-ami-tools-version
   ```

## 管理簽署憑證
<a name="ami-tools-managing-certs"></a>

AMI 工具中的部分命令需要簽署憑證 (亦稱為 X.509 憑證)。您必須建立憑證，然後將其上傳至 AWS。例如，您可用 OpenSSL 等第三方工具來建立憑證。

**建立簽署憑證**

1. 安裝及設定 OpenSSL。

1. 使用 `openssl genrsa` 命令建立私有金鑰，並將輸出儲存至 `.pem` 檔案。建議新建一個 2048 或 4096 位元 RSA 金鑰。

   ```
   openssl genrsa 2048 > private-key.pem
   ```

1. 使用 `openssl req` 命令產生憑證。

   ```
   openssl req -new -x509 -nodes -sha256 -days 365 -key private-key.pem -outform PEM -out certificate.pem
   ```

若要將憑證上傳至其中 AWS，請使用 [upload-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/upload-signing-certificate.html) 命令。

```
aws iam upload-signing-certificate --user-name user-name --certificate-body file://path/to/certificate.pem
```

若要列出使用者的憑證，請用 [list-signing-certificates](https://docs.aws.amazon.com/cli/latest/reference/iam/list-signing-certificates.html) 命令：

```
aws iam list-signing-certificates --user-name user-name
```

若要停用或重新啟用簽署憑證，請用 [update-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/update-signing-certificate.html) 命令。下列命令可停用憑證：

```
aws iam update-signing-certificate --certificate-id OFHPLP4ZULTHYPMSYEX7O4BEXAMPLE --status Inactive --user-name user-name
```

若要刪除憑證，請用 [delete-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-signing-certificate.html) 命令：

```
aws iam delete-signing-certificate --user-name user-name --certificate-id OFHPLP4ZULTHYPMSYEX7O4BEXAMPLE
```

# Amazon EC2 AMI 工具參考
<a name="ami-tools-commands"></a>

您可使用 AMI 工具命令來建立及管理 Amazon S3 支援的 Linux AMI。欲設定這些工具，請參閱[設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)。

如需有關存取金鑰的詳細資訊，請參閱「IAM 使用者指南」**中的[管理 IAM 使用者的存取金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)。

**Topics**
+ [ec2-ami-tools-version](#ami-tools-version)
+ [ec2-bundle-image](#ami-bundle-image)
+ [ec2-bundle-vol](#ami-bundle-vol)
+ [ec2-delete-bundle](#ami-delete-bundle)
+ [ec2-download-bundle](#ami-download-bundle)
+ [ec2-migrate-manifest](#ami-migrate-manifest)
+ [ec2-unbundle](#ami-unbundle)
+ [ec2-upload-bundle](#ami-upload-bundle)
+ [AMI 工具常用選項](#common-args-ami)

## ec2-ami-tools-version
<a name="ami-tools-version"></a>

### Description
<a name="ami-tools-version-description"></a>

描述 AMI 工具的版本。

### 語法
<a name="ami-tools-version-request"></a>

**ec2-ami-tools-version**

### Output
<a name="ami-tools-version-output"></a>

版本資訊。

### 範例
<a name="ami-tools-version-response"></a>

此範例命令會顯示您正使用之 AMI 工具的版本資訊。

```
[ec2-user ~]$ ec2-ami-tools-version
1.5.2 20071010
```

## ec2-bundle-image
<a name="ami-bundle-image"></a>

### Description
<a name="bundle-image-description"></a>

透過迴路檔案中建立的作業系統映像，來建立 Amazon S3 支援的 Linux AMI。

### 語法
<a name="bundle-image-request"></a>

****ec2-bundle-image** -c *path* -k *path* -u *account* -i *path* [-d *path*] [--ec2cert *path*] [-r *architecture*] [--productcodes *code1*,*code2*,...] [-B *mapping*] [-p *prefix*]** 

### 選項
<a name="bundle-image-parameters"></a>

`-c, --cert` *path*  
使用者以 PEM 編碼的 RSA 公有金鑰憑證檔案。  
必要：是

`-k, --privatekey` *path*  
指向以 PEM 編碼的 RSA 金鑰檔案路徑。您必須指定此金鑰來解開此 bundle，因此請將其置於安全位置。請注意，金鑰不需要註冊到您的 AWS 帳戶。  
必要：是

`-u, --user ` *account*  
使用者 AWS 的帳戶 ID，不含破折號。  
必要：是

`-i, --image` *path*  
欲綁定的映像路徑。  
必要：是

`-d, --destination` *path*  
欲建立 bundle 的目錄。  
預設：`/tmp`  
必要：否

`--ec2cert` *path*  
用於加密映像資訊清單的 Amazon EC2 X.509 公有金鑰憑證路徑。  
`us-gov-west-1` 和 `cn-north-1` 區域使用非預設的公有金鑰憑證，而該憑證的路徑必須以此選項加以指定。憑證的路徑視 AMI 工具的安裝方法而異。以 Amazon Linux 而言，此憑證位於 `/opt/aws/amitools/ec2/etc/ec2/amitools/`。若您從 RPM 或 ZIP 檔案將 AMI 工具安裝進 [設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)，則憑證位於 `$EC2_AMITOOL_HOME/etc/ec2/amitools/`。  
必要：僅適用於 `us-gov-west-1` 和 `cn-north-1` 區域。

`-r, --arch` *architecture*  
映像架構。若您未於命令列提供架構，則會在綁定開始時提示您輸入架構。  
有效值：`i386` \$1 `x86_64`  
必要：否

`--productcodes` *code1,code2,...*  
欲在註冊時連接至映像的產品代碼，以逗號分隔。  
必要：否

`-B, --block-device-mapping` *mapping*  
定義區塊型儲存設備向此 AMI 的執行個體公開的方式 (若其執行個體類型支援所指定的設備)。  
指定以逗號分隔的索引鍵/值組清單，其中索引鍵為虛擬名稱，而值為相對應的設備名稱。虛擬名稱包括下列：  
+ `ami` - 執行個體所看見的根檔案系統設備
+ `root` - 核心所看見的根檔案系統設備
+ `swap` - 執行個體所看見的置換裝置
+ `ephemeralN` - 第 N 個執行個體存放磁碟區
必要：否

`-p, --prefix` *prefix*  
綁定的 AMI 檔案之檔案名稱字首。  
預設：映像檔案名稱。舉例來說，若映像路徑為 `/var/spool/my-image/version-2/debian.img`，則預設字首為 `debian.img`。  
必要：否

`--kernel` *kernel\$1id*  
已廢除. 使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 來設定核心。  
必要：否

`--ramdisk` *ramdisk\$1id*  
已廢除. 使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 來視需要設定 RAM 磁碟。  
必要：否

### Output
<a name="bundle-image-output"></a>

描述綁定程序階段與狀態的狀態訊息。

### 範例
<a name="bundle-image-response"></a>

此範例會從迴路檔案中建立的作業系統映像，建立綁定 AMI。

```
[ec2-user ~]$ ec2-bundle-image -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 111122223333 -i image.img -d bundled/ -r x86_64
Please specify a value for arch [i386]: 
Bundling image file...
Splitting bundled/image.gz.crypt...
Created image.part.00
Created image.part.01
Created image.part.02
Created image.part.03
Created image.part.04
Created image.part.05
Created image.part.06
Created image.part.07
Created image.part.08
Created image.part.09
Created image.part.10
Created image.part.11
Created image.part.12
Created image.part.13
Created image.part.14
Generating digests for each part...
Digests generated.
Creating bundle manifest...
ec2-bundle-image complete.
```

## ec2-bundle-vol
<a name="ami-bundle-vol"></a>

### Description
<a name="bundle-vol-description"></a>

針對執行個體的根磁碟區，透過壓縮、加密並簽署其複本，建立 Amazon S3 支援的 Linux AMI。

Amazon EC2 會嘗試從執行個體繼承產品代碼、核心設定、RAM 磁碟設定和區塊型儲存設備映射。

根據預設，bundle 程序不包含可能帶有敏感資訊的檔案。這些檔案包含 `*.sw`、`*.swo`、`*.swp`、`*.pem`、`*.priv`、`*id_rsa*`、`*id_dsa*` `*.gpg`、`*.jks`、`*/.ssh/authorized_keys` 和 `*/.bash_history`。若要包含所有這些檔案，請使用 `--no-filter` 選項。若要包含這些檔案中的一部分，請使用 `--include` 選項。

如需詳細資訊，請參閱 [建立 Amazon S3 支援的 AMI](creating-an-ami-instance-store.md)。

### 語法
<a name="bundle-vol-request"></a>

****ec2-bundle-vol** -c *path* -k *path* -u *account* [-d *path*] [--ec2cert *path*] [-r *architecture*] [--productcodes *code1*,*code2*,...] [-B *mapping*] [--all] [-e *directory1*,*directory2*,...] [-i *file1*,*file2*,...] [--no-filter] [-p *prefix*] [-s *size*] [--[no-]inherit] [-v *volume*] [-P *type*] [-S *script*] [--fstab *path*] [--generate-fstab] [--grub-config *path*]** 

### 選項
<a name="bundle-vol-parameters"></a>

`-c, --cert` *path*  
使用者以 PEM 編碼的 RSA 公有金鑰憑證檔案。  
必要：是

`-k, --privatekey ` *path*   
使用者以 PEM 編碼的 RSA 金鑰檔案路徑。  
必要：是

`-u, --user` *account*  
使用者 AWS 的帳戶 ID，不含破折號。  
必要：是

`-d, --destination` *destination*  
欲建立 bundle 的目錄。  
預設：`/tmp`  
必要：否

`--ec2cert` *path*  
用於加密映像資訊清單的 Amazon EC2 X.509 公有金鑰憑證路徑。  
`us-gov-west-1` 和 `cn-north-1` 區域使用非預設的公有金鑰憑證，而該憑證的路徑必須以此選項加以指定。憑證的路徑視 AMI 工具的安裝方法而異。以 Amazon Linux 而言，此憑證位於 `/opt/aws/amitools/ec2/etc/ec2/amitools/`。若您從 RPM 或 ZIP 檔案將 AMI 工具安裝進 [設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)，則憑證位於 `$EC2_AMITOOL_HOME/etc/ec2/amitools/`。  
必要：僅適用於 `us-gov-west-1` 和 `cn-north-1` 區域。

`-r, --arch ` *architecture*  
映像架構。若您未於命令列提供架構，則會在綁定開始時提示您提供架構。  
有效值：`i386` \$1 `x86_64`  
必要：否

`--productcodes` *code1,code2,...*  
欲在註冊時連接至映像的產品代碼，以逗號分隔。  
必要：否

`-B, --block-device-mapping` *mapping*  
定義區塊型儲存設備向此 AMI 的執行個體公開的方式 (若其執行個體類型支援所指定的設備)。  
指定以逗號分隔的索引鍵/值組清單，其中索引鍵為虛擬名稱，而值為相對應的設備名稱。虛擬名稱包括下列：  
+ `ami` - 執行個體所看見的根檔案系統設備
+ `root` - 核心所看見的根檔案系統設備
+ `swap` - 執行個體所看見的置換裝置
+ `ephemeralN` - 第 N 個執行個體存放磁碟區
必要：否

`-a, --all`  
綁定所有目錄，包括遠端掛載之檔案系統上的目錄。  
必要：否

`-e, --exclude ` *directory1,directory2,...*  
欲從 bundle 操作排除的絕對目錄路徑和檔案清單。此參數會覆寫 `--all` 選項。指定排除項目時，隨參數列出的目錄和子目錄將不會與磁碟區一同綁定。  
必要：否

`-i, --include ` *file1,file2,...*  
欲納入 bundle 操作的檔案清單。因為指定的檔案可能具備敏感資訊，若未指定則會從 AMI 排除。  
必要：否

`--no-filter`  
若已指定，我們不會因其可能具備敏感資訊而將其從 AMI 排除。  
必要：否

`-p, --prefix ` *prefix*  
綁定的 AMI 檔案之檔案名稱字首。  
預設：`image`  
必要：否

`-s, --size` *size*  
欲建立的映像檔案大小，以 MB (1024 \$1 1024 位元) 表示。大小上限為 10240 MB。  
預設：10240  
必要：否

`--[no-]inherit`  
指示映像是否繼承執行個體的中繼資料 (預設為繼承)。若啟用 `--inherit` 但無法存取執行個體中繼資料，則綁定會失敗。  
必要：否

`-v, --volume ` *volume*  
欲從中建立 bundle 的掛載磁碟區絕對路徑。  
預設：根目錄 (/)  
必要：否

`-P, --partition` *type*  
指示磁碟映像是否使用分割區表格。若未指定分割區表格類型，預設為用於磁碟區父區塊型儲存設備的類型 (若適用)，否則預設為 `gpt`。  
有效值：`mbr` \$1 `gpt` \$1 `none`  
必要：否

`-S, --script` *script*  
欲在綁定前執行的自訂指令碼。此指令碼必須具備單一引數，亦即磁碟區的掛載點。  
必要：否

`--fstab` *path*  
欲綁定至映像的 fstab 路徑。若未指定，Amazon EC2 會綁定 /etc/fstab。  
必要：否

`--generate-fstab`  
使用 Amazon EC2 提供的 fstab 綁定磁碟區。  
必要：否

`--grub-config`  
欲綁定至映像的替代 grub 組態檔案路徑。根據預設，`ec2-bundle-vol` 預期所複製映像上應存在 `/boot/grub/menu.lst` 或 `/boot/grub/grub.conf`。此選項可讓您指定替代 grub 組態檔案路徑，並將其複製以覆蓋預設值 (如有)。  
必要：否

`--kernel` *kernel\$1id*  
已廢除. 使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 來設定核心。  
必要：否

`--ramdisk`*ramdisk\$1id*  
已廢除. 使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 來視需要設定 RAM 磁碟。  
必要：否

### Output
<a name="bundle-vol-output"></a>

描述綁定階段與狀態的狀態訊息。

### 範例
<a name="bundle-vol-response"></a>

此範例會壓縮、加密並簽署本機機器根檔案系統的快照，藉此建立綁定的 AMI。

```
[ec2-user ~]$ ec2-bundle-vol -d /mnt -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 111122223333 -r x86_64
  Copying / into the image file /mnt/image...
  Excluding:
       sys
       dev/shm
       proc
       dev/pts
       proc/sys/fs/binfmt_misc
       dev
       media
       mnt
       proc
       sys
       tmp/image
       mnt/img-mnt
  1+0 records in
  1+0 records out
  mke2fs 1.38 (30-Jun-2005)
  warning: 256 blocks unused.

  Splitting /mnt/image.gz.crypt...
  Created image.part.00
  Created image.part.01
  Created image.part.02
  Created image.part.03
  ...
  Created image.part.22
  Created image.part.23
  Generating digests for each part...
  Digests generated.
  Creating bundle manifest...
  Bundle Volume complete.
```

## ec2-delete-bundle
<a name="ami-delete-bundle"></a>

### Description
<a name="delete-bundle-description"></a>

從 Amazon S3 儲存空間刪除指定 bundle。刪除 bundle 之後，即無法從相對應 AMI 啟動執行個體。

### 語法
<a name="delete-bundle-request"></a>

****ec2-delete-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* [-t *token*] [--url *url*] [--region *region*] [--sigv *version*] [-m *path*] [-p *prefix*] [--clear] [--retry] [-y]** 

### 選項
<a name="delete-bundle-parameters"></a>

`-b, --bucket `*bucket*  
內含綁定 AMI 的 Amazon S3 儲存貯體名稱，其後為選用「/」以分隔路徑字首  
必要：是

`-a, --access-key` *access\$1key\$1id*  
 AWS 存取金鑰 ID。  
必要：是

`-s, --secret-key` *secret\$1access\$1key*  
 AWS 私密存取金鑰。  
必要：是

`-t, --delegation-token` *token*  
要傳遞給 AWS 請求的委派字符。如需詳細資訊，請參閱 *IAM 使用者指南*中的[臨時安全憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。  
必要：僅適用您使用暫時安全登入資料時。  
預設：`AWS_DELEGATION_TOKEN` 環境變數的值 (如已設定)。

`--region`*region*  
於請求簽章內使用的區域。  
預設：`us-east-1`  
必要：若使用簽章第 4 版則為必要

`--sigv`*version*  
簽署請求時使用的簽章版本。  
有效值：`2` \$1 `4`  
預設：`4`  
必要：否

`-m, --manifest`*path*  
指向資訊清單檔案的路徑。  
必要：您必須指定 `--prefix` 或 `--manifest`。

`-p, --prefix` *prefix*  
綁定的 AMI 檔案名稱字首。請提供完整字首。舉例來說，若字首為 image.img，則使用 `-p image.img` 而非 `-p image`。  
必要：您必須指定 `--prefix` 或 `--manifest`。

`--clear`  
若 Amazon S3 儲存貯體在刪除指定 bundle 後為空白，則加以刪除。  
必要：否

`--retry`  
在所有 Amazon S3 錯誤後自動重試，每次操作至多五次。  
必要：否

`-y, --yes`  
自動假設所有提示的答案為 Yes (是)。  
必要：否

### Output
<a name="delete-bundle-output"></a>

Amazon EC2 顯示的狀態訊息，會指出刪除程序的階段與狀態。

### 範例
<a name="delete-bundle-response"></a>

此範例會自 Amazon S3 刪除一個 bundle。

```
[ec2-user ~]$ ec2-delete-bundle -b amzn-s3-demo-bucket -a your_access_key_id -s your_secret_access_key
Deleting files:
amzn-s3-demo-bucket/image.manifest.xml
amzn-s3-demo-bucket/image.part.00
amzn-s3-demo-bucket/image.part.01
amzn-s3-demo-bucket/image.part.02
amzn-s3-demo-bucket/image.part.03
amzn-s3-demo-bucket/image.part.04
amzn-s3-demo-bucket/image.part.05
amzn-s3-demo-bucket/image.part.06
Continue? [y/n]
y
Deleted amzn-s3-demo-bucket/image.manifest.xml
Deleted amzn-s3-demo-bucket/image.part.00
Deleted amzn-s3-demo-bucket/image.part.01
Deleted amzn-s3-demo-bucket/image.part.02
Deleted amzn-s3-demo-bucket/image.part.03
Deleted amzn-s3-demo-bucket/image.part.04
Deleted amzn-s3-demo-bucket/image.part.05
Deleted amzn-s3-demo-bucket/image.part.06
ec2-delete-bundle complete.
```

## ec2-download-bundle
<a name="ami-download-bundle"></a>

### Description
<a name="download-bundle-description"></a>

從 Amazon S3 儲存體下載指定的 Amazon S3 支援的 Linux AMI。

### 語法
<a name="download-bundle-request"></a>

****ec2-download-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* -k *path* [--url *url*] [--region *region*] [--sigv *version*] [-m *file*] [-p *prefix*] [-d *directory*] [--retry]** 

### 選項
<a name="download-bundle-parameters"></a>

`-b, --bucket` *bucket*  
bundle 所在的 Amazon S3 儲存貯體名稱，其後為選用「/」以分隔路徑字首。  
必要：是

`-a, --access-key` *access\$1key\$1id*  
 AWS 存取金鑰 ID。  
必要：是

`-s, --secret-key` *secret\$1access\$1key*  
 AWS 私密存取金鑰。  
必要：是

`-k, --privatekey` *path*  
用於解密資訊清單的私有金鑰。  
必要：是

`--url` *url*  
Amazon S3 服務的 URL。  
預設：`https://s3.amazonaws.com/`  
必要：否

`--region` *region*  
於請求簽章內使用的區域。  
預設：`us-east-1`  
必要：若使用簽章第 4 版則為必要

`--sigv` *version*  
簽署請求時使用的簽章版本。  
有效值：`2` \$1 `4`  
預設：`4`  
必要：否

`-m, --manifest` *file*  
不含路徑的資訊清單檔案名稱。建議您指定資訊清單 (`-m`) 或字首 (`-p`)。  
必要：否

`-p, --prefix ` *prefix*  
綁定的 AMI 檔案之檔案名稱字首。  
預設：`image`  
必要：否

`-d, --directory ` *directory*  
所下載 bundle 的儲存目錄。此目錄必須存在。  
預設：目前使用中的目錄。  
必要：否

 `--retry`   
在所有 Amazon S3 錯誤後自動重試，每次操作至多五次。  
必要：否

### Output
<a name="download-bundle-output"></a>

會顯示指出下載程序各個階段的狀態訊息。

### 範例
<a name="download-bundle-response"></a>

此範例會建立 `bundled` 目錄 (使用 Linux **mkdir** 命令) 並從 `amzn-s3-demo-bucket` Amazon S3 儲存貯體下載 bundle。

```
[ec2-user ~]$ mkdir bundled
[ec2-user ~]$ ec2-download-bundle -b amzn-s3-demo-bucket/bundles/bundle_name -m image.manifest.xml -a your_access_key_id -s your_secret_access_key -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -d mybundle
Downloading manifest image.manifest.xml from amzn-s3-demo-bucket to mybundle/image.manifest.xml ...
Downloading part image.part.00 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.00 ...
Downloaded image.part.00 from amzn-s3-demo-bucket
Downloading part image.part.01 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.01 ...
Downloaded image.part.01 from amzn-s3-demo-bucket
Downloading part image.part.02 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.02 ...
Downloaded image.part.02 from amzn-s3-demo-bucket
Downloading part image.part.03 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.03 ...
Downloaded image.part.03 from amzn-s3-demo-bucket
Downloading part image.part.04 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.04 ...
Downloaded image.part.04 from amzn-s3-demo-bucket
Downloading part image.part.05 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.05 ...
Downloaded image.part.05 from amzn-s3-demo-bucket
Downloading part image.part.06 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.06 ...
Downloaded image.part.06 from amzn-s3-demo-bucket
```

## ec2-migrate-manifest
<a name="ami-migrate-manifest"></a>

### Description
<a name="migrate-manifest-description"></a>

修改 Amazon S3 支援的 Linux AMI (如其憑證、核心和 RAM 磁碟)，以支援不同區域。

### 語法
<a name="migrate-manifest-request"></a>

****ec2-migrate-manifest** -c *path* -k *path* -m *path* \$1(-a *access\$1key\$1id* -s *secret\$1access\$1key* --region *region*) \$1 (--no-mapping)\$1 [--ec2cert *ec2\$1cert\$1path*] [--kernel *kernel-id*] [--ramdisk *ramdisk\$1id*]** 

### 選項
<a name="migrate-manifest-parameters"></a>

`-c, --cert` *path*  
使用者以 PEM 編碼的 RSA 公有金鑰憑證檔案。  
必要：是

`-k, --privatekey` *path*  
使用者以 PEM 編碼的 RSA 金鑰檔案路徑。  
必要：是

`--manifest` *path*  
指向資訊清單檔案的路徑。  
必要：是

`-a, --access-key` *access\$1key\$1id*  
 AWS 存取金鑰 ID。  
必要：若使用自動映射則為必要。

`-s, --secret-key ` *secret\$1access\$1key*  
 AWS 私密存取金鑰。  
必要：若使用自動映射則為必要。

`--region` *region*  
欲在映射檔案內查詢的區域。  
必要：若使用自動映射則為必要。

`--no-mapping`  
停用核心和 RAM 磁碟的自動映射。  
 在遷移過程中，Amazon EC2 會將資訊清單檔案內的核心和 RAM 磁碟，取代為專為目的地區域設計的核心與 RAM 磁碟。除非提供 `--no-mapping` 參數，否則 `ec2-migrate-bundle` 可能會使用 `DescribeRegions` 和 `DescribeImages` 操作來執行自動映射。  
必要：若您未提供用於自動映射的 `-a`、`-s` 和 `--region` 選項則為必要。

`--ec2cert` *path*  
用於加密映像資訊清單的 Amazon EC2 X.509 公有金鑰憑證路徑。  
`us-gov-west-1` 和 `cn-north-1` 區域使用非預設的公有金鑰憑證，而該憑證的路徑必須以此選項加以指定。憑證的路徑視 AMI 工具的安裝方法而異。以 Amazon Linux 而言，此憑證位於 `/opt/aws/amitools/ec2/etc/ec2/amitools/`。若您從 ZIP 檔案將 AMI 工具安裝進 [設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)，則憑證位於 `$EC2_AMITOOL_HOME/etc/ec2/amitools/`。  
必要：僅適用於 `us-gov-west-1` 和 `cn-north-1` 區域。

`--kernel` *kernel\$1id*  
欲選取的核心 ID。  
建議您使用 PV-GRUB，而不要使用核心與 RAM 磁碟。如需詳細資訊，請參閱「Amazon Linux 2 使用者指南」**中的[使用者提供的核心](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)。
必要：否

`--ramdisk` *ramdisk\$1id*  
欲選取的 RAM 磁碟 ID。  
建議您使用 PV-GRUB，而不要使用核心與 RAM 磁碟。如需詳細資訊，請參閱「Amazon Linux 2 使用者指南」**中的[使用者提供的核心](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)。
必要：否

### Output
<a name="migrate-manifest-output"></a>

描述綁定程序階段與狀態的狀態訊息。

### 範例
<a name="migrate-manifest-response"></a>

此範例會將 `my-ami.manifest.xml` 資訊清單中指定的 AMI，從美國複製至歐洲。

```
[ec2-user ~]$ ec2-migrate-manifest --manifest my-ami.manifest.xml --cert cert-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem --privatekey pk-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem --region eu-west-1 

Backing up manifest...
Successfully migrated my-ami.manifest.xml It is now suitable for use in eu-west-1.
```

## ec2-unbundle
<a name="ami-unbundle"></a>

### Description
<a name="unbundle-description"></a>

透過 Amazon S3 支援的 Linux AMI 重新建立 bundle。

### 語法
<a name="unbundle-request"></a>

****ec2-unbundle** -k *path* -m *path* [-s *source\$1directory*] [-d *destination\$1directory*]** 

### 選項
<a name="unbundle-parameters"></a>

`-k, --privatekey` *path*  
指向您以 PEM 編碼的 RSA 金鑰檔案路徑。  
必要：是

`-m, --manifest` *path*  
指向資訊清單檔案的路徑。  
必要：是

`-s, --source` *source\$1directory*  
內含 bundle 的目錄。  
預設：目前的目錄。  
必要：否

`-d, --destination` *destination\$1directory*  
欲從中解開 AMI 的目錄。此目的地目錄必須存在。  
預設：目前的目錄。  
必要：否

### 範例
<a name="unbundle-response"></a>

此 Linux 和 UNIX 範例會解開 `image.manifest.xml` 檔案內指定的 AMI。

```
[ec2-user ~]$ mkdir unbundled
$ ec2-unbundle -m mybundle/image.manifest.xml -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -s mybundle -d unbundled
$ ls -l unbundled
total 1025008
-rw-r--r-- 1 root root 1048578048 Aug 25 23:46 image.img
```

### Output
<a name="unbundle-output"></a>

會顯示指出解開程序各個階段的狀態訊息。

## ec2-upload-bundle
<a name="ami-upload-bundle"></a>

### Description
<a name="upload-bundle-description"></a>

將 Amazon S3 支援的 Linux AMI 的套件組合上傳至 Amazon S3，並在所上傳的物件上設定適當的存取控制清單 (ACL)。如需詳細資訊，請參閱[建立 Amazon S3 支援的 AMI](creating-an-ami-instance-store.md)。

**注意**  
若要為您的 Amazon S3 支援的 Linux AMI 將物件上傳到 S3 儲存貯體，必須為儲存貯體啟用 ACL。否則，Amazon EC2 將無法在要上傳的物件上設定 ACL。如果您的目的地儲存貯體將儲存貯體擁有者強制設定用於 S3 物件擁有權，這將無法運作，因為 ACL 已停用。如需詳細資訊，請參閱[控制物件的擁有權並停用儲存貯體的 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)。

### 語法
<a name="upload-bundle-request"></a>

****ec2-upload-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* [-t *token*] -m *path* [--url *url*] [--region *region*] [--sigv *version*] [--acl *acl*] [-d *directory*] [--part *part*] [--retry] [--skipmanifest]** 

### 選項
<a name="upload-bundle-parameters"></a>

`-b, --bucket` *bucket*  
存放 bundle 的 Amazon S3 儲存貯體名稱，其後為選用「/」以分隔路徑字首。若該儲存貯體不存在，則會加以建立 (如該儲存貯體名稱為可用)。此外，如果儲存貯體不存在且 AMI 工具版本為 1.5.18 或更新版本，則此命令會設定儲存貯體的 ACL。  
必要：是

`-a, --access-key` *access\$1key\$1id*  
您的 AWS 存取金鑰 ID。  
必要：是

`-s, --secret-key` *secret\$1access\$1key*  
您的 AWS 私密存取金鑰。  
必要：是

`-t, --delegation-token` *token*  
要傳遞給 AWS 請求的委派字符。如需詳細資訊，請參閱 *IAM 使用者指南*中的[臨時安全憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。  
必要：僅適用您使用暫時安全登入資料時。  
預設：`AWS_DELEGATION_TOKEN` 環境變數的值 (如已設定)。

`-m, --manifest` *path*  
指向資訊清單檔案的路徑。資訊清單檔案會於綁定程序期間建立，位於內含 bundle 的目錄。  
必要：是

`--url` *url*  
已廢除. 改用 `--region` 選項，除非您的儲存貯體被限制在 `EU` 位置 (而非 `eu-west-1`)。`--location` 旗標是確定該特定位置限制的唯一方法。  
Amazon S3 端點服務 URL。  
預設：`https://s3.amazonaws.com/`  
必要：否

`--region` *region*  
要在請求簽章內針對目的地 S3 儲存貯體使用的區域。  
+ 若該儲存貯體不存在且您未指定區域，此工具會建立不具位置限制的儲存貯體 (位於`us-east-1`)。
+ 若該儲存貯體不存在且您已指定區域，此工具會在該區域建立儲存貯體。
+ 若該儲存貯體存在但您未指定區域，此工具會使用該儲存貯體的位置。
+ 若該儲存貯體存在且您指定 `us-east-1` 為區域，此工具會使用該儲存貯體的實際位置，不會出現錯誤訊息，而且會覆寫所有現有的相符檔案。
+ 若該儲存貯體存在且您指定的區域 (`us-east-1` 之外) 與儲存貯體的實際位置不相符，此工具會退出並顯示錯誤。
若您的儲存貯體被限制在 `EU` 位置 (而非 `eu-west-1`)，請改用 `--location` 旗標。`--location` 旗標是確定該特定位置限制的唯一方法。  
預設：`us-east-1`  
必要：若使用簽章第 4 版則為必要

`--sigv` *version*  
簽署請求時使用的簽章版本。  
有效值：`2` \$1 `4`  
預設：`4`  
必要：否

`--acl` *acl*  
綁定映像的存取控制清單政策。  
有效值：`public-read` \$1 `aws-exec-read`  
預設：`aws-exec-read`  
必要：否

`-d, --directory` *directory*  
內含綁定 AMI 組件的目錄。  
預設：內含資訊清單檔案的目錄 (請參閱 `-m` 選項)。  
必要：否

`--part` *part*  
開始上傳指定組件及所有後續組件。例如 `--part 04`。  
必要：否

`--retry`  
在所有 Amazon S3 錯誤後自動重試，每次操作至多五次。  
必要：否

`--skipmanifest`  
不會上傳資訊清單。  
必要：否

`--location` *location*  
已廢除. 改用 `--region` 選項，除非您的儲存貯體被限制在 `EU` 位置 (而非 `eu-west-1`)。`--location` 旗標是確定該特定位置限制的唯一方法。  
目的地 Amazon S3儲存貯體的位置限制。若該儲存貯體存在且您指定的位置與儲存貯體的實際位置不相符，此工具會退出並顯示錯誤。若該儲存貯體存在但您未指定位置，此工具會使用該儲存貯體的位置。若該儲存貯體不存在且您已指定位置，此工具會在該位置建立儲存貯體。若該儲存貯體不存在且您未指定位置，此工具會建立不具位置限制的儲存貯體 (位於 `us-east-1`)。  
預設：若已指定 `--region`，則位置會設定為該指定區域。若未指定 `--region`，則位置預設為 `us-east-1`。  
必要：否

### Output
<a name="upload-bundle-output"></a>

Amazon EC2 顯示的狀態訊息，會指出上傳程序的階段與狀態。

### 範例
<a name="upload-bundle-response"></a>

此範例會上傳 `image.manifest.xml` 資訊清單指定的 bundle。

```
[ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundles/bundle_name -m image.manifest.xml -a your_access_key_id -s your_secret_access_key
Creating bucket...
Uploading bundled image parts to the S3 bucket amzn-s3-demo-bucket ...
Uploaded image.part.00
Uploaded image.part.01
Uploaded image.part.02
Uploaded image.part.03
Uploaded image.part.04
Uploaded image.part.05
Uploaded image.part.06
Uploaded image.part.07
Uploaded image.part.08
Uploaded image.part.09
Uploaded image.part.10
Uploaded image.part.11
Uploaded image.part.12
Uploaded image.part.13
Uploaded image.part.14
Uploading manifest ...
Uploaded manifest.
Bundle upload completed.
```

## AMI 工具常用選項
<a name="common-args-ami"></a>

多數 AMI 工具接受下列選用參數。

`--help, -h`  
顯示協助訊息。

`--version`  
顯示版本及著作權聲明。

`--manual`  
顯示手動輸入。

`--batch`  
以批次模式執行，不使用互動式提示。

`--debug`  
顯示可用於故障排除問題的資訊。

# 將 Amazon S3 支援的 AMI 轉換為 EBS 支援的 AMI
<a name="Using_ConvertingS3toEBS"></a>

您可將擁有的 Amazon S3 支援的 Linux AMI 轉換為 Amazon EBS 支援的 Linux AMI。

**重要**  
您無法轉換不屬於您的 AMI。

**如需將 Amazon S3 支援的 AMI 轉換為 Amazon EBS 支援的 AMI**

1. 從 Amazon EBS 後端 AMI 啟動 Amazon Linux 執行個體。如需詳細資訊，請參閱[使用主控台中的啟動執行個體精靈，啟動 EC2 執行個體](ec2-launch-instance-wizard.md)。Amazon Linux 執行個體已預先安裝 AWS CLI 和 AMI 工具。

1. 請將您用來組合 Amazon S3 支援的 AMI 的 X.509 私有金鑰上傳至您的執行個體。此金鑰是用來確定只有您與 Amazon EC2 可存取您的 AMI。

   1. 在執行個體上為 X.509 私有金鑰建立如下的暫時目錄：

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

   1. 使用 [scp](linux-file-transfer-scp.md) 等安全複製工具從電腦上將 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
      ```

1. 設定環境變數以使用 AWS CLI。如需詳細資訊，請參閱[環境變數](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)。

   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
      ```

   1. 為您的 AWS 存取金鑰和私密金鑰設定環境變數。

      ```
      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id
      [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
      ```

1. 為新的 AMI 準備 Amazon Elastic Block Store (Amazon EBS) 磁碟區。

   1. 使用 [create-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html) 命令在與您執行個體相同的可用區域中建立空的 EBS 磁碟區。記下命令輸出中的磁碟區 ID。
**重要**  
 此 EBS 磁碟區的大小必須等於或大於原本的執行個體儲存體根磁碟區。

      ```
      aws ec2 create-volume \
          --size 10 \
          --region us-west-2 \
          --availability-zone us-west-2b
      ```

   1. 使用 [attach-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html) 命令將磁碟區連接到您的 Amazon EBS 後端執行個體。

      ```
      aws ec2 attach-volume \
          --volume-id vol-01234567890abcdef \
          --instance-id i-1234567890abcdef0 \
          --region us-west-2
      ```

1. 建立您的 bundle 資料夾。

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

1. 使用 `/tmp/bundle` 命令將執行個體後端 AMI 的 bundle 下載至 [ec2-download-bundle](ami-tools-commands.md#ami-download-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
   ```

1. 使用 [ec2-unbundle](ami-tools-commands.md#ami-unbundle) 命令從 bundle 重新建構映像檔。

   1. 將目錄變更為 bundle 資料夾。

      ```
      [ec2-user ~]$ cd /tmp/bundle/
      ```

   1. 執行 [ec2-unbundle](ami-tools-commands.md#ami-unbundle) 命令。

      ```
      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
      ```

1. 從解開映像將檔案複製到新的 EBS 磁碟區。

   ```
   [ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
   ```

1. 探測磁碟區中是否有任何解開的新分割區。

   ```
   [ec2-user bundle]$ sudo partprobe /dev/sdb1
   ```

1. 列出區塊型儲存設備，以找出要掛載的設備名稱。

   ```
   [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` (沒有設備分割區尾碼)。

1. 為新的 EBS 磁碟區建立掛載點，然後掛載磁碟區。

   ```
   [ec2-user bundle]$ sudo mkdir /mnt/ebs
   [ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
   ```

1. 用您偏好的文字編輯器 (例如 `/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
   ```

   在此範例中，應該移除最後一行。

1. 卸載磁碟區，並從執行個體分離。

   ```
   [ec2-user bundle]$ sudo umount /mnt/ebs
   [ec2-user bundle]$ aws ec2 detach-volume --volume-id vol-01234567890abcdef --region us-west-2
   ```

1. 從新的 EBS 磁碟區建立 AMI，如下所示。

   1. 建立新 EBS 磁碟區的快照。

      ```
      [ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id vol-01234567890abcdef
      ```

   1. 檢查快照是否完整。

      ```
      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snap-0abcdef1234567890
      ```

   1. 使用 **describe-images** 命令找出原始 AMI 的處理器架構、虛擬化類型與核心映像 (`aki`)。在此步驟中，您需要擁有原始 Amazon S3 支援的 AMI 的 AMI ID。

      ```
      [ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-0abcdef1234567890 --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，請將其記下。

   1. 使用新 EBS 磁碟區的快照 ID 和先前步驟中的數值登錄您的新 AMI。如果先前的命令輸出列出 `ari` ID，請用 `--ramdisk-id ari_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=snap-0abcdef1234567890} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
      ```

1. (選用) 確認可以從新 AMI 啟動執行個體後，您便能刪除為此程序建立的 EBS 磁碟區。

   ```
   aws ec2 delete-volume --volume-id vol-01234567890abcdef
   ```