從執行個體存放區後端執行個體建立 AMI
以下程序可從執行個體後端執行個體建立執行個體後端 AMI。開始之前,請務必先詳閱所列各項先決條件。
從執行個體後端 Amazon Linux 執行個體建立 AMI
本節說明如何從 Amazon Linux 執行個體建立 AMI。以下程序不一定適用於執行其他 Linux 發行版本的執行個體。如需 Ubuntu 專屬程序,請參閱從執行個體後端 Ubuntu 執行個體建立 AMI。
準備使用 AMI 工具 (僅適用於 HVM 執行個體)
-
AMI 工具需要 GRUB 舊版才能正常開機。請使用下列命令安裝 GRUB:
[ec2-user ~]$
sudo yum install -y grub
-
使用下列命令安裝分割區管理套件:
[ec2-user ~]$
sudo yum install -y gdisk kpartx parted
從執行個體後端 Amazon Linux 執行個體建立 AMI
此程序假設您已滿足 先決條件 中的先決條件。
-
將您的登入資料上傳到執行個體。這些登入資料是用來確定只有您與 Amazon EC2 可存取您的 AMI。
-
在執行個體上為登入資料建立如下的暫時目錄:
[ec2-user ~]$
mkdir /tmp/cert
如此您就能將登入資料從建立的映像中排除。
-
使用 scp 等安全複製工具從電腦上將 X.509 憑證和對應的私有金鑰複製到執行個體上的
/tmp/cert
目錄內。以下-i
命令中的 scp 選項為用來透過 SSH 連接執行個體的私有金鑰,而非 X.509 私有金鑰。例如:my-private-key
.pemyou@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
中的新檔案內。 -
-
從執行個體內執行 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
選項。重要
-
您必須以 root 執行 ec2-bundle-vol 命令。針對多數命令,您皆能用 sudo 來取得更高級的許可,但在此情況下您應執行 sudo -E su 以保持環境變數。
[ec2-user ~]$
sudo -E su
請注意,bash 提示現在將您識別為根使用者,且貨幣符號已換成雜湊標籤,表示您正在根 shell 下:
[root ec2-user]#
-
若要建立 AMI bundle,請照下列所示執行 ec2-bundle-vol 命令:
[root ec2-user]#
ec2-bundle-vol -k /tmp/cert/
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-u123456789012
-r x86_64 -e /tmp/cert --partitiongpt
注意
針對中國 (北京) 和 AWS GovCloud (US-West) 區域,請使用
--ec2cert
參數並依照 先決條件指定憑證。建立映像可能需要幾分鐘。完成此命令後,您的
/tmp
(或非預設的) 目錄將包含 bundle (image.manifest.xml
,加上多個image.part.
xx
檔案)。 -
退出根 shell。
[root ec2-user]#
exit
-
-
(選用) 若要新增更多執行個體儲存體磁碟區,請在 AMI 的
image.manifest.xml
檔案中編輯區塊型裝置映射。如需更多詳細資訊,請參閱 區塊型儲存設備對應。-
為您的
image.manifest.xml
檔案建立備份。[ec2-user ~]$
sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
-
重新格式化
image.manifest.xml
檔案,以方便讀取和編輯。[ec2-user ~]$
sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
-
使用文字編輯器編輯
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> -
儲存
image.manifest.xml
檔案並結束文字編輯器。
-
-
若要上傳 bundle 至 Amazon S3,請照下列所示執行 ec2-upload-bundle 命令。
[ec2-user ~]$
ec2-upload-bundle -b
my-s3-bucket
/bundle_folder
/bundle_name
-m /tmp/image.manifest.xml -ayour_access_key_id
-syour_secret_access_key
重要
若要在US East (N. Virginia) 以外的區域登錄 AMI,您必須使用
--region
選項指定兩個目標區域,和目標區域中已存在的儲存貯體路徑,或可在目標區域中建立的唯一儲存貯體路徑。 -
(選用) bundle 上傳至 Amazon S3 之後,您可使用下列
/tmp
命令將 bundle 從執行個體的 rm 目錄中移除:[ec2-user ~]$
sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
重要
如果用
-d
選項指定 步驟 2 中的路徑,請使用該路徑,而非/path/to/bundle/storage
/tmp
。 -
若要登錄 AMI,請照下列所示執行 register-image 命令。
[ec2-user ~]$
aws ec2 register-image --image-location
my-s3-bucket
/bundle_folder
/bundle_name
/image.manifest.xml --nameAMI_name
--virtualization-typehvm
重要
如果您先前已指定 ec2-upload-bundle 命令的區域,請在此命令中再次指定該區域。
從執行個體後端 Ubuntu 執行個體建立 AMI
本節說明如何從 Ubuntu Linux 執行個體建立 AMI,並將執行個體儲存區磁碟區做為根磁碟區。以下程序不一定適用於執行其他 Linux 發行版本的執行個體。如需特定的程序 Amazon Linux,請參閱從執行個體後端 Amazon Linux 執行個體建立 AMI。
準備使用 AMI 工具 (僅適用於 HVM 執行個體)
AMI 工具需要 GRUB 舊版才能正常開機。但 Ubuntu 已設定為使用 GRUB 2。您必須檢查執行個體是否使用 GRUB 舊版,假如不是,您需要進行安裝及設定。
HVM 執行個體也要求必須安裝分割工具,AMI 工具才能正常運作。
-
您的執行個體上必須安裝 GRUB 舊版 (0.9
x
版或更低)。請檢查是否有 GRUB 舊版,並請視需要安裝。 -
使用發行版本的套件管理工具安裝下列分割區管理套件。
-
gdisk
(某些發行版本可能稱此套件為gptfdisk
) -
kpartx
-
parted
使用下列命令。
ubuntu:~$
sudo apt-get install -y gdisk kpartx parted
-
-
檢查執行個體的核心參數。
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
請注意核心及根設備參數後方的選項:
ro
、console=ttyS0
和xen_emul_unplug=unnecessary
。您的選項可能不盡相同。 -
檢查
/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
參數遺失。再次強調,您的選項可能不盡相同。 -
用您偏好的文字編輯器 (例如
/boot/grub/menu.lst
或 vim) 編輯 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 singleconsole=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 -
請確認您的核心項目現在包含正確參數。
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
-
(僅適用於 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
此程序假設您已滿足 先決條件 中的先決條件。
-
將您的登入資料上傳到執行個體。這些登入資料是用來確定只有您與 Amazon EC2 可存取您的 AMI。
-
在執行個體上為登入資料建立如下的暫時目錄:
ubuntu:~$
mkdir /tmp/cert
如此您就能將登入資料從建立的映像中排除。
-
使用 scp 等安全複製工具從電腦上將 X.509 憑證和私有金鑰複製到執行個體上的
/tmp/cert
目錄內。以下-i
命令中的 scp 選項為用來透過 SSH 連接執行個體的私有金鑰,而非 X.509 私有金鑰。例如:my-private-key
.pemyou@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
中的新檔案內。 -
-
從執行個體執行 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
選項。重要
-
您必須以根使用者身分執行 ec2-bundle-vol 命令。針對多數命令,您皆能用 sudo 來取得更高級的許可,但在此情況下您應執行 sudo -E su 以保持環境變數。
ubuntu:~$
sudo -E su
請注意,bash 提示現在將您識別為根使用者,且貨幣符號已換成雜湊標籤,表示您正在根 shell 下:
root@ubuntu:#
-
若要建立 AMI bundle,請照下列所示執行 ec2-bundle-vol 命令。
root@ubuntu:#
ec2-bundle-vol -k /tmp/cert/
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-uyour_aws_account_id
-r x86_64 -e /tmp/cert --partitiongpt
重要
針對 Ubuntu 14.04 和更新版本的 HVM 執行個體,請新增
--partition mbr
旗標,以正確組合開機指令;否則新建立的 AMI 將無法開機。建立映像可能需要幾分鐘。完成此命令後,您的
tmp
目錄將包含 bundle (image.manifest.xml
,加上多個image.part.
xx
檔案)。 -
退出根 shell。
root@ubuntu:#
exit
-
-
(選用) 若要新增更多執行個體儲存體磁碟區,請在 AMI 的
image.manifest.xml
檔案中編輯區塊型裝置映射。如需更多詳細資訊,請參閱 區塊型儲存設備對應。-
為您的
image.manifest.xml
檔案建立備份。ubuntu:~$
sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
-
重新格式化
image.manifest.xml
檔案,以方便讀取和編輯。ubuntu:~$
sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
-
使用文字編輯器編輯
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> -
儲存
image.manifest.xml
檔案並結束文字編輯器。
-
-
若要上傳 bundle 至 Amazon S3,請照下列所示執行 ec2-upload-bundle 命令。
ubuntu:~$
ec2-upload-bundle -b
my-s3-bucket
/bundle_folder
/bundle_name
-m /tmp/image.manifest.xml -ayour_access_key_id
-syour_secret_access_key
重要
如果您想要在US East (N. Virginia) 以外的區域登錄 AMI,您必須使用
--region
選項指定兩個目標區域和目標區域中已存在的儲存貯體路徑,或可在目標區域中建立的唯一儲存貯體路徑。 -
(選用) bundle 上傳至 Amazon S3 之後,您可使用下列
/tmp
命令將 bundle 從執行個體的 rm 目錄中移除:ubuntu:~$
sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
重要
如果用
-d
選項指定 步驟 2 中的路徑,請使用底下的相同路徑,而非/path/to/bundle/storage
/tmp
。 -
若要登錄 AMI,請照下列所示執行 register-image AWS CLI 命令。
ubuntu:~$
aws ec2 register-image --image-location
my-s3-bucket
/bundle_folder
/bundle_name
/image.manifest.xml --nameAMI_name
--virtualization-typehvm
重要
如果您先前已指定 ec2-upload-bundle 命令的區域,請在此命令中再次指定該區域。
-
(Ubuntu 14.04 和更新版本) 取消
/etc/fstab
中 EFI 項目的註解;否則,已在執行中的執行個體將無法重新啟動。