diff --git a/examples/java/ceph-s3-upload/README.md b/examples/java/ceph-s3-upload/README.md new file mode 100644 index 00000000000..235d43666d1 --- /dev/null +++ b/examples/java/ceph-s3-upload/README.md @@ -0,0 +1,16 @@ +# Introduction +This directory contains Java code examples on how to upload an object to an S3 bucket running on a Ceph RGW cluster. + +# Prerequisites +Linux machine running an RGW Ceph cluster. Preferrably started with the ``OSD=1 MON=1 MDS=0 MGR=0 RGW=1 ../src/vstart.sh --debug --new `` command. +Java and Maven installed on the Linux machine. + +## Workflow Procedure +1. Install AWS CLI version 1 on your Linux machine as explained [here](https://docs.aws.amazon.com/cli/v1/userguide/install-linux.html) +2. Create a bucket on the Ceph cluster with the command +`` +aws --endpoint-url http://localhost:8000 s3 mb s3://sample-bucket +`` +3. Navigate through your file system into the ``ceph-s3-upload`` folder using your terminal. Please ensure you see the pom.xml file. +4. Run `` mvn clean package `` to install the required Java packages on the system. +5. Once successful, run `` java -jar target/ceph-s3-upload-1.0-SNAPSHOT-jar-with-dependencies.jar sample-bucket ceph-s3-upload.txt `` to test out Java s3 object upload on Ceph RGW cluster. diff --git a/examples/java/ceph-s3-upload/ceph-s3-upload.txt b/examples/java/ceph-s3-upload/ceph-s3-upload.txt new file mode 100644 index 00000000000..02e6ceb47ee --- /dev/null +++ b/examples/java/ceph-s3-upload/ceph-s3-upload.txt @@ -0,0 +1 @@ +This file will be uploaded to Ceph S3 storage diff --git a/examples/java/ceph-s3-upload/pom.xml b/examples/java/ceph-s3-upload/pom.xml new file mode 100644 index 00000000000..bcd6f0805c5 --- /dev/null +++ b/examples/java/ceph-s3-upload/pom.xml @@ -0,0 +1,67 @@ + + 4.0.0 + org.example.cephs3upload + ceph-s3-upload + jar + 1.0-SNAPSHOT + ceph-s3-upload + http://maven.apache.org + + 1.8 + 1.8 + + + + + com.amazonaws + aws-java-sdk-bom + 1.12.201 + pom + import + + + + + + com.amazonaws + aws-java-sdk-s3 + + + junit + junit + 3.8.1 + test + + + + + + true + maven-assembly-plugin + + + + package + + single + + + + + + + true + org.example.cephs3upload.App + + + + jar-with-dependencies + + + + + + diff --git a/examples/java/ceph-s3-upload/src/main/java/org/example/cephs3upload/App.java b/examples/java/ceph-s3-upload/src/main/java/org/example/cephs3upload/App.java new file mode 100644 index 00000000000..32f334cfbe6 --- /dev/null +++ b/examples/java/ceph-s3-upload/src/main/java/org/example/cephs3upload/App.java @@ -0,0 +1,51 @@ +package org.example.cephs3upload; + +import com.amazonaws.services.s3.model.AmazonS3Exception; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; + +import java.io.File; +import java.nio.file.Paths; + +public class App +{ + public static void main( String[] args ) + { + final String USAGE = "\n" + + "To run this example, supply the name of an S3 bucket and a file to\n" + + "upload to it.\n" + + "\n" + + "Ex: java -jar target/ceph-s3-upload-1.0-SNAPSHOT-jar-with-dependencies.jar \n"; + + if (args.length < 2) { + System.out.println(USAGE); + System.exit(1); + } + + String bucket_name = args[0]; + String file_path = args[1]; + String key_name = Paths.get(file_path).getFileName().toString(); + + System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name); + // Put in the CEPH RGW access and secret keys here in that order "access key" "secret key" + // Must also be specified here + BasicAWSCredentials credentials = new BasicAWSCredentials("0555b35654ad1656d804","h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="); + // Note That the AWSClient builder takes in the endpoint and the region + // This has to be specified in this file + final AmazonS3 s3 = AmazonS3ClientBuilder + .standard() + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://127.0.0.1:8000", "default")) + .build(); + try { + s3.putObject(bucket_name, key_name, new File(file_path)); + } catch (AmazonS3Exception e) { + System.err.println(e.getMessage()); // raises more explicit error message than e.getErrorMessage() e.g when Bucket is not available + System.exit(1); + } + System.out.println("Object upload successful!"); + } +} diff --git a/examples/java/ceph-s3-upload/src/test/java/org/example/cephs3upload/AppTest.java b/examples/java/ceph-s3-upload/src/test/java/org/example/cephs3upload/AppTest.java new file mode 100644 index 00000000000..1c8075253db --- /dev/null +++ b/examples/java/ceph-s3-upload/src/test/java/org/example/cephs3upload/AppTest.java @@ -0,0 +1,38 @@ +package org.example.cephs3upload; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +}