Full Code of wazcov/AWS-Java-Samples for AI

master 0bed7a44a3a4 cached
14 files
34.9 KB
8.2k tokens
48 symbols
1 requests
Download .txt
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
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.infinityworks.wayne</groupId>
    <artifactId>aws-sample</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <name>AWS Samples</name>
    <url>http://maven.apache.org</url>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- For AWS V2 SDK -->
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>2.5.25</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!-- AWS SDK V2 -->
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>secretsmanager</artifactId>
        </dependency>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
        </dependency>
        <!-- AWS SDK V1 -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>amazon-sqs-java-messaging-lib</artifactId>
            <version>1.0.4</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-events</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.11.534</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-rds</artifactId>
            <version>1.11.327</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-ses</artifactId>
            <version>1.11.327</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-sns</artifactId>
            <version>1.11.327</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-secretsmanager</artifactId>
            <version>1.11.327</version>
        </dependency>
    </dependencies>
</project>

================================================
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<DBInstance> 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 = "<h1>Amazon com.waynecovell.awsJavaSamples.V1SDK.SES test (AWS SDK for Java)</h1>"
            + "<p>This email was sent with <a href='https://aws.amazon.com/ses/'>"
            + "Amazon com.waynecovell.awsJavaSamples.V1SDK.SES</a> using the <a href='https://aws.amazon.com/sdk-for-java/'>"
            + "AWS SDK for Java</a>";

    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<String> listBuckets() {
        ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder().build();
        ListBucketsResponse listBucketsResponse = client.listBuckets(listBucketsRequest);
        List<String> 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);

    }
}
Download .txt
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
Download .txt
SYMBOL INDEX (48 symbols across 10 files)

FILE: src/main/java/com/wazcov/awsJavaSamples/AwsShared/AWSSharedUtils.java
  class AWSSharedUtils (line 10) | public class AWSSharedUtils {

FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/Lambda/Lambda_Start.java
  class Lambda_Start (line 19) | public class Lambda_Start {
    method testCode (line 20) | public static void testCode(S3Event s3Event) throws Exception {

FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/RDS/RDS_Start.java
  class RDS_Start (line 21) | public class RDS_Start {
    method main (line 36) | public static void main(String[] args) throws IOException {
    method connectToAwsRds (line 63) | private static void connectToAwsRds() {
    method listDatabases (line 70) | private static void listDatabases() {
    method validateDatabaseData (line 87) | private static void validateDatabaseData() throws Exception {
    method insertDatabaseData (line 97) | private static void insertDatabaseData() throws Exception {
    method createDatabaseTable (line 105) | private static void createDatabaseTable() throws Exception {
    method createDatabase (line 113) | private static void createDatabase() {

FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/SES/SES_Start.java
  class SES_Start (line 15) | public class SES_Start {
    method main (line 40) | public static void main(String[] args) throws IOException {

FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/SM/SM_Start.java
  class SM_Start (line 20) | public class SM_Start {
    method main (line 27) | public static void main(String[] args) {
    method setupSecretManager (line 47) | private void setupSecretManager() {
    method createSecretString (line 54) | private void createSecretString() {
    method getSecretStringValue (line 60) | private void getSecretStringValue() {
    method createSecretFromFile (line 72) | private void createSecretFromFile() throws Exception {
    method getSecretFileValue (line 83) | private void getSecretFileValue() throws Exception {

FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/SNS/SNS_Start.java
  class SNS_Start (line 14) | public class SNS_Start {
    method main (line 30) | public static void main(String[] args) {
    method openSNSConnection (line 37) | public static void openSNSConnection() {
    method createATopic (line 45) | public static String createATopic() {
    method subscribeToATopic (line 53) | public static void subscribeToATopic(String topicArn) {
    method publishToATopic (line 61) | public static void publishToATopic(String topicArn) {

FILE: src/main/java/com/wazcov/awsJavaSamples/V1SDK/SQS/SQS_Start.java
  class SQS_Start (line 18) | public class SQS_Start {
    method main (line 34) | public static void main(String[] args) {
    method closeQueueConnection (line 46) | private static void closeQueueConnection() throws Exception {
    method receiveMessagesFromAQueue (line 50) | public static void receiveMessagesFromAQueue() throws Exception {
    method sendMessageOnAQueue (line 59) | public static void sendMessageOnAQueue() throws Exception {
    method openQueueConnection (line 66) | public static void openQueueConnection() throws Exception {

FILE: src/main/java/com/wazcov/awsJavaSamples/V2SDK/S3/S3_Start.java
  class S3_Start (line 19) | public class S3_Start {
    method main (line 24) | public static void main(String[] args) {
    method setupS3 (line 34) | private static void setupS3() {
    method createBucket (line 38) | private static void createBucket(String bucket_name) {
    method listBuckets (line 50) | private static List<String> listBuckets() {
    method uploadToS3 (line 58) | private static void uploadToS3(String bucket_name, String key_name) {
    method listObjectsInS3Bucket (line 70) | private static void listObjectsInS3Bucket(String bucket_name) {

FILE: src/main/java/com/wazcov/awsJavaSamples/V2SDK/SM/SM_Start.java
  class SM_Start (line 20) | public class SM_Start {
    method main (line 26) | public static void main(String[] args) {
    method setupSecretManager (line 46) | private void setupSecretManager() {
    method createSecretString (line 50) | private void createSecretString() {
    method getSecretStringValue (line 56) | private void getSecretStringValue() {
    method createSecretFromFile (line 69) | private void createSecretFromFile() throws Exception {
    method getSecretFileValue (line 80) | private void getSecretFileValue() throws Exception {

FILE: src/test/java/CredentialsTest.java
  class CredentialsTest (line 7) | public class CredentialsTest {
    method checkCredsAreSet (line 15) | @Test
Condensed preview — 14 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (38K chars).
[
  {
    "path": ".gitignore",
    "chars": 310,
    "preview": ".idea/\ntarget/\n*.iml\n.DS_Store\n\n# Compiled class file\n*.class\n\n# Log file\n*.log\n\n# BlueJ files\n*.ctxt\n\n# Mobile Tools fo"
  },
  {
    "path": "README.md",
    "chars": 1883,
    "preview": "# AWS Java Samples\nA repository of basic AWS samples to get you started connecting to various AWS Services using the V1 "
  },
  {
    "path": "pom.xml",
    "chars": 3559,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n      "
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/AwsShared/AWSSharedUtils.java",
    "chars": 724,
    "preview": "package com.wazcov.awsJavaSamples.AwsShared;\n\nimport com.amazonaws.auth.BasicAWSCredentials;\nimport com.amazonaws.region"
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/V1SDK/Lambda/Lambda_Start.java",
    "chars": 1447,
    "preview": "package com.wazcov.awsJavaSamples.V1SDK.Lambda;\n\nimport com.amazonaws.services.lambda.runtime.events.S3Event;\nimport com"
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/V1SDK/RDS/RDS_Start.java",
    "chars": 5247,
    "preview": "package com.wazcov.awsJavaSamples.V1SDK.RDS;\n\nimport com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils;\nimport com.amaz"
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/V1SDK/SES/SES_Start.java",
    "chars": 3517,
    "preview": "package com.wazcov.awsJavaSamples.V1SDK.SES;\n\nimport com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils;\nimport com.amaz"
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/V1SDK/SM/SM_Start.java",
    "chars": 4248,
    "preview": "package com.wazcov.awsJavaSamples.V1SDK.SM;\n\nimport com.amazonaws.auth.AWSStaticCredentialsProvider;\nimport com.amazonaw"
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/V1SDK/SNS/SNS_Start.java",
    "chars": 3317,
    "preview": "package com.wazcov.awsJavaSamples.V1SDK.SNS;\n\nimport com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils;\nimport com.amaz"
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/V1SDK/SQS/SQS_Start.java",
    "chars": 3098,
    "preview": "package com.wazcov.awsJavaSamples.V1SDK.SQS;\n\nimport com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils;\nimport com.amaz"
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/V2SDK/S3/S3_Start.java",
    "chars": 3289,
    "preview": "package com.wazcov.awsJavaSamples.V2SDK.S3;\n\nimport com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils;\nimport software."
  },
  {
    "path": "src/main/java/com/wazcov/awsJavaSamples/V2SDK/SM/SM_Start.java",
    "chars": 4270,
    "preview": "package com.wazcov.awsJavaSamples.V2SDK.SM;\n\nimport com.amazonaws.util.IOUtils;\nimport com.wazcov.awsJavaSamples.AwsShar"
  },
  {
    "path": "src/test/java/CredentialsTest.java",
    "chars": 848,
    "preview": "import com.wazcov.awsJavaSamples.AwsShared.AWSSharedUtils;\nimport org.junit.Test;\n\nimport static org.junit.Assert.assert"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the wazcov/AWS-Java-Samples GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 14 files (34.9 KB), approximately 8.2k tokens, and a symbol index with 48 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!