Amazon EC2の機能を詳しく見てみる(3)--インスタンスデータとAMI

小田逸郎(VA Linux Systems Japan)
2009-05-25 12:00:00
  • このエントリーをはてなブックマークに追加

Amazon Machine Image(AMI)

 Amazon Machine Image(AMI)とは、単純に言ってしまうとルートパーティション(ルートファイルシステム)のイメージ(以降、ルートイメージ)です。もう少し詳細には、manifestファイルと圧縮・暗号化・分割されたルートパーティションのイメージからなります。

 manifestファイルはXML形式のファイルで、AMIに関する各種情報が入っています。

 ec2-describe-imagesコマンドでAMIの一覧が出てきます。以下は実行例です。

# ec2-describe-images -o amazon
...
IMAGE   ami-d1ca2db8    aws-toolkit-for-eclipse-amis-us/haproxy-v1.0.2.manifest.xml     amazon  available     public          i386    machine aki-a71cf9ce    ari-a51cf9cc
IMAGE   ami-11ca2d78    aws-toolkit-for-eclipse-amis-us/tomcat-v1.0.0.manifest.xml      amazon  available     public          i386    machine aki-a71cf9ce    ari-a51cf9cc
IMAGE   ami-2c5fba45    ec2-public-images/demo-paid-AMI-v1.07.manifest.xml      amazon  available    public   A79EC0DB        i386    machine
IMAGE   ami-bd9d78d4    ec2-public-images/demo-paid-AMI.manifest.xml    amazon  available       publicA79EC0DB        i386    machine
IMAGE   ami-2f5fba46    ec2-public-images/developer-image-i386-v1.07.manifest.xml       amazon  available     public          i386    machine
IMAGE   ami-26b6534f    ec2-public-images/developer-image.manifest.xml  amazon  available       publici386    machine
IMAGE   ari-a51cf9cc    ec2-public-images/ec2-initrd-2.6.21.7-2.fc8xen.i386.manifest.xml        amazonavailable       public          i386    ramdisk
IMAGE   ari-b31cf9da    ec2-public-images/ec2-initrd-2.6.21.7-2.fc8xen.x86_64.manifest.xml      amazonavailable       public          x86_64  ramdisk
IMAGE   aki-a71cf9ce    ec2-public-images/ec2-vmlinuz-2.6.21.7-2.fc8xen.i386.manifest.xml       amazonavailable       public          i386    kernel
IMAGE   aki-b51cf9dc    ec2-public-images/ec2-vmlinuz-2.6.21.7-2.fc8xen.x86_64.manifest.xml     amazonavailable       public          x86_64  kernel
...

 3カラム目がmanifestファイルで、Amazon S3システムでの格納場所を示しています。ルートイメージは同じバケットに格納されています。

 ec2-describe-imagesで表示されるイメージには3種類あって、「ami-」で始まるのが AMIで、その他に「aki-」で始まるカーネル、「ari-」で始まるramdisk(initrd)があります。

 実は、AMIの中のルートイメージには、カーネル、initrdは含まれません。カーネルとinitrdは別に指定します。通常、インスタンスの起動時には、AMIしか指定しませんが、それは、manifestファイルの中にカーネルとinitrdのIDが指定されているからです。また、指定されていなければ、プラットフォームごとに用意されているデフォルトのカーネルとinitrdが使用されます。

 AMIの形式は、ドキュメントとして公開されていません。ただし、AMIの作成ツールは、オープンソースで提供されているため、ソースコードを読めば、一応仕様を知ることはできます。

 ルートイメージを暗号化するために使用したキーは、manifestファイルに入っています。もちろん、このキー自体が暗号化されていますが、Amazon EC2 の公開鍵で暗号化したものと、AMIの作成者の公開鍵で暗号化したものの2つが入っています。そのため、Amazon EC2システム、または、AMIの作成者だけが復号できるということになります。

 AMIの実行については、プライベートかパブリックが指定できます。パブリックを指定すると誰でも実行できます。プライベートの指定では、基本的には作成者のみ実行できますが、実行できるユーザーのリストを設定することもできます。

 AMIの作成は、通常、既存のAMIをベースとして行います。既存のAMIを使用してインスタンスを起動し、必要なパッケージやプログラムの追加、構成ファイルの変更・追加を行った上で、インスタンス上で、ec2-bundle-volコマンドツールを使用して作成します。

 AMIの作成は、ルートイメージを用意すれば出来ますが、いろいろな構成ファイルをAmazon EC2に合わせる必要があったり、カーネルに対応したカーネルモジュールを用意したりと面倒が多いので、既存のAMIから作成した方が無難です。

 なお、Windows用のAMIの作成手順は、Linuxのものとは異なっています。詳細は、Developer Guide(PDFファイル)を参照してください。

 さて、カーネルやinitrdの作成や登録はどうすればよいのでしょうか。実は、通常のユーザーはそれを行うことができません。つまり、ユーザーが、カーネルをカスタマイズすることはできないのです。従って、残念ながらカーネルの開発環境として、Amazon EC2を使用することはできません。

 参考までに、LinuxのAMI用に用意されているカーネルは準仮想化カーネルが使用されています。仮想化ソフトとしてはXenを使用していると述べましたが、そのバージョンレベルなど、詳細が公開されているわけではありませんので、ユーザーが自由に作成できないのはある意味当然です。

 Amazon EC2互換システムを作成する際には、AMIの仕様が公開されていない部分をどう実装するかが問題になりそうです。

筆者紹介

VA Linux Systems Japan 高橋浩和・小田逸郎・箕浦真(MAIL
各種OS、仮想化、Linux Kernelおよびオープンソースにおける高度な技術と経験を基盤とした、技術コンサルティング、開発、インテグレーションとソフトウェアソリューションを提供。VA Linuxは、2000年9月に設立され、Linux Kernelや仮想化に関するグローバルレベルの技術力をベースにLinuxおよびオープンソース業界を牽引する中核企業として成長を続けている。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]