Spring Cloud AWS – EC2

1. EC2 Metadata Access

The AWS EC2MetadataUtils class provides static methods to access instance metadata like AMI Id and instance type. With Spring Cloud AWS we can inject this metadata directly using the @Value annotation.

This can be enabled by adding the @EnableContextInstanceData annotation over any of the configuration classes:

@Configuration
@EnableContextInstanceData
public class EC2EnableMetadata {
    //
}

In a Spring Boot environment, instance metadata is enabled by default which means this configuration is not required.

Then, we can inject the values:

@Value("${ami-id}")
private String amiId;

@Value("${hostname}")
private String hostname;

@Value("${instance-type}")
private String instanceType;

@Value("${services/domain}")
private String serviceDomain;

1.1. Custom Tags

Additionally, Spring also supports injection of user-defined tags. We can enable this by defining an attribute user-tags-map in context-instance-data using the following XML configuration:

<beans...>
    <aws-context:context-instance-data user-tags-map="instanceData"/>
</beans>

Now, let’s inject the user-defined tags with the help of Spring expression syntax:

@Value("#{instanceData.myTagKey}")
private String myTagValue;

2. EC2 Client

Furthermore, if there are user tags configured for the instance, Spring will create an AmazonEC2 client which we can inject into our code using @Autowired:

@Autowired
private AmazonEC2 amazonEc2;

Please note that these features work only if the app is running on an EC2 instance.

3. Conclusion

This was a quick and to-the-point introduction to accessing EC2d data with Spring Cloud AWS.

In the next article of the series, we’ll explore the RDS support.

As usual, the examples are available over on GitHub.

Related posts:

Java Program to Implement Affine Cipher
The Registration Process With Spring Security
Returning Custom Status Codes from Spring Controllers
Giới thiệu về Stream API trong Java 8
Posting with HttpClient
Spring Boot Configuration with Jasypt
Java 9 Stream API Improvements
Java Program to Find Transitive Closure of a Graph
Instance Profile Credentials using Spring Cloud
Vòng lặp for, while, do-while trong Java
Java Program to Implement Floyd-Warshall Algorithm
Tạo ứng dụng Java RESTful Client với thư viện OkHttp
Java Program to Implement LinkedHashSet API
How to Replace Many if Statements in Java
Spring RestTemplate Request/Response Logging
Hướng dẫn Java Design Pattern – Strategy
An Intro to Spring Cloud Task
Java Program to Implement Wagner and Fisher Algorithm for online String Matching
Encode/Decode to/from Base64
Java Program to Find Location of a Point Placed in Three Dimensions Using K-D Trees
Hướng dẫn sử dụng Printing Service trong Java
Java Byte Array to InputStream
Java Program to Find Number of Articulation points in a Graph
Reading an HTTP Response Body as a String in Java
Custom Thread Pools In Java 8 Parallel Streams
Spring Cloud Series – The Gateway Pattern
Guide to Java OutputStream
How to Get a Name of a Method Being Executed?
Java Program to Find the Longest Path in a DAG
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Guide to CopyOnWriteArrayList
Java Program to find the maximum subarray sum O(n^2) time(naive method)