EC2インスタンス自身に設定されたタグを取得する
EC2インスタンスから「http://169.254.169.254/latest/meta-data/
」にアクセスすることで
呼び出し元インスタンスのメタ情報が取得出来ますが(参考)
aws-java-sdkに見当たらなかったので自分で作ってみた。
package jp.yustam.aws.ec2.util; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.io.IOUtils; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.DescribeTagsRequest; import com.amazonaws.services.ec2.model.DescribeTagsResult; import com.amazonaws.services.ec2.model.Filter; import com.amazonaws.services.ec2.model.TagDescription; public class EC2Metadata { private static final String METADATA_URL = "http://169.254.169.254/latest/meta-data/"; public List<TagDescription> getTags(AmazonEC2Client client) throws IOException { List<Filter> filters = new ArrayList<Filter>(); String instanceId = readResource("instance-id"); filters.add(new Filter("resource-id", Arrays.asList(instanceId))); DescribeTagsResult tags = client.describeTags(new DescribeTagsRequest(filters)); return tags.getTags(); } private String readResource(String resourcePath) throws IOException { URL url = new URL(METADATA_URL + resourcePath); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(1000 * 2); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.connect(); InputStream response = connection.getInputStream(); String resource = IOUtils.toString(response); IOUtils.closeQuietly(response); return resource; } }
実行してみる
List<TagDescription> tags = new EC2Metadata().getTags(ec2client); for (TagDescription tag : tags) { System.out.println("[TAG]\t" + tag.getKey() + "\t" + tag.getValue()); }
結果
[TAG] Name WebServer001 [TAG] Config CustomTagTest [TAG] aws:autoscaling:groupName as-group-001
これを使えばEC2タグの設定によって動作を変えることができる。