從執行個體存放區後端執行個體建立 AMI - Amazon Elastic Compute Cloud

從執行個體存放區後端執行個體建立 AMI

以下程序可從執行個體後端執行個體建立執行個體後端 AMI。開始之前,請務必先詳閱所列各項先決條件

從執行個體後端 Amazon Linux 執行個體建立 AMI

本節說明如何從 Amazon Linux 執行個體建立 AMI。以下程序不一定適用於執行其他 Linux 發行版本的執行個體。如需 Ubuntu 專屬程序,請參閱從執行個體後端 Ubuntu 執行個體建立 AMI

準備使用 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 Elastic Block Store (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 (US-West) 區域,請使用 --ec2cert 參數並依照 先決條件指定憑證。

      建立映像可能需要幾分鐘。完成此命令後,您的 /tmp (或非預設的) 目錄將包含 bundle (image.manifest.xml,加上多個 image.part.xx 檔案)。

    3. 退出根 shell。

      [root ec2-user]# exit
  3. (選用) 若要新增更多執行個體儲存體磁碟區,請在 AMI 的 image.manifest.xml 檔案中編輯區塊型裝置映射。如需更多詳細資訊,請參閱 區塊型儲存設備對應

    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 my-s3-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 my-s3-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
    重要

    如果您先前已指定 ec2-upload-bundle 命令的區域,請在此命令中再次指定該區域。

從執行個體後端 Ubuntu 執行個體建立 AMI

本節說明如何從 Ubuntu Linux 執行個體建立 AMI,並將執行個體儲存區磁碟區做為根磁碟區。以下程序不一定適用於執行其他 Linux 發行版本的執行個體。如需特定的程序 Amazon Linux,請參閱從執行個體後端 Amazon Linux 執行個體建立 AMI

準備使用 AMI 工具 (僅適用於 HVM 執行個體)

AMI 工具需要 GRUB 舊版才能正常開機。但 Ubuntu 已設定為使用 GRUB 2。您必須檢查執行個體是否使用 GRUB 舊版,假如不是,您需要進行安裝及設定。

HVM 執行個體也要求必須安裝分割工具,AMI 工具才能正常運作。

  1. 您的執行個體上必須安裝 GRUB 舊版 (0.9x 版或更低)。請檢查是否有 GRUB 舊版,並請視需要安裝。

    1. 檢查 GRUB 安裝的版本。

      ubuntu:~$ grub-install --version grub-install (GRUB) 1.99-21ubuntu3.10

      在此範例中,GRUB 版本為 0.9x 以上,因此您必須安裝 GRUB 舊版。繼續執行「步驟 2」。如果您已有 GRUB 舊版,則可以跳至步驟 2步驟。

    2. 使用以下命令安裝 grub 套件。

      ubuntu:~$ sudo apt-get install -y grub
  2. 使用發行版本的套件管理工具安裝下列分割區管理套件。

    • gdisk (某些發行版本可能稱此套件為 gptfdisk)

    • kpartx

    • parted

    使用下列命令。

    ubuntu:~$ sudo apt-get install -y gdisk kpartx parted
  3. 檢查執行個體的核心參數。

    ubuntu:~$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.2.0-54-virtual root=UUID=4f392932-ed93-4f8f-aee7-72bc5bb6ca9d ro console=ttyS0 xen_emul_unplug=unnecessary

    請注意核心及根設備參數後方的選項:roconsole=ttyS0xen_emul_unplug=unnecessary。您的選項可能不盡相同。

  4. 檢查 /boot/grub/menu.lst 中的核心項目。

    ubuntu:~$ grep ^kernel /boot/grub/menu.lst kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=hvc0 kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single kernel /boot/memtest86+.bin

    請注意,console 參數指向 hvc0,而非 ttyS0,且 xen_emul_unplug=unnecessary 參數遺失。再次強調,您的選項可能不盡相同。

  5. 用您偏好的文字編輯器 (例如 /boot/grub/menu.lstvim) 編輯 nano 檔案,以變更主控台並將先前找出的參數加入到開機項目。

    title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0 xen_emul_unplug=unnecessary initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual (recovery mode) root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single console=ttyS0 xen_emul_unplug=unnecessary initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, memtest86+ root (hd0) kernel /boot/memtest86+.bin
  6. 請確認您的核心項目現在包含正確參數。

    ubuntu:~$ grep ^kernel /boot/grub/menu.lst kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/memtest86+.bin
  7. (僅適用於 Ubuntu 14.04 和更新版本) 自 Ubuntu 14.04 起,執行個體後端 Ubuntu AMI 使用 GPT 分割表格和掛載於 /boot/efi 的獨立 EFI 分割區。ec2-bundle-vol 命令不會組合此開機分割區,因此您需要將 EFI 分割區的 /etc/fstab 項目變更為註解,如下範例所示。

    LABEL=cloudimg-rootfs / ext4 defaults 0 0 #LABEL=UEFI /boot/efi vfat defaults 0 0 /dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
從執行個體後端 Ubuntu 執行個體建立 AMI

此程序假設您已滿足 先決條件 中的先決條件。

  1. 將您的登入資料上傳到執行個體。這些登入資料是用來確定只有您與 Amazon EC2 可存取您的 AMI。

    1. 在執行個體上為登入資料建立如下的暫時目錄:

      ubuntu:~$ 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 Elastic Block Store (Amazon EBS) 磁碟區,以存放套件組合。

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

      ubuntu:~$ sudo -E su

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

      root@ubuntu:#
    2. 若要建立 AMI bundle,請照下列所示執行 ec2-bundle-vol 命令。

      root@ubuntu:# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u your_aws_account_id -r x86_64 -e /tmp/cert --partition gpt
      重要

      針對 Ubuntu 14.04 和更新版本的 HVM 執行個體,請新增 --partition mbr 旗標,以正確組合開機指令;否則新建立的 AMI 將無法開機。

      建立映像可能需要幾分鐘。完成此命令後,您的 tmp 目錄將包含 bundle (image.manifest.xml,加上多個 image.part.xx 檔案)。

    3. 退出根 shell。

      root@ubuntu:# exit
  3. (選用) 若要新增更多執行個體儲存體磁碟區,請在 AMI 的 image.manifest.xml 檔案中編輯區塊型裝置映射。如需更多詳細資訊,請參閱 區塊型儲存設備對應

    1. 為您的 image.manifest.xml 檔案建立備份。

      ubuntu:~$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
    2. 重新格式化 image.manifest.xml 檔案,以方便讀取和編輯。

      ubuntu:~$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
    3. 使用文字編輯器編輯 image.manifest.xml 中的區塊型裝置映射。下列範例顯示 ephemeral1 執行個體存放磁碟區的新項目。

      <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 命令。

    ubuntu:~$ ec2-upload-bundle -b my-s3-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 目錄中移除:

    ubuntu:~$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
    重要

    如果用 -d /path/to/bundle/storage 選項指定 步驟 2 中的路徑,請使用底下的相同路徑,而非 /tmp

  6. 若要登錄 AMI,請照下列所示執行 register-image AWS CLI 命令。

    ubuntu:~$ aws ec2 register-image --image-location my-s3-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
    重要

    如果您先前已指定 ec2-upload-bundle 命令的區域,請在此命令中再次指定該區域。

  7. (Ubuntu 14.04 和更新版本) 取消 /etc/fstab 中 EFI 項目的註解;否則,已在執行中的執行個體將無法重新啟動。