今回はAMI(Amazon Machine Image)のリストを取得します。

以下サンプルコード

/*
*amazonEC2ClientはAmazonEC2Clientのインスタンスという前提
*/

//AMI抽出の条件
DescribeImagesRequest describeImagesRequest = new DescribeImagesRequest();
List ownersList = new ArrayList();

//OwnerIDを指定する ※ダミーなので注意
ownersList.add("0000000000");
describeImagesRequest.setOwners(ownersList);

//AMIのみ取得するために、Filterを定義する
ArrayList filters = new ArrayList();

Filter filter = new Filter();
filter.setName("image-type");

//machineを指定
List valueList = new ArrayList();
valueList.add("machine");
filter.setValues(valueList);

//Filterを定義
filters.add(filter);

//所持しているAMIのリストを取得
DescribeImagesResult describeImagesResult = amazonEC2Client.describeImages(describeImagesRequest);

//AMIのListを取得(Imageはcom.amazonaws.services.ec2.modelのImageクラスのこと)
List amiList = describeImagesResult.getImages();

//各AMIの中身を確認
for(Image image :amiList)
{
        //AMIのID
        Log.i("ImageId",image.getImageId());

        //AMIの名前
        Log.i("Name",image.getName());

        //AMIの詳細
        Log.i("Description",image.getDescription());

        //AMIがカーネルイメージかラムディスクイメージかマシンイメージか
        Log.i("ImageType",image.getImageType());

}

下記が、取得結果になります。

注意点として、describeImagesの引数に、条件であるDescribeImagesRequestを指定しなくても実行可能ですが、公開されているAWSのAMIすべてが取得対象となり、レスポンスが返ってこなくなったり例外が発生したりします。

AmazonEC2Clientの関数なので、アカウントとの紐付きが当然のように思いますが、AWSのコンソールにもあるように、AMIは公式のものから、各ユーザーが公開しているものまであるので条件の指定は必要になります。
今回はOwnerIDを指定して自分のアカウントのAMIを取得する形にしました。

OwnerID = 自分のアカウントIDなのですが、これはSDKから取得できるのでしょうか。

※2011年9月27日追記修正
AMIの取得といいながら、ImageTypeのFilterが入っていませんでした。
カーネルイメージ、ラムディスクである、AKIとARIも含まれてしまいます。

こちらの記事はなかの人(hiroki0907)監修のもと掲載しています。
元記事は、こちら