將執行個體後端 AMI 轉換為 Amazon EBS 後端的 AMI - Amazon Elastic Compute Cloud

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

將執行個體後端 AMI 轉換為 Amazon EBS 後端的 AMI

您可將擁有的執行個體後端 Linux AMI 轉換為 Amazon EBS 後端 Linux AMI。

重要

您無法轉換您不擁有的 AMI。

將執行個體後端 AMI 轉換為 Amazon EBS 後端 AMI
  1. 從 Amazon EBS 後端 AMI 啟動 Amazon Linux 執行個體。如需詳細資訊,請參閱 使用新的啟動執行個體精靈啟動執行個體。Amazon Linux 執行個體已預先安裝 AWS CLI 和 AMI 工具。

  2. 請將您用來組合執行個體後端 AMI 的 X.509 私有金鑰上傳至您的執行個體。此金鑰是用來確定只有您與 Amazon EC2 可存取您的 AMI。

    1. 在執行個體上為 X.509 私有金鑰建立如下的暫時目錄:

      [ec2-user ~]$ mkdir /tmp/cert
    2. 使用 scp 等安全複製工具從電腦上將 X.509 私有金鑰複製到執行個體上的 /tmp/cert 目錄內。下列命令中的my-private-key參數是您用來透過安全殼層連線至執行個體的私密金鑰。例如:

      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-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
  3. 設定環境變數以使用 AWS CLI。如需詳細資訊,請參閱建立金鑰對

    1. (建議使用) 設定 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
    2. 為您的 AWS 訪問密鑰和密鑰設置環境變量。

      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
  4. 為新的 AMI 準備 Amazon Elastic Block Store (Amazon EBS) 磁碟區。

    1. 使用 create-volume 命令在與您執行個體相同的可用區域中建立空的 EBS 磁碟區。記下命令輸出中的磁碟區 ID。

      重要

      此 EBS 磁碟區的大小必須等於或大於原本的執行個體存放區根磁碟區。

      [ec2-user ~]$ aws ec2 create-volume --size 10 --region us-west-2 --availability-zone us-west-2b
    2. 使用 attach-volume 命令將磁碟區連接到您的 Amazon EBS 後端執行個體。

      [ec2-user ~]$ aws ec2 attach-volume --volume-id volume_id --instance-id instance_id --device /dev/sdb --region us-west-2
  5. 建立您的 bundle 資料夾。

    [ec2-user ~]$ mkdir /tmp/bundle
  6. 使用 /tmp/bundle 命令將執行個體後端 AMI 的 bundle 下載至 ec2-download-bundle

    [ec2-user ~]$ ec2-download-bundle -b DOC-EXAMPLE-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
  7. 使用 ec2-unbundle 命令從 bundle 重新建構映像檔。

    1. 將目錄變更為 bundle 資料夾。

      [ec2-user ~]$ cd /tmp/bundle/
    2. 執行 ec2-unbundle 命令。

      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
  8. 從解開映像將檔案複製到新的 EBS 磁碟區。

    [ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
  9. 探測磁碟區中是否有任何解開的新分割區。

    [ec2-user bundle]$ sudo partprobe /dev/sdb1
  10. 列出區塊型儲存設備,以找出要掛載的設備名稱。

    [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 (沒有設備分割區尾碼)。

  11. 為新的 EBS 磁碟區建立掛載點,然後掛載磁碟區。

    [ec2-user bundle]$ sudo mkdir /mnt/ebs [ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
  12. 用您偏好的文字編輯器 (例如 /etc/fstabvim) 在 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

    在此範例中,應該移除最後一行。

  13. 卸載磁碟區,並從執行個體分離。

    [ec2-user bundle]$ sudo umount /mnt/ebs [ec2-user bundle]$ aws ec2 detach-volume --volume-id volume_id --region us-west-2
  14. 從新的 EBS 磁碟區建立 AMI,如下所示。

    1. 建立新 EBS 磁碟區的快照。

      [ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id volume_id
    2. 檢查快照是否完整。

      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snapshot_id
    3. 使用 describe-images 命令找出原始 AMI 的處理器架構、虛擬化類型與核心映像 (aki)。在此步驟中,您需要擁有原始執行個體後端 AMI 的 AMI ID。

      [ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-id --output text IMAGES x86_64 amazon/amzn-ami-pv-2013.09.2.x86_64-s3 ami-8ef297be amazon available public machine aki-fc8f11cc instance-store paravirtual xen

      在此範例中,其架構為 x86_64,核心映像 ID 為 aki-fc8f11cc。請將這些數值使用在下列步驟。如果上述命令的輸出也列出 ari ID,請將其記下。

    4. 使用新 EBS 磁碟區的快照 ID 和先前步驟中的數值登錄您的新 AMI。如果先前的命令輸出列出 ari ID,請用 --ramdisk-id ari_id 將其加入到下列命令。

      [ec2-user bundle]$ aws ec2 register-image --region us-west-2 --name your_new_ami_name --block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snapshot_id} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
  15. (選用) 確認可以從新 AMI 啟動執行個體後,您便能刪除為此程序建立的 EBS 磁碟區。

    aws ec2 delete-volume --volume-id volume_id