本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將執行個體儲存體支援的 AMI 轉換為 EBS 支援的 AMI
您可將擁有的執行個體後端 Linux AMI 轉換為 Amazon EBS 後端 Linux AMI。
重要
您無法轉換不屬於您的 AMI。
將執行個體後端 AMI 轉換為 Amazon EBS 後端 AMI
-
從 Amazon EBS 後端 AMI 啟動 Amazon Linux 執行個體。如需詳細資訊,請參閱使用主控台中的啟動執行個體精靈,啟動 EC2 執行個體。Amazon Linux 執行個體已預先安裝 AWS CLI 和 AMI 工具。
-
請將您用來組合執行個體後端 AMI 的 X.509 私有金鑰上傳至您的執行個體。此金鑰是用來確定只有您與 Amazon EC2 可存取您的 AMI。
-
在執行個體上為 X.509 私有金鑰建立如下的暫時目錄:
[ec2-user ~]$
mkdir /tmp/cert
-
使用 scp 等安全複製工具從電腦上將 X.509 私有金鑰複製到執行個體上的
/tmp/cert
目錄內。以下命令中的my-private-key
參數為用來透過 SSH 連接執行個體的私有金鑰。例如:you@your_computer:~ $
scp -i
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00my-private-key
.pem/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com
:/tmp/cert/
-
-
設定環境變數以使用 AWS CLI。如需詳細資訊,請參閱環境變數。
-
(建議) 為您的 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
為您的 AWS 存取金鑰和私密金鑰設定環境變數。
[ec2-user ~]$
export AWS_ACCESS_KEY_ID=
your_access_key_id
[ec2-user ~]$
export AWS_SECRET_ACCESS_KEY=
your_secret_access_key
-
-
為新的 AMI 準備 Amazon Elastic Block Store (Amazon EBS) 磁碟區。
-
使用 create-volume
命令在與您執行個體相同的可用區域中建立空的 EBS 磁碟區。記下命令輸出中的磁碟區 ID。 重要
此 EBS 磁碟區的大小必須等於或大於原本的執行個體存放區根磁碟區。
[ec2-user ~]$
aws ec2 create-volume --size 10 --region
us-west-2
--availability-zoneus-west-2b
-
使用 attach-volume
命令將磁碟區連接到您的 Amazon EBS 後端執行個體。 [ec2-user ~]$
aws ec2 attach-volume --volume-id
volume_id
--instance-idinstance_id
--device /dev/sdb --regionus-west-2
-
-
建立您的 bundle 資料夾。
[ec2-user ~]$
mkdir /tmp/bundle
-
使用
/tmp/bundle
命令將執行個體後端 AMI 的 bundle 下載至 ec2-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 -
使用 ec2-unbundle 命令從 bundle 重新建構映像檔。
-
將目錄變更為 bundle 資料夾。
[ec2-user ~]$
cd /tmp/bundle/
-
執行 ec2-unbundle 命令。
[ec2-user bundle]$
ec2-unbundle -m image.manifest.xml --privatekey
/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-
-
從解開映像將檔案複製到新的 EBS 磁碟區。
[ec2-user bundle]$
sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
-
探測磁碟區中是否有任何解開的新分割區。
[ec2-user bundle]$
sudo partprobe /dev/sdb1
-
列出區塊型儲存設備,以找出要掛載的設備名稱。
[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
(沒有設備分割區尾碼)。 -
為新的 EBS 磁碟區建立掛載點,然後掛載磁碟區。
[ec2-user bundle]$
sudo mkdir /mnt/ebs
[ec2-user bundle]$sudo mount
/dev/sdb1
/mnt/ebs -
用您偏好的文字編輯器 (例如
/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
在此範例中,應該移除最後一行。
-
卸載磁碟區,並從執行個體分離。
[ec2-user bundle]$
sudo umount /mnt/ebs
[ec2-user bundle]$
aws ec2 detach-volume --volume-id
volume_id
--regionus-west-2
-
從新的 EBS 磁碟區建立 AMI,如下所示。
-
建立新 EBS 磁碟區的快照。
[ec2-user bundle]$
aws ec2 create-snapshot --region
us-west-2
--description "your_snapshot_description
" --volume-idvolume_id
-
檢查快照是否完整。
[ec2-user bundle]$
aws ec2 describe-snapshots --region
us-west-2
--snapshot-idsnapshot_id
-
使用 describe-images 命令找出原始 AMI 的處理器架構、虛擬化類型與核心映像 (
aki
)。在此步驟中,您需要擁有原始執行個體後端 AMI 的 AMI ID。[ec2-user bundle]$
aws ec2 describe-images --region
IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3
--image-idus-west-2
ami-id
--output textami-8ef297be
amazon available public machine aki-fc8f11cc instance-store paravirtual xen在此範例中,其架構為
x86_64
,核心映像 ID 為aki-fc8f11cc
。請將這些數值使用在下列步驟。如果上述命令的輸出也列出ari
ID,請將其記下。 -
使用新 EBS 磁碟區的快照 ID 和先前步驟中的數值登錄您的新 AMI。如果先前的命令輸出列出
ari
ID,請用--ramdisk-id
將其加入到下列命令。ari_id
[ec2-user bundle]$
aws ec2 register-image --region
us-west-2
--nameyour_new_ami_name
--block-device-mappings DeviceName=device-name
,Ebs={SnapshotId=snapshot_id
} --virtualization-type paravirtual --architecture x86_64 --kernel-idaki-fc8f11cc
--root-device-namedevice-name
-
-
(選用) 確認可以從新 AMI 啟動執行個體後,您便能刪除為此程序建立的 EBS 磁碟區。
aws ec2 delete-volume --volume-id
volume_id