同じセキュリティグループに属するインスタンスのリストを取得する
Amazon EC2を使って、インスタンスを起動すると、デフォルトでは固定IPで起動しません。
固定IPでないと、そのインスタンス間で通信するときに、どのIPと通信すればよいかがわかりません。
そこで、今回は同じSecurity Groupに属するインスタンスの Public Dns Name を取得する方法を載せます。
AWS SDK を使えば、これが可能です。
AWS SDK for Javaを使ったサンプルコードが以下です。
public class SameSecurityGroupChecker { private static String SECURITY_GROUP_NAME = "Web"; public static void main(String[] args) throws IOException { //Credentials の設定 AWSCredentials credentials = new PropertiesCredentials(---省略---); //EC2 へのリクエストを作成 AmazonEC2 ec2 = new AmazonEC2Client(credentials); ec2.setEndpoint("ec2.ap-northeast-1.amazonaws.com"); //describeInstances実行 DescribeInstancesResult result = ec2.describeInstances(); List<Reservation> resList = result.getReservations(); List<String> publicDnsNameList = new ArrayList<String>(); //実行結果の取り出し for (Reservation res : resList) { List<String> securityGroupList = res.getGroupNames(); for(String securityGroupName : securityGroupList) { //Web という Security Group と名前が一致する場合は、該当する publicDnsName を追加 if(securityGroupName.equals(SECURITY_GROUP_NAME)) { List<Instance> list = res.getInstances(); for (Instance i : list) { publicDnsNameList.add(i.getPublicDnsName()); } } } } //該当するインスタンスのpublicDnsName出力 for(String publicDnsName : publicDnsNameList) { System.out.println(publicDnsName); } } }
以上のサンプルコードを実行すると、
ec2-54-248-xxx-xx.ap-northeast-1.compute.amazonaws.com ec2-176-32-xx-xx.ap-northeast-1.compute.amazonaws.com
というように出力されます。
もちろん、出力形式はプログラムの中で如何様にでも変えられます。
以上!