建立 Amazon S3 後端 AMI - Amazon Elastic Compute Cloud

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

建立 Amazon S3 後端 AMI

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

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

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

重要

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

AMI 建立程序與 Amazon EBS 後端 AMI 不同。如需詳細資訊,請參閱建立 Amazon EBS 支援的 AMI

AMI 建立概觀

下圖摘要說明從具有執行個體存放區根磁碟區的執行個體建立 AMI 的程序。

建立 Amazon S3 後端 AMI。

首先,請先從與您要建立的 AMI 相似的 AMI 啟動執行個體。您可以連線到您的執行個體並自訂。設定好所要的執行個體後,您可以組合執行個體。完成綁定程序需要幾分鐘。程序完成後,您將擁有 bundle,其中包含映像工作資訊清單檔案 (image.manifest.xml) 和含有根磁碟區範本的檔案 (image.part.xx)。接著您上傳 bundle 至 Amazon S3 儲存貯體,然後登錄您的 AMI。

注意

若要將物件上傳至 Amazon S3 後端 Linux AMI 的 S3 儲存貯體,必須為儲存貯體啟用 ACLs。 Amazon S3 否則,Amazon EC2 將無法在要上傳的物件上設定 ACL。如果您的目的地儲存貯體將儲存貯體擁有者強制設定用於 S3 物件擁有權,這將無法運作,因為 ACL 已停用。如需詳細資訊,請參閱控制物件的擁有權並停用儲存貯體的 ACL

當您使用新的 AMI 啟動執行個體時,我們會使用上傳至 Amazon S3 的 bundle 建立執行個體的根磁碟區。Amazon S3 中 bundle 所用的儲存空間會使您的帳戶產生費用,直到刪除為止。如需詳細資訊,請參閱取消註冊 Amazon EC2 AMI

如果您除了根磁碟區之外,還將執行個體存放磁碟區新增至執行個體,則新 AMI 的區塊型設備映射會包含這些磁碟區的資訊,而您從新 AMI 啟動之執行個體的區塊型設備映射會自動包含這些磁碟區的資訊。如需詳細資訊,請參閱Amazon EC2 執行個體上磁碟區的區塊型儲存設備映射

先決條件

在您可以開始建立 AMI 之前,務必完成以下工作:

  • 安裝 AMI 工具。如需詳細資訊,請參閱設定 Amazon EC2 AMI 工具

  • 安裝 AWS CLI。如需詳細資訊,請參閱 AWS CLI入門

  • 請確定您具有套件組合的 S3 儲存貯體,並確定您的儲存貯體已啟用 ACL。如需有關設定 ACL 的詳細資訊,請參閱設定 ACL

    • 若要使用 建立 S3 儲存貯體 AWS Management Console,請在 https://https://console.aws.amazon.com/s3/ 開啟 Amazon S3 主控台,然後選擇建立儲存貯體

    • 若要使用 建立 S3 儲存貯體 AWS CLI,您可以使用 mb 命令。如果安裝的 AMI 工具版本為 1.5.18 或更新版本,也可以使用 ec2-upload-bundle 命令建立 S3 儲存貯體。如需詳細資訊,請參閱ec2-upload-bundle

  • 確保綁定的檔案未在 S3 儲存貯體加密。如果您需要對 AMI 進行加密,則可以改用 EBS 支援的 AMI。如需詳細資訊,請參閱對 EBS 後端 AMI 使用加密

  • 請確定您擁有 AWS 帳戶 ID。如需詳細資訊,請參閱《AWS 帳戶管理參考指南》中的檢視 AWS 帳戶 識別符

  • 請確定您擁有可使用 AWS CLI的憑證。如需詳細資訊,請參閱AWS Command Line Interface 《 使用者指南》中的 的身分驗證和存取憑證 AWS CLI

  • 請確定您擁有 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 舊版才能正常開機。請使用下列命令安裝 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 選項為用來透過 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 中的新檔案內。

  2. 從執行個體內執行 ec2-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 磁碟區

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

      [ec2-user ~]$ sudo -E su

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

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

    3. 退出根 shell。

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