將 Amazon S3 支援的 AMI 轉換為 EBS 支援的 AMI
您可將擁有的 Amazon S3 支援的 Linux AMI 轉換為 Amazon EBS 支援的 Linux AMI。
重要
您無法轉換不屬於您的 AMI。
如需將 Amazon S3 支援的 AMI 轉換為 Amazon EBS 支援的 AMI
-
從 Amazon EBS 後端 AMI 啟動 Amazon Linux 執行個體。如需更多詳細資訊,請參閱 使用主控台中的啟動執行個體精靈,啟動 EC2 執行個體。Amazon Linux 執行個體已預先安裝 AWS CLI 和 AMI 工具。
-
請將您用來組合 Amazon S3 支援的 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 -imy-private-key.pem/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pemec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/ pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 717 0.7KB/s 00:00
-
-
設定環境變數以使用 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 磁碟區的大小必須等於或大於原本的執行個體儲存體根磁碟區。
aws ec2 create-volume \ --size 10 \ --regionus-west-2\ --availability-zoneus-west-2b -
使用 attach-volume 命令將磁碟區連接到您的 Amazon EBS 後端執行個體。
aws ec2 attach-volume \ --volume-idvol-01234567890abcdef\ --instance-idi-1234567890abcdef0\ --regionus-west-2
-
-
建立您的 bundle 資料夾。
[ec2-user ~]$mkdir /tmp/bundle -
使用
/tmp/bundle命令將執行個體後端 AMI 的 bundle 下載至 ec2-download-bundle。[ec2-user ~]$ec2-download-bundle -bamzn-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-idvol-01234567890abcdef--regionus-west-2 -
從新的 EBS 磁碟區建立 AMI,如下所示。
-
建立新 EBS 磁碟區的快照。
[ec2-user bundle]$aws ec2 create-snapshot --regionus-west-2--description "your_snapshot_description" --volume-idvol-01234567890abcdef -
檢查快照是否完整。
[ec2-user bundle]$aws ec2 describe-snapshots --regionus-west-2--snapshot-idsnap-0abcdef1234567890 -
使用
aki命令找出原始 AMI 的處理器架構、虛擬化類型與核心映像 (describe-images)。在此步驟中,您需要擁有原始 Amazon S3 支援的 AMI 的 AMI ID。[ec2-user bundle]$aws ec2 describe-images --regionus-west-2--image-idami-0abcdef1234567890--output text IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3ami-8ef297beamazon available public machine aki-fc8f11cc instance-store paravirtual xen在此範例中,其架構為
x86_64,核心映像 ID 為aki-fc8f11cc。請將這些數值使用在下列步驟。如果上述命令的輸出也列出ariID,請將其記下。 -
使用新 EBS 磁碟區的快照 ID 和先前步驟中的數值登錄您的新 AMI。如果先前的命令輸出列出
ariID,請用--ramdisk-id將其加入到下列命令。ari_id[ec2-user bundle]$aws ec2 register-image --regionus-west-2--nameyour_new_ami_name--block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snap-0abcdef1234567890} --virtualization-type paravirtual --architecture x86_64 --kernel-idaki-fc8f11cc--root-device-namedevice-name
-
-
(選用) 確認可以從新 AMI 啟動執行個體後,您便能刪除為此程序建立的 EBS 磁碟區。
aws ec2 delete-volume --volume-idvol-01234567890abcdef