Instance Store-Backed インスタンスからの AMI の作成
次の手順では、instance store-backed インスタンスから instance store-backed AMI を作成します。開始する前に、必ず「前提条件」を参照してください。
トピック
Instance Store-Backed Amazon Linux インスタンスからの AMI の作成
このセクションでは、Amazon Linux インスタンスからの AMI の作成について説明します。以下の手順は、他の Linux ディストリビューションを実行するインスタンスでは機能しない可能性があります。Ubuntu 固有の手順については、「Instance Store-Backed Ubuntu インスタンスからの AMI の作成」を参照してください。
AMI ツールの使用準備を整えるには (HVM インスタンスのみ)
-
AMI ツールでは、GRUB のレガシーが正常に起動する必要があります。次のコマンドを使用して GRUB をインストールします。
[ec2-user ~]$
sudo yum install -y grub
-
次のコマンドを使用して、パーティション管理パッケージをインストールします。
[ec2-user ~]$
sudo yum install -y gdisk kpartx parted
Instance Store-Backed Amazon Linux インスタンスから AMI を作成するには
この手順では、「前提条件」に記載された前提条件が満たされていることを前提としています。
次のコマンドでは、ユーザー入力プレースホルダー
をユーザー自身の情報で置き換えます。
-
インスタンスに認証情報をアップロードします。Amazon ではこれらの認証情報を使用して、お客様と Amazon EC2 だけがお客様の AMI にアクセスできるようにします。
-
次のように、認証情報のための一時ディレクトリをインスタンスに作成します。
[ec2-user ~]$
mkdir /tmp/cert
それにより、作成したイメージから認証情報を除外できます。
-
scp などの安全なコピーツールを使用して、コンピュータからインスタンスの
/tmp/cert
ディレクトリに X.509 証明書と対応するプライベートキーをコピーします。次の-i
コマンドの scp オプションは、X.509 プライベートキーではなく、SSH でインスタンスに接続するために使用するプライベートキーです。次に例を示します。my-private-key
.pemyou@your_computer:~ $
scp -i
my-private-key
.pem/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
/path/to/cert-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 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00
または、これらがプレーンテキストファイルの場合、証明書とキーをテキストエディタで開き、コンテンツを
/tmp/cert
の新しいファイルにコピーできます。 -
-
インスタンス内から ec2-bundle-vol コマンドを実行して、Amazon S3 にアップロードするバンドルを準備します。
-e
オプションを指定して、認証情報を保存するディレクトリを除外します。デフォルトでは、バンドルプロセスで機密情報を含んでいる可能性があるファイルを除外します。ファイルには、*.sw
、*.swo
、*.swp
、*.pem
、*.priv
、*id_rsa*
、*id_dsa*
、*.gpg
、*.jks
、*/.ssh/authorized_keys
、*/.bash_history
などがあります。これらのファイルをすべて含めるには、--no-filter
オプションを使用します。これらのファイルの一部を含めるには、--include
オプションを使用します。重要
AMI バンドルプロセスは、デフォルトで、ルートボリュームを表す
/tmp
ディレクトリに、圧縮され暗号化された一連のファイルを作成します。バンドルを格納するのに十分な空きディスク領域が/tmp
にない場合、-d
オプションを使用して、バンドルを格納する別の場所を指定する必要があります。インスタンスによっては、エフェメラルストレージが/path/to/bundle/storage
/mnt
または/media/ephemeral0
にマウントされて使用可能になっている場合があります。または、バンドルを格納する新しい Amazon EBS ボリュームを作成、アタッチ、およびマウントすることもできます。詳細については、「Amazon EBS ユーザーガイド」の「Amazon EBS ボリュームの作成」を参照してください。-
ec2-bundle-vol コマンドは、root として実行する必要があります。ほとんどのコマンドで、sudo を使用することでアクセス許可を昇格させることができますが、この場合は、環境変数を維持するために sudo -E su を実行する必要があります。
[ec2-user ~]$
sudo -E su
これで、bash プロンプトにより root ユーザーとして識別されるようになったことと、root シェルにいることを示すハッシュタグにドル記号が置き換えられたことに注意してください。
[root ec2-user]#
-
AMI のバンドルを作成するには、次のように ec2-bundle-vol コマンドを実行します。
[root ec2-user]#
ec2-bundle-vol -k /tmp/cert/
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-u123456789012
-r x86_64 -e /tmp/cert --partitiongpt
注記
中国 (北京) および AWS GovCloud (米国 – 西部) リージョンについては、
--ec2cert
パラメータを使用し、前提条件に従って証明書を指定します。イメージの作成には数分かかります。このコマンドが完了したら、
/tmp
(またはデフォルト以外の) ディレクトリにバンドルが含まれます (image.manifest.xml
、および複数のimage.part.
xx
ファイル)。 -
root シェルを終了します。
[root ec2-user]#
exit
-
-
(オプション) インスタンスストアをさらに追加するには、AMI 用の
image.manifest.xml
ファイルで、ブロックデバイスマッピングを編集します。詳細については、Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング を参照してください。-
image.manifest.xml
ファイルのバックアップを作成します。[ec2-user ~]$
sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
-
image.manifest.xml
ファイルの形式を変更し、読み取りと編集が簡単になるようにします。[ec2-user ~]$
sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
-
テキストエディタで
image.manifest.xml
のブロックデバイスマッピングを編集します。次の例は、ephemeral1
インスタンスストアボリュームの新しいエントリを示しています。注記
無効な種類のファイルの一覧については、「ec2-bundle-vol」を参照してください。
<block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping>
<mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping>
<mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping> -
image.manifest.xml
ファイルを保存し、テキストエディタを終了します。
-
-
バンドルを Amazon S3 にアップロードするには、次のように ec2-upload-bundle コマンドを実行します。
[ec2-user ~]$
ec2-upload-bundle -b
DOC-EXAMPLE-BUCKET
/bundle_folder
/bundle_name
-m /tmp/image.manifest.xml -ayour_access_key_id
-syour_secret_access_key
重要
US East (N. Virginia) 以外のリージョンで AMI を登録するには、
--region
オプションと、すでにターゲットリージョンに存在するバケットパス、またはターゲットリージョンで作成できる一意のバケットパスの両方でターゲットリージョンを指定する必要があります。 -
(オプション) バンドルを Amazon S3 にアップロードしたら、次の
/tmp
コマンドを使用して、インスタンスの rm ディレクトリからバンドルを削除できます。[ec2-user ~]$
sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
重要
-d
で ステップ 2 オプションを使用してパスを指定した場合は、/path/to/bundle/storage
/tmp
ではなくそのパスを使用します。 -
AMI を登録するには、次のように register-image コマンドを実行します。
[ec2-user ~]$
aws ec2 register-image --image-location
DOC-EXAMPLE-BUCKET
/bundle_folder
/bundle_name
/image.manifest.xml --nameAMI_name
--virtualization-typehvm
重要
ec2-upload-bundle コマンドでリージョンを以前に指定した場合は、このコマンドでもう一度そのリージョンを指定します。
Instance Store-Backed Ubuntu インスタンスからの AMI の作成
このセクションでは、インスタンスストアボリュームをルートボリュームとして使用する Ubuntu Linux インスタンスからの AMI の作成について説明します。以下の手順は、他の Linux ディストリビューションを実行するインスタンスでは機能しない可能性があります。Amazon Linux 固有の手順については、「Instance Store-Backed Amazon Linux インスタンスからの AMI の作成」を参照してください。
AMI ツールの使用準備を整えるには (HVM インスタンスのみ)
AMI ツールでは、GRUB のレガシーが正常に起動する必要があります。ただし、Ubuntu は GRUB 2 を使用するように設定されています。インスタンスで GRUB のレガシーを使用しているかどうか確認し、使用していない場合はインストールして設定する必要があります。
AMI ツールが正常に機能するためには、HVM インスタンスにパーティションツールがインストールされている必要もあります。
-
GRUB Legacy (バージョン 0.9
x
未満) をインスタンスにインストールする必要があります。GRUB Legacy が存在していることを確認し、必要な場合はインストールしてください。 -
お使いのディストリビューションのパッケージマネージャを使用して、次のパーティション管理パッケージをインストールします。
-
gdisk
(ディストリビューションによっては代わりにパッケージgptfdisk
が呼び出される場合があります)。 -
kpartx
-
parted
次のコマンドを使用します。
ubuntu:~$
sudo apt-get install -y gdisk kpartx parted
-
-
インスタンスのカーネルパラメータを確認します。
ubuntu:~$
cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.2.0-54-virtual root=UUID=4f392932-ed93-4f8f-aee7-72bc5bb6ca9d ro console=ttyS0 xen_emul_unplug=unnecessary
カーネルおよびルートデバイスのパラメータ
ro
、console=ttyS0
、およびxen_emul_unplug=unnecessary
を書き留めます。オプションは異なる場合があります。 -
/boot/grub/menu.lst
でカーネルエントリを確認してください。ubuntu:~$
grep ^kernel /boot/grub/menu.lst
kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=hvc0 kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single kernel /boot/memtest86+.bin
console
パラメータがhvc0
をポイントしている (ttyS0
ではない) こと、およびxen_emul_unplug=unnecessary
パラメータが未指定であることに注意してください。ここでも、オプションは異なる場合があります。 -
/boot/grub/menu.lst
ファイルを任意のテキストエディタで (vim や nano など) で編集して、コンソールを変更し、先ほど確認したパラメータをブートエントリに追加します。title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro
console=ttyS0 xen_emul_unplug=unnecessary
initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, kernel 3.2.0-54-virtual (recovery mode) root (hd0) kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro singleconsole=ttyS0 xen_emul_unplug=unnecessary
initrd /boot/initrd.img-3.2.0-54-virtual title Ubuntu 12.04.3 LTS, memtest86+ root (hd0) kernel /boot/memtest86+.bin -
カーネルエントリに適切なパラメータが含まれていることを確認します。
ubuntu:~$
grep ^kernel /boot/grub/menu.lst
kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/vmlinuz-3.2.0-54-virtual root=LABEL=cloudimg-rootfs ro single console=ttyS0 xen_emul_unplug=unnecessary kernel /boot/memtest86+.bin
-
(Ubuntu 14.04 以降のみ) Ubuntu 14.04 で起動する Instance Store-Backed Ubuntu AMI は GPT のパーティションテーブルおよび
/boot/efi
にマウントされた別の EFI のパーティションを使用します。ec2-bundle-vol コマンドはこの起動パーティションをバンドルしません。そのため、次の例に示すように EFI のパーティションの/etc/fstab
エントリをコメントアウトする必要があります。LABEL=cloudimg-rootfs / ext4 defaults 0 0
#
LABEL=UEFI /boot/efi vfat defaults 0 0 /dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Instance Store-Backed Ubuntu インスタンスから AMI を作成するには
この手順では、「前提条件」に記載された前提条件が満たされていることを前提としています。
次のコマンドでは、ユーザー入力プレースホルダー
をユーザー自身の情報で置き換えます。
-
インスタンスに認証情報をアップロードします。Amazon ではこれらの認証情報を使用して、お客様と Amazon EC2 だけがお客様の AMI にアクセスできるようにします。
-
次のように、認証情報のための一時ディレクトリをインスタンスに作成します。
ubuntu:~$
mkdir /tmp/cert
それにより、作成したイメージから認証情報を除外できます。
-
scp などの安全なコピーツールを使用して、コンピュータからインスタンスの
/tmp/cert
ディレクトリに X.509 証明書とプライベートキーをコピーします。次の-i
コマンドの scp オプションは、X.509 プライベートキーではなく、SSH でインスタンスに接続するために使用するプライベートキーです。次に例を示します。my-private-key
.pemyou@your_computer:~ $
scp -i
my-private-key
.pem/path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
/path/to/cert-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 cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem 100% 685 0.7KB/s 00:00
または、これらがプレーンテキストファイルの場合、証明書とキーをテキストエディタで開き、コンテンツを
/tmp/cert
の新しいファイルにコピーできます。 -
-
インスタンスから ec2-bundle-vol コマンドを実行して、Amazon S3 にアップロードするバンドルを準備します。
-e
オプションを指定して、認証情報を保存するディレクトリを除外します。デフォルトでは、バンドルプロセスで機密情報を含んでいる可能性があるファイルを除外します。ファイルには、*.sw
、*.swo
、*.swp
、*.pem
、*.priv
、*id_rsa*
、*id_dsa*
、*.gpg
、*.jks
、*/.ssh/authorized_keys
、*/.bash_history
などがあります。これらのファイルをすべて含めるには、--no-filter
オプションを使用します。これらのファイルの一部を含めるには、--include
オプションを使用します。重要
AMI バンドルプロセスは、デフォルトで、ルートボリュームを表す
/tmp
ディレクトリに、圧縮され暗号化された一連のファイルを作成します。バンドルを格納するのに十分な空きディスク領域が/tmp
にない場合、-d
オプションを使用して、バンドルを格納する別の場所を指定する必要があります。インスタンスによっては、エフェメラルストレージが/path/to/bundle/storage
/mnt
または/media/ephemeral0
にマウントされて使用可能になっている場合があります。または、バンドルを格納する新しい Amazon EBS ボリュームを作成、アタッチ、およびマウントすることもできます。詳細については、「Amazon EBS ユーザーガイド」の「Amazon EBS ボリュームの作成」を参照してください。-
ec2-bundle-vol コマンドは、root として実行する必要があります。ほとんどのコマンドで、sudo を使用することでアクセス許可を昇格させることができますが、この場合は、環境変数を維持するために sudo -E su を実行する必要があります。
ubuntu:~$
sudo -E su
これで、bash プロンプトにより root ユーザーとして識別されるようになったことと、root シェルにいることを示すハッシュタグにドル記号が置き換えられたことに注意してください。
root@ubuntu:#
-
AMI のバンドルを作成するには、次のように ec2-bundle-vol コマンドを実行します。
root@ubuntu:#
ec2-bundle-vol -k /tmp/cert/
pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
-uyour_aws_account_id
-r x86_64 -e /tmp/cert --partitiongpt
重要
Ubuntu 14.04 以降の HVM インスタンスの場合、
--partition mbr
フラグを追加して起動手順を正しくバンドルします。それ以外の場合は、新しく作成された AMI は起動しません。イメージの作成には数分かかります。このコマンドが完了したら、
tmp
ディレクトリにバンドルが含まれます (image.manifest.xml
、および複数のimage.part.
xx
ファイル)。 -
root シェルを終了します。
root@ubuntu:#
exit
-
-
(オプション) インスタンスストアをさらに追加するには、AMI 用の
image.manifest.xml
ファイルで、ブロックデバイスマッピングを編集します。詳細については、Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング を参照してください。-
image.manifest.xml
ファイルのバックアップを作成します。ubuntu:~$
sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
-
image.manifest.xml
ファイルの形式を変更し、読み取りと編集が簡単になるようにします。ubuntu:~$
sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
-
テキストエディタで
image.manifest.xml
のブロックデバイスマッピングを編集します。次の例は、ephemeral1
インスタンスストアボリュームの新しいエントリを示しています。<block_device_mapping> <mapping> <virtual>ami</virtual> <device>sda</device> </mapping> <mapping> <virtual>ephemeral0</virtual> <device>sdb</device> </mapping>
<mapping> <virtual>ephemeral1</virtual> <device>sdc</device> </mapping>
<mapping> <virtual>root</virtual> <device>/dev/sda1</device> </mapping> </block_device_mapping> -
image.manifest.xml
ファイルを保存し、テキストエディタを終了します。
-
-
バンドルを Amazon S3 にアップロードするには、次のように ec2-upload-bundle コマンドを実行します。
ubuntu:~$
ec2-upload-bundle -b
DOC-EXAMPLE-BUCKET
/bundle_folder
/bundle_name
-m /tmp/image.manifest.xml -ayour_access_key_id
-syour_secret_access_key
重要
US East (N. Virginia) 以外のリージョンで AMI を登録する予定の場合、
--region
オプションと、すでにターゲットリージョンに存在するバケットパス、またはターゲットリージョンで作成できる一意のバケットパスの両方でターゲットリージョンを指定する必要があります。 -
(オプション) バンドルを Amazon S3 にアップロードしたら、次の
/tmp
コマンドを使用して、インスタンスの rm ディレクトリからバンドルを削除できます。ubuntu:~$
sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
重要
-d
で ステップ 2 オプションを使用してパスを指定した場合、/path/to/bundle/storage
/tmp
ではなく以下と同じパスを使用します。 -
AMI を登録するには、次のように AWS CLI の register-image コマンドを実行します。
ubuntu:~$
aws ec2 register-image --image-location
DOC-EXAMPLE-BUCKET
/bundle_folder
/bundle_name
/image.manifest.xml --nameAMI_name
--virtualization-typehvm
重要
ec2-upload-bundle コマンドでリージョンを以前に指定した場合は、このコマンドでもう一度そのリージョンを指定します。
-
(Ubuntu 14.04 以降)
/etc/fstab
の EFI エントリをコメント解除します。それ以外の場合、実行中のインスタンスは再起動できません。