share facebook facebook twitter menu hatena pocket slack

2011.09.22 THU

AWS SDK for Android AMI取得編

櫛田 草平

WRITTEN BY 櫛田 草平

今回は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)監修のもと掲載しています。
元記事は、こちら

櫛田 草平

櫛田 草平

cloudpackで運用、保守、構築、夜間対応を担当しており、日々様々な課題に対応していますのでこの経験を記事にしていけたらと思います。 櫛田 草平

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。