Repository: wazcov/AWS-Java-Samples Branch: master Commit: 0bed7a44a3a4 Files: 14 Total size: 34.9 KB Directory structure: gitextract_0r1yyh5a/ ├── .gitignore ├── README.md ├── pom.xml └── src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── wazcov/ │ │ └── awsJavaSamples/ │ │ ├── AwsShared/ │ │ │ └── AWSSharedUtils.java │ │ ├── V1SDK/ │ │ │ ├── Lambda/ │ │ │ │ └── Lambda_Start.java │ │ │ ├── RDS/ │ │ │ │ └── RDS_Start.java │ │ │ ├── SES/ │ │ │ │ └── SES_Start.java │ │ │ ├── SM/ │ │ │ │ └── SM_Start.java │ │ │ ├── SNS/ │ │ │ │ └── SNS_Start.java │ │ │ └── SQS/ │ │ │ └── SQS_Start.java │ │ └── V2SDK/ │ │ ├── S3/ │ │ │ └── S3_Start.java │ │ └── SM/ │ │ └── SM_Start.java │ └── resources/ │ └── publicKeyFile └── test/ └── java/ └── CredentialsTest.java ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .idea/ target/ *.iml .DS_Store # Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* ================================================ FILE: README.md ================================================ # AWS Java Samples A repository of basic AWS samples to get you started connecting to various AWS Services using the V1 and V2 SDKs. ## Assumptions: Much of this code is intentionally not commented, as variables and methods are named in such a way that it should be fairly straightforward to understand what is happening. This does assume a basic knowledge of Java. This also assumes you have created an AWS account. Basic information on what you need to do in the UI is documented in each of the samples. ## Important: Remember to add your own credentials into the AWS Shared package ([how-to](https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/)). You can run the test [InitTest](src/test/java/InitTest.java) to confirm that you have at least changed all the values (although it does not validate them). Each section contains a brief comment detailing the steps you need to take in the AWS Web UI to get set up. The program won't run unless you do these tasks. ## SDK V1 Samples (V1 Is still supported and widely used): * [Amazon SQS - Simple Queue Service](src/main/java/com/waynecovell/awsJavaSamples/V1SDK/SQS/SQS_Start.java) * [Amazon SNS - Simple Notification Service](src/main/java/com/waynecovell/awsJavaSamples/V1SDK/SNS/SNS_Start.java) * [Amazon SES - Simple Email Service](src/main/java/com/waynecovell/awsJavaSamples/V1SDK/SES/SES_Start.java) * [Amazon RDS - Relational Database Service](src/main/java/com/waynecovell/awsJavaSamples/V1SDK/RDS/RDS_Start.java) * [Amazon SM - Secrets Manager](src/main/java/com/waynecovell/awsJavaSamples/V1SDK/SM/SM_Start.java) ## SDK V2 Samples: * [Amazon SM - Secrets Manager](src/main/java/com/waynecovell/awsJavaSamples/V2SDK/SM/SM_Start.java) * [Amazon S3 - S3](src/main/java/com/waynecovell/awsJavaSamples/V2SDK/S3/S3_Start.java) ## Don't forget to star this repository if you find it useful :-) ================================================ FILE: pom.xml ================================================ 4.0.0 com.infinityworks.wayne aws-sample jar 1.0-SNAPSHOT org.apache.maven.plugins maven-compiler-plugin 8 8 AWS Samples http://maven.apache.org software.amazon.awssdk bom 2.5.25 pom import org.postgresql postgresql 42.2.5 org.springframework spring-jdbc 5.0.8.RELEASE junit junit 4.11 test software.amazon.awssdk secretsmanager software.amazon.awssdk s3 com.amazonaws amazon-sqs-java-messaging-lib 1.0.4 jar com.amazonaws aws-lambda-java-events 1.3.0 com.amazonaws aws-java-sdk-s3 1.11.534 com.amazonaws aws-java-sdk-rds 1.11.327 com.amazonaws aws-java-sdk-ses 1.11.327 com.amazonaws aws-java-sdk-sns 1.11.327 com.amazonaws aws-java-sdk-secretsmanager 1.11.327 ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/AwsShared/AWSSharedUtils.java ================================================ package com.wazcov.awsJavaSamples.AwsShared; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.regions.Regions; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; /* Enter your own credentials here */ public class AWSSharedUtils { public static Regions region = Regions.EU_WEST_1; //e.g Regions.US_EAST_1; public static String receiverEmailAddress = "XXX"; public static String accessKey = "xxx"; public static String secretKey = "xxx"; //V1 SDK public static BasicAWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey); //V2 SDK public static AwsBasicCredentials basicCredentials = AwsBasicCredentials.create(accessKey, secretKey); } ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/Lambda/Lambda_Start.java ================================================ package com.wazcov.awsJavaSamples.V1SDK.Lambda; import com.amazonaws.services.lambda.runtime.events.S3Event; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import java.net.URLDecoder; /* This is an example function for processing data from an S3 Bucket in AWS Lambda. 1) Upload a .jar file containing a class like this one to AWS Lambda. 2) Set an S3 Trigger of "Event type: ObjectCreated" TODO: Add infrastructure code to build this 3) Set the Handler to match "com.wazcov.awsJavaSamples.V1SDK.Lambda.Lambda_Start::testCode" 4) Upload a file with text in it to S3 5) Check CloudWatch logs for the System.out statements */ public class Lambda_Start { public static void testCode(S3Event s3Event) throws Exception { StringBuilder stringBuilder = new StringBuilder(); s3Event.getRecords().forEach(e -> { try { String bucket = e.getS3().getBucket().getName(); String key = e.getS3().getObject().getKey().replace('+', ' '); key = URLDecoder.decode(key, "UTF-8"); AmazonS3 s3Client = AmazonS3Client.builder().build(); s3Client.getObjectAsString(bucket, key); stringBuilder.append(s3Client.getObjectAsString(bucket, key)); } catch (Exception ex) { System.out.println(ex.toString()); } }); } } ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/RDS/RDS_Start.java ================================================ package com.wazcov.awsJavaSamples.V1SDK.RDS; import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.services.rds.AmazonRDS; import com.amazonaws.services.rds.AmazonRDSClientBuilder; import com.amazonaws.services.rds.model.CreateDBInstanceRequest; import com.amazonaws.services.rds.model.DBInstance; import com.amazonaws.services.rds.model.DescribeDBInstancesResult; import com.amazonaws.services.rds.model.Endpoint; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.List; import java.util.UUID; public class RDS_Start { /* To Use AWS com.waynecovell.awsJavaSamples.V1SDK.RDS, you need to ensure you have the following: - A user created in AWS IAM - Appropriate user, region, etc details updated in in AWSSharedUtils - AmazonRDSFullAccess Group assigned to that user in IAM */ private static AmazonRDS client; private static Statement statement; private static Connection connection; private static String jdbcUrl; public static void main(String[] args) throws IOException { try { DriverManager.registerDriver(new org.postgresql.Driver()); connectToAwsRds(); createDatabase(); /* If we run the following commands straight away, it returns a null database so we must run the create script, then the others a few minutes afterwards */ /* TODO You currently have to edit the default VPC to allow traffic from anywhere on all ports. There should be a way to do this programmatically */ /* listDatabases(); createDatabaseTable(); insertDatabaseData(); validateDatabaseData();*/ } catch (Exception e) { System.out.println("Problem managing database " + e.toString()); e.printStackTrace(); } } private static void connectToAwsRds() { client = AmazonRDSClientBuilder .standard() .withCredentials(new AWSStaticCredentialsProvider(AWSSharedUtils.creds)) .withRegion(AWSSharedUtils.region).build(); } private static void listDatabases() { //When listing, make sure you are using the region where you created the database, by editing it in AWSSharedUtils DescribeDBInstancesResult result = client.describeDBInstances(); List instances = result.getDBInstances(); DBInstance instance = instances.get(0); //If you have multiple databases, this just gets the first one // Information about each com.waynecovell.awsJavaSamples.V1SDK.RDS instance String identifier = instance.getDBInstanceIdentifier(); String engine = instance.getEngine(); String status = instance.getDBInstanceStatus(); Endpoint endpoint = instance.getEndpoint(); engine += engine == "postgres" ? "ql" : ""; //The JDBC connection string needs "postgresql" yet amazon just return "postgres" jdbcUrl = "jdbc:" + engine + "ql://" + endpoint.getAddress() + ":" + endpoint.getPort() + "/" + identifier; System.out.println("Database exists: " + jdbcUrl); } private static void validateDatabaseData() throws Exception { String sql = "SELECT count(*) as count FROM awstest"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { String count = resultSet.getString("count"); System.out.println("Total Records: " + count); } System.out.println("Validated database data"); } private static void insertDatabaseData() throws Exception { PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO awstest (content) VALUES (?)"); String content = "" + UUID.randomUUID(); preparedStatement.setString(1, content); preparedStatement.executeUpdate(); System.out.println("Inserted database data"); } private static void createDatabaseTable() throws Exception { connection = DriverManager.getConnection(jdbcUrl, "fred", "fredfred123"); statement = connection.createStatement(); String sql = "CREATE TABLE IF NOT EXISTS awstest (id SERIAL PRIMARY KEY, content VARCHAR(80))"; statement.executeUpdate(sql); System.out.println("Added db table"); } private static void createDatabase() { CreateDBInstanceRequest request = new CreateDBInstanceRequest(); request.setDBInstanceIdentifier("awsjava"); request.setDBInstanceClass("db.t2.micro"); request.setEngine("postgres"); request.setMultiAZ(false); request.setPort(5432); request.setMasterUsername("fred"); request.setMasterUserPassword("fredfred123"); request.setDBName("awsjava"); request.setStorageType("gp2"); request.setAllocatedStorage(10); client.createDBInstance(request); System.out.println("Created database"); } } ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/SES/SES_Start.java ================================================ package com.wazcov.awsJavaSamples.V1SDK.SES; import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.services.simpleemail.AmazonSimpleEmailService; import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder; import com.amazonaws.services.simpleemail.model.Body; import com.amazonaws.services.simpleemail.model.Content; import com.amazonaws.services.simpleemail.model.Destination; import com.amazonaws.services.simpleemail.model.Message; import com.amazonaws.services.simpleemail.model.SendEmailRequest; import java.io.IOException; public class SES_Start { /* To Use AWS com.waynecovell.awsJavaSamples.V1SDK.SES, you need to ensure you have the following: - A user created in AWS IAM - Appropriate user, region, etc details updated in in AWSSharedUtils - AmazonSESFullAccess Group assigned to that user in IAM - Two valid, email addresses, both verified in AWS com.waynecovell.awsJavaSamples.V1SDK.SES - A valid configuration set, created in AWS com.waynecovell.awsJavaSamples.V1SDK.SES ( I selected CloudWatch with a tag of a:1) */ private static final String fromAddress = "wayne.covell@infinityworks.com"; private static final String toAddress = AWSSharedUtils.receiverEmailAddress; private static final String configSet = "MyConfig"; private static final String subject = "Amazon com.waynecovell.awsJavaSamples.V1SDK.SES test (AWS SDK for Java)"; private static final String htmlBody = "

Amazon com.waynecovell.awsJavaSamples.V1SDK.SES test (AWS SDK for Java)

" + "

This email was sent with " + "Amazon com.waynecovell.awsJavaSamples.V1SDK.SES using the " + "AWS SDK for Java"; private static final String nonHtmlClientBody = "This email was sent through Amazon com.waynecovell.awsJavaSamples.V1SDK.SES " + "using the AWS SDK for Java."; public static void main(String[] args) throws IOException { try { AmazonSimpleEmailService client = AmazonSimpleEmailServiceClientBuilder .standard() .withCredentials(new AWSStaticCredentialsProvider(AWSSharedUtils.creds)) .withRegion(AWSSharedUtils.region).build(); SendEmailRequest request = new SendEmailRequest() .withDestination( new Destination().withToAddresses(toAddress)) .withMessage(new Message() .withBody(new Body() .withHtml(new Content() .withCharset("UTF-8").withData(htmlBody)) .withText(new Content() .withCharset("UTF-8").withData(nonHtmlClientBody))) .withSubject(new Content() .withCharset("UTF-8").withData(subject))) .withSource(fromAddress) .withConfigurationSetName(configSet); client.sendEmail(request); System.out.println("Email sent!"); } catch (Exception ex) { System.out.println("The email was not sent. Error message: " + ex.getMessage()); } } } ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/SM/SM_Start.java ================================================ package com.wazcov.awsJavaSamples.V1SDK.SM; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.services.secretsmanager.AWSSecretsManager; import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder; import com.amazonaws.services.secretsmanager.model.CreateSecretRequest; import com.amazonaws.services.secretsmanager.model.GetSecretValueRequest; import com.amazonaws.services.secretsmanager.model.GetSecretValueResult; import com.amazonaws.services.secretsmanager.model.ListSecretsRequest; import com.amazonaws.services.secretsmanager.model.ListSecretsResult; import com.amazonaws.util.IOUtils; import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils; import java.io.InputStream; import java.nio.ByteBuffer; import java.security.KeyFactory; import java.security.PublicKey; import java.security.spec.X509EncodedKeySpec; public class SM_Start { private static final String region = "us-east-2"; private static AWSSecretsManager client = null; private static final String STRING_KEY_NAME = "StringKeyX"; private static final String BINARY_FILE_KEY_NAME = "FileKeyX"; public static void main(String[] args) { SM_Start secretsManagerApplication = new SM_Start(); try { secretsManagerApplication.setupSecretManager(); //Example Storing Key String secretsManagerApplication.createSecretString(); secretsManagerApplication.getSecretStringValue(); //Example Storing Key Binary secretsManagerApplication.createSecretFromFile(); secretsManagerApplication.getSecretFileValue(); } catch (Exception e) { e.printStackTrace(); } } private void setupSecretManager() { client = AWSSecretsManagerClientBuilder.standard() .withRegion(region) .withCredentials(new AWSStaticCredentialsProvider(AWSSharedUtils.creds)) .build(); } private void createSecretString() { CreateSecretRequest createSecretRequest = new CreateSecretRequest().withName(STRING_KEY_NAME).withSecretString("Hello World"); client.createSecret(createSecretRequest); System.out.println("Stored Secret String"); } private void getSecretStringValue() { ListSecretsRequest listSecretsRequest = new ListSecretsRequest(); ListSecretsResult secretsResult = client.listSecrets(listSecretsRequest); secretsResult.getSecretList().forEach(e -> System.out.println("Retrieved: " + e.getName())); GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest().withSecretId(STRING_KEY_NAME); GetSecretValueResult secretValueResult = client.getSecretValue(getSecretValueRequest); String secretString = secretValueResult.getSecretString(); System.out.println("Retrieved String Value: " + secretString); } private void createSecretFromFile() throws Exception { InputStream publicKeyStream = this.getClass().getClassLoader().getResourceAsStream("publicKeyFile"); byte[] targetArray = IOUtils.toByteArray(publicKeyStream); ByteBuffer secretBinaryByteBuffer = ByteBuffer.wrap(targetArray); CreateSecretRequest createSecretRequest = new CreateSecretRequest().withName(BINARY_FILE_KEY_NAME).withSecretBinary(secretBinaryByteBuffer); client.createSecret(createSecretRequest); System.out.println("Stored Secret File"); } private void getSecretFileValue() throws Exception { GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest().withSecretId(BINARY_FILE_KEY_NAME); GetSecretValueResult secretValueResult = client.getSecretValue(getSecretValueRequest); ByteBuffer secretBinaryByteBuffer = secretValueResult.getSecretBinary(); byte[] bytes = new byte[secretBinaryByteBuffer.capacity()]; secretBinaryByteBuffer.get(bytes, 0, bytes.length); X509EncodedKeySpec spec = new X509EncodedKeySpec(bytes); KeyFactory kf = KeyFactory.getInstance("RSA"); PublicKey binary = kf.generatePublic(spec); System.out.println("Retrieved Secret Binary:"); System.out.println(binary.toString()); } } ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/SNS/SNS_Start.java ================================================ package com.wazcov.awsJavaSamples.V1SDK.SNS; import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.AmazonSNSClient; import com.amazonaws.services.sns.model.CreateTopicRequest; import com.amazonaws.services.sns.model.CreateTopicResult; import com.amazonaws.services.sns.model.PublishRequest; import com.amazonaws.services.sns.model.PublishResult; import com.amazonaws.services.sns.model.SubscribeRequest; public class SNS_Start { /* To Use AWS com.waynecovell.awsJavaSamples.V1SDK.SNS, you need to ensure you have the following: - A user created in AWS IAM - Appropriate user, region, etc details updated in in AWSSharedUtils - AmazonSNSFullAccess Group assigned to that user in IAM - A valid email address, specified below (after subscribing you have to confirm with your email) Create A Topic method shows how one could create a topic programmatically, however you could create this in the AWS UI and hard-code it. */ private static AmazonSNS amazonSNSClient = null; public static void main(String[] args) { openSNSConnection(); String arn = createATopic(); subscribeToATopic(arn); publishToATopic(arn); } public static void openSNSConnection() { BasicAWSCredentials creds = AWSSharedUtils.creds; amazonSNSClient = AmazonSNSClient.builder() .withCredentials(new AWSStaticCredentialsProvider(creds)) .withRegion(AWSSharedUtils.region) .build(); } public static String createATopic() { final CreateTopicRequest createTopicRequest = new CreateTopicRequest("MyTopic"); final CreateTopicResult createTopicResponse = amazonSNSClient.createTopic(createTopicRequest); System.out.println("TopicArn:" + createTopicResponse.getTopicArn()); System.out.println("CreateTopicRequest: " + amazonSNSClient.getCachedResponseMetadata(createTopicRequest)); return createTopicResponse.getTopicArn(); } public static void subscribeToATopic(String topicArn) { final SubscribeRequest subscribeRequest = new SubscribeRequest(topicArn, "email", AWSSharedUtils.receiverEmailAddress); amazonSNSClient.subscribe(subscribeRequest); System.out.println("SubscribeRequest: " + amazonSNSClient.getCachedResponseMetadata(subscribeRequest)); System.out.println("To confirm the subscription, check your email."); } public static void publishToATopic(String topicArn) { try { Thread.sleep(30000); //You have 30 seconds to confirm the subscription in your email account }catch(InterruptedException ie){} final String msg = "If you receive this message, publishing a message to an Amazon com.waynecovell.awsJavaSamples.V1SDK.SNS topic works."; final PublishRequest publishRequest = new PublishRequest(topicArn, msg); final PublishResult publishResponse = amazonSNSClient.publish(publishRequest); System.out.println("MessageId: " + publishResponse.getMessageId()); //Now check your email for a notification } } ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/SQS/SQS_Start.java ================================================ package com.wazcov.awsJavaSamples.V1SDK.SQS; import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils; import com.amazon.sqs.javamessaging.ProviderConfiguration; import com.amazon.sqs.javamessaging.SQSConnection; import com.amazon.sqs.javamessaging.SQSConnectionFactory; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; public class SQS_Start { /* To Use AWS com.waynecovell.awsJavaSamples.V1SDK.SQS, you need to ensure you have the following: - A user created in AWS IAM - Appropriate user, region, etc details updated in in AWSSharedUtils - AmazonSQSFullAccess Group assigned to that user in IAM - A queue created in the UI for com.waynecovell.awsJavaSamples.V1SDK.SQS, with the same name used below - A region specified in AWSSharedUtils that matches the region you created the aformetnioned queue in, in AWS UI. */ private static SQSConnection connection = null; private static Session session = null; private static Queue queue = null; public static void main(String[] args) { try { openQueueConnection(); sendMessageOnAQueue(); receiveMessagesFromAQueue(); closeQueueConnection(); } catch(Exception e) { System.out.println(e.toString()); } } private static void closeQueueConnection() throws Exception { connection.close(); } public static void receiveMessagesFromAQueue() throws Exception { MessageConsumer consumer = session.createConsumer(queue); connection.start(); Message receivedMessage = consumer.receive(1000); if (receivedMessage != null) { System.out.println("Received: " + ((TextMessage) receivedMessage).getText()); } } public static void sendMessageOnAQueue() throws Exception { MessageProducer producer = session.createProducer(queue); TextMessage message = session.createTextMessage("Hello World!"); producer.send(message); System.out.println("JMS Message " + message.getJMSMessageID()); } public static void openQueueConnection() throws Exception { //Get these credentials from IAM in the AWS Web UI BasicAWSCredentials creds = AWSSharedUtils.creds; SQSConnectionFactory connectionFactory = new SQSConnectionFactory( new ProviderConfiguration(), AmazonSQSClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(creds)) .withRegion(AWSSharedUtils.region).build() ); connection = connectionFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); queue = session.createQueue("MyQueue"); } } ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/V2SDK/S3/S3_Start.java ================================================ package com.wazcov.awsJavaSamples.V2SDK.S3; import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.PutObjectRequest; import java.nio.ByteBuffer; import java.util.List; import java.util.stream.Collectors; public class S3_Start { private static final String BUCKET_NAME = "testing"; private static S3Client client = null; public static void main(String[] args) { setupS3(); createBucket(BUCKET_NAME); if (listBuckets().contains(BUCKET_NAME)) { System.out.println("Bucket Exists"); uploadToS3(BUCKET_NAME, "Sample_File.txt"); listObjectsInS3Bucket(BUCKET_NAME); } } private static void setupS3() { client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AWSSharedUtils.basicCredentials)).build(); } private static void createBucket(String bucket_name) { CreateBucketRequest createBucketRequest = CreateBucketRequest .builder() .bucket(bucket_name) .createBucketConfiguration(CreateBucketConfiguration.builder() .locationConstraint(AWSSharedUtils.region.getName()) .build()) .build(); client.createBucket(createBucketRequest); System.out.println("Created Bucket"); } private static List listBuckets() { ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder().build(); ListBucketsResponse listBucketsResponse = client.listBuckets(listBucketsRequest); List buckets = listBucketsResponse.buckets().stream().map(x -> x.name()).collect(Collectors.toList()); System.out.println("Listing Buckets"); return buckets; } private static void uploadToS3(String bucket_name, String key_name) { try { client.putObject(PutObjectRequest.builder() .bucket(bucket_name) .key(key_name) .build(), RequestBody.fromByteBuffer(ByteBuffer.wrap("Hello World".getBytes()))); System.out.println("Uploaded File"); } catch (Exception e) { e.printStackTrace(); } } private static void listObjectsInS3Bucket(String bucket_name) { ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder().bucket(bucket_name).build(); ListObjectsV2Response listObjectsV2Response; listObjectsV2Response = client.listObjectsV2(listObjectsV2Request); listObjectsV2Response.contents().stream().map(x -> x.key()).forEach(e -> System.out.println(e)); } } ================================================ FILE: src/main/java/com/wazcov/awsJavaSamples/V2SDK/SM/SM_Start.java ================================================ package com.wazcov.awsJavaSamples.V2SDK.SM; import com.amazonaws.util.IOUtils; import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient; import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest; import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest; import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse; import software.amazon.awssdk.services.secretsmanager.model.ListSecretsRequest; import software.amazon.awssdk.services.secretsmanager.model.ListSecretsResponse; import java.io.InputStream; import java.nio.ByteBuffer; import java.security.KeyFactory; import java.security.PublicKey; import java.security.spec.X509EncodedKeySpec; public class SM_Start { private static SecretsManagerClient client = null; private static final String STRING_KEY_NAME = "StringKeyX"; private static final String BINARY_FILE_KEY_NAME = "FileKeyX"; public static void main(String[] args) { SM_Start secretsManagerApplication = new SM_Start(); try { secretsManagerApplication.setupSecretManager(); //Example Storing Key String secretsManagerApplication.createSecretString(); secretsManagerApplication.getSecretStringValue(); //Example Storing Key Binary secretsManagerApplication.createSecretFromFile(); secretsManagerApplication.getSecretFileValue(); } catch (Exception e) { e.printStackTrace(); } } private void setupSecretManager() { client = SecretsManagerClient.builder().credentialsProvider(StaticCredentialsProvider.create(AWSSharedUtils.basicCredentials)).build(); } private void createSecretString() { CreateSecretRequest createSecretRequest = CreateSecretRequest.builder().name(STRING_KEY_NAME).secretString("Hello World").build(); client.createSecret(createSecretRequest); System.out.println("Stored Secret String"); } private void getSecretStringValue() { ListSecretsRequest listSecretsRequest = ListSecretsRequest.builder().build(); ListSecretsResponse listSecretsResponse = client.listSecrets(listSecretsRequest); listSecretsResponse.secretList().forEach(e -> System.out.println("Retrieved: " + e.name())); GetSecretValueRequest getSecretValueRequest = GetSecretValueRequest.builder().secretId(STRING_KEY_NAME).build(); GetSecretValueResponse secretValueResponse = client.getSecretValue(getSecretValueRequest); String secretString = secretValueResponse.secretString(); System.out.println("Retrieved String Value: " + secretString); } private void createSecretFromFile() throws Exception { InputStream publicKeyStream = this.getClass().getClassLoader().getResourceAsStream("publicKeyFile"); byte[] targetArray = IOUtils.toByteArray(publicKeyStream); ByteBuffer secretBinaryByteBuffer = ByteBuffer.wrap(targetArray); CreateSecretRequest createSecretRequest = CreateSecretRequest.builder().name(BINARY_FILE_KEY_NAME).secretBinary(SdkBytes.fromByteBuffer(secretBinaryByteBuffer)).build(); client.createSecret(createSecretRequest); System.out.println("Stored Secret File"); } private void getSecretFileValue() throws Exception { GetSecretValueRequest getSecretValueRequest = GetSecretValueRequest.builder().secretId(BINARY_FILE_KEY_NAME).build(); GetSecretValueResponse secretValueResponse = client.getSecretValue(getSecretValueRequest); ByteBuffer secretBinaryByteBuffer = secretValueResponse.secretBinary().asByteBuffer(); byte[] bytes = new byte[secretBinaryByteBuffer.capacity()]; secretBinaryByteBuffer.get(bytes, 0, bytes.length); X509EncodedKeySpec spec = new X509EncodedKeySpec(bytes); KeyFactory kf = KeyFactory.getInstance("RSA"); PublicKey binary = kf.generatePublic(spec); System.out.println("Retrieved Secret Binary:"); System.out.println(binary.toString()); } } ================================================ FILE: src/test/java/CredentialsTest.java ================================================ import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils; import org.junit.Test; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; public class CredentialsTest { /* Run this test to confirm you have changed all of the appropriate settings It doesn't check your settings are correct however. */ @Test public void checkCredsAreSet() { assertNotEquals(AWSSharedUtils.creds.getAWSAccessKeyId(), "XXX"); assertNotEquals(AWSSharedUtils.creds.getAWSSecretKey(), "XXX"); assertNotEquals(AWSSharedUtils.basicCredentials.accessKeyId(), "XXX"); assertNotEquals(AWSSharedUtils.basicCredentials.secretAccessKey(), "XXX"); assertNotEquals(AWSSharedUtils.receiverEmailAddress, "XXX"); assertNotNull(AWSSharedUtils.region); } }