

# Amazon S3-backed AMI を EBS-backed AMI に変換する
<a name="Using_ConvertingS3toEBS"></a>

所有している Amazon S3-backed Linux AMI は、Amazon EBS-Backed Linux AMI に変換できます。

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

**Amazon S3-backed AMI を Amazon EBS-backed AMI に変換するには**

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

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

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

      ```
      [ec2-user ~]$ mkdir /tmp/cert
      ```

   1. [scp](linux-file-transfer-scp.md) などの安全なコピーツールを使用して、コンピュータから `/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
      ```

1. 環境変数を設定して、AWS CLI を使用します。詳細については、「[環境変数](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)」を参照してください。

   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
      ```

   1. AWS アクセスキーおよびシークレットキーの環境変数を設定します。

      ```
      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id
      [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
      ```

1. 新しい AMI の Amazon エラスティックブロックストア (Amazon EBS) ボリュームを準備します。

   1. [create-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html) コマンドを使用して、インスタンスと同じアベイラビリティーゾーンに空の EBS ボリュームを作成します。コマンド出力のボリューム ID を書き留めてください。
**重要**  
 この EBS ボリュームは、元のインスタンスストアのルートボリュームと同じサイズ以上である必要があります。

      ```
      aws ec2 create-volume \
          --size 10 \
          --region us-west-2 \
          --availability-zone us-west-2b
      ```

   1. [attach-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html) コマンドを使用して、Amazon EBS-backed インスタンスにボリュームをアタッチします。

      ```
      aws ec2 attach-volume \
          --volume-id vol-01234567890abcdef \
          --instance-id i-1234567890abcdef0 \
          --region us-west-2
      ```

1. バンドルのフォルダを作成します。

   ```
   [ec2-user ~]$ mkdir /tmp/bundle
   ```

1. `/tmp/bundle` コマンドを使用して、インスタンスストアバック AMI のバンドルを [ec2-download-bundle](ami-tools-commands.md#ami-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
   ```

1. [ec2-unbundle](ami-tools-commands.md#ami-unbundle) コマンドを使用して、バンドルからイメージファイルを再作成します。

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

      ```
      [ec2-user ~]$ cd /tmp/bundle/
      ```

   1. [ec2-unbundle](ami-tools-commands.md#ami-unbundle) コマンドを実行します。

      ```
      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
      ```

1. バンドルを解除したイメージから新しい EBS ボリュームにファイルをコピーします。

   ```
   [ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
   ```

1. バンドルを解除した新しいパーティションのボリュームを調査します。

   ```
   [ec2-user bundle]$ sudo partprobe /dev/sdb1
   ```

1. ブロックデバイスの一覧を表示してマウントするデバイス名を選択してください。

   ```
   [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` に似ています (デバイスパーティションの末尾に数値なし)。

1. 新しい EBS ボリュームのマウントポイントを作成し、ボリュームをマウントします。

   ```
   [ec2-user bundle]$ sudo mkdir /mnt/ebs
   [ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
   ```

1. EBS ボリュームの `/etc/fstab` ファイルを任意のテキストエディタ (**vim** や **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
   ```

   この例では、最後の行を削除する必要があります。

1. ボリュームをアンマウントし、インスタンスからデタッチします。

   ```
   [ec2-user bundle]$ sudo umount /mnt/ebs
   [ec2-user bundle]$ aws ec2 detach-volume --volume-id vol-01234567890abcdef --region us-west-2
   ```

1. 次のように、新しい EBS ボリュームから AMI を作成します。

   1. 新しい EBS ボリュームのスナップショットを作成します。

      ```
      [ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id vol-01234567890abcdef
      ```

   1. スナップショットが完了していることを確認します。

      ```
      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snap-0abcdef1234567890
      ```

   1. 元の AMI で使用されたプロセッサアーキテクチャ、仮想化タイプ、カーネルイメージ (`aki`) を、**describe-images** コマンドを使用して特定します。このステップでは、元の Amazon S3-backed AMI の AMI ID が必要です。

      ```
      [ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-0abcdef1234567890 --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 もリストされますので、これも書き留めます。

   1. 新しい 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=snap-0abcdef1234567890} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
      ```

1. (オプション) 新しい AMI からインスタンスを起動できることをテストした後で、この手順で作成した EBS ボリュームを削除できます。

   ```
   aws ec2 delete-volume --volume-id vol-01234567890abcdef
   ```