instance store-backed AMI を EBS-backed AMI へ変換する - Amazon Elastic Compute Cloud

instance store-backed AMI を EBS-backed AMI へ変換する

Instance Store-Backed Linux AMI は、Amazon EBS-Backed Linux AMI に変換できます。

重要

所有していない AMI を変換することはできません。

Instance Store-Backed AMI を Amazon EBS-backed AMI に変換するには
  1. Amazon EBS-backed AMI から Amazon Linux インスタンスを起動します。詳細については、コンソールのインスタンス起動ウィザードを使用して EC2 インスタンスを起動する を参照してください。Amazon Linux インスタンスには、AWS CLI および AMI ツールがプリインストールされています。

  2. Instance Store-Backed AMI をバンドルするのに使用した X.509 プライベートキーをインスタンスにアップロードします。Amazon はこのキーを使用して、お客様と Amazon EC2 だけがお客様の AMI にアクセスできるようにします。

    1. 次のように、X.509 プライベートキーのインスタンスに一時ディレクトリを作成します。

      [ec2-user ~]$ mkdir /tmp/cert
    2. scp などの安全なコピーツールを使用して、コンピュータから /tmp/cert ディレクトリに X.509 プライベートキーをコピーします。次のコマンドの my-private-key パラメータは、SSH でインスタンスに接続するために使用するプライベートキーです。例:

      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-Backed インスタンスにボリュームをアタッチします。

      [ec2-user ~]$ aws ec2 attach-volume --volume-id volume_id --instance-id instance_id --device /dev/sdb --region us-west-2
  5. バンドルのフォルダを作成します。

    [ec2-user ~]$ mkdir /tmp/bundle
  6. /tmp/bundle コマンドを使用して、Instance Store-Backe AMI のバンドルを 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
  7. ec2-unbundle コマンドを使用して、バンドルからイメージファイルを再作成します。

    1. バンドルフォルダにディレクトリを変更します。

      [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. EBS ボリュームの /etc/fstab ファイルを任意のテキストエディタ (vimnano など) で開き、インスタンスストア (エフェメラル) ボリュームのエントリがあれば削除します。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. 元の AMI で使用されたプロセッサアーキテクチャ、仮想化タイプ、カーネルイメージ (aki) を、describe-images コマンドを使用して特定します。このステップでは、元の Instance Store-Backed 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 がリストされていた場合は、その 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