今回はAMI(Amazon Machine Image)のリストを取得します。
以下サンプルコード
/* *amazonEC2ClientはAmazonEC2Clientのインスタンスという前提 */ //AMI抽出の条件 DescribeImagesRequest describeImagesRequest = new DescribeImagesRequest(); ListownersList = 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)監修のもと掲載しています。
元記事は、こちら