同じセキュリティグループに属するインスタンスのリストを取得する

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

というように出力されます。
もちろん、出力形式はプログラムの中で如何様にでも変えられます。

以上!