Share the post "iwinv Object Storage – Java SDK (with Maven)"
해당 메뉴얼은 AWS S3에서 제공하는 Java SDK를 이용하여 iwinv Object Storage를 사용하는 방법을 설명합니다. (Apache Maven 사용)
참고문서
https://docs.aws.amazon.com/ko_kr/sdk-for-java/v1/developer-guide
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java
Java SDK 사용하기
테스트 OS : Ubuntu 18.04 LTS
[인증키 확인]
Endpoint -> 오브젝트 스토리지 -> 스토리지 관리 -> 인증키 관리 -> API {IDC} Endpoint
Access_Key : console.iwinv.kr -> 오브젝트 스토리지 -> 스토리지 관리 -> 인증키 관리 -> Access Key ID
Secret_Key : console.iwinv.kr -> 오브젝트 스토리지 -> 스토리지 관리 -> 인증키 관리 -> Secret Key ID
maven 설치하기
maven 패키지 설치
mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId={groupId} -DartifactId={artifactld}
# {groupId} = 패키지 네임스페이스 지정 ex) -DgroupId=org.example.basicapp => src/main/java/org/example/basicapp
# {artifactId} = 패키지 고유ID (해당 ID값으로 디렉토리가 생성됩니다)
ex) mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes
-DgroupId=org.example.basicapp -DartifactId=myapp
├──src
│ ├─main
│ │ └──java
│ │ └──org
│ │ └──example
│ │ └──basicapp
│ │ └──App.java
│ ├─test
│ └──java
│ └──org
│ └──example
│ └──basicapp
│ └──AppTest.java
└──pom.xml
|
코드작성하기
위에 설명한 예제 프로젝트 구조를 기준으로 /src/main/java/org/example 아래에 원하는 java 코드를 작성합니다.
(코드작성시 반드시 코드안에 지정된 class명으로 파일이름을 지정해야합니다.)
ex) CreateBucket.java , ListBuckets.java
|
pom.xml 파일 수정하기
java코드 작성 후 pom.xml 파일을 수정합니다.
java 코드 실행시 main class를 실행하도록 코드에 맞는 main class를 지정합니다. ( maven-shade-plugin 사용)
# pom.xml 예제 (프로젝트 구조는 위에 예제와 동일하며 코드는 CreateBucket.java 코드 작성)
============================================================================
<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/maven-v4_0_0.xsd”>
<modelVersion>4.0.0</modelVersion>
<groupId>org.example.basicapp</groupId>
<artifactId>myapp</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>myapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.327</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation=”org.apache.maven.plugins.shade.resource.ManifestResourceTransformer”>
<mainClass>aws.example.s3.CreateBucket</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
============================================================================
|
빌드하기
pom.xml 파일이 있는 위치에서 빌드를 진행합니다.
mvn package 명려어 입력시 빌드가 되고 /target 디렉토리가 생성되며 해당 디렉토리에 jar파일이 생성됩니다.
|
실행하기
java -jar 명령어로 jar 파일을 실행합니다.
ex) java -jar myapp-1.0-SNAPSHOT.java
|
# 예제코드
버킷 생성
package aws.example.s3;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
import java.util.List;
public class CreateBucket {
public static Bucket getBucket(String bucket_name) {
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(“Endpoint“, “default”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“Access_Key “, “Secret_Key“)))
.build();
Bucket named_bucket = null;
List buckets = s3.listBuckets();
for (Bucket b : buckets) {
if (b.getName().equals(bucket_name)) {
named_bucket = b;
}
}
return named_bucket;
}
public static Bucket createBucket(String bucket_name) {
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(“Endpoint”, “default”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“Access_Key “, “Secret_Key”)))
.build();
Bucket b = null;
if (s3.doesBucketExistV2(bucket_name)) {
System.out.format(“Bucket %s already exists.\n”, bucket_name);
b = getBucket(bucket_name);
} else {
try {
b = s3.createBucket(bucket_name);
} catch (AmazonS3Exception e) {
System.err.println(e.getErrorMessage());
}
}
return b;
}
public static void main(String[] args) {
final String USAGE = “\n” +
“CreateBucket – create an S3 bucket\n\n” +
“Usage: CreateBucket \n\n” +
“Where:\n” +
” bucketname – the name of the bucket to create.\n\n” +
“The bucket name must be unique, or an error will result.\n”;
if (args.length < 1) {
System.out.println(USAGE);
System.exit(1);
}
String bucket_name = args[0];
System.out.format(“\nCreating S3 bucket: %s\n”, bucket_name);
Bucket b = createBucket(bucket_name);
if (b == null) {
System.out.println(“Error creating bucket!\n”);
} else {
System.out.println(“Done!\n”);
}
}
}
# 실행 명령어
java -jar 파일명.jar [Bucket_Name]
|
버킷 삭제
package aws.example.s3;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
import java.util.Iterator;
public class DeleteBucket {
public static void main(String[] args) {
final String USAGE = “\n” +
“To run this example, supply the name of an S3 bucket\n” +
“\n” +
“Ex: DeleteBucket \n”;
if (args.length < 1) {
System.out.println(USAGE);
System.exit(1);
}
String bucket_name = args[0];
System.out.println(“Deleting S3 bucket: ” + bucket_name);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(“Endpoint“, “default”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“Access_Key“, “Secret_Key“)))
.build();
try {
System.out.println(” – removing objects from bucket”);
ObjectListing object_listing = s3.listObjects(bucket_name);
while (true) {
for (Iterator<?> iterator =
object_listing.getObjectSummaries().iterator();
iterator.hasNext(); ) {
S3ObjectSummary summary = (S3ObjectSummary) iterator.next();
s3.deleteObject(bucket_name, summary.getKey());
}
if (object_listing.isTruncated()) {
object_listing = s3.listNextBatchOfObjects(object_listing);
} else {
break;
}
}
System.out.println(” – removing versions from bucket”);
VersionListing version_listing = s3.listVersions(
new ListVersionsRequest().withBucketName(bucket_name));
while (true) {
for (Iterator<?> iterator =
version_listing.getVersionSummaries().iterator();
iterator.hasNext(); ) {
S3VersionSummary vs = (S3VersionSummary) iterator.next();
s3.deleteVersion(
bucket_name, vs.getKey(), vs.getVersionId());
}
if (version_listing.isTruncated()) {
version_listing = s3.listNextBatchOfVersions(
version_listing);
} else {
break;
}
}
System.out.println(” OK, bucket ready to delete!”);
s3.deleteBucket(bucket_name);
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
}
System.out.println(“Done!”);
}
}
# 실행 명령어
java -jar 파일명.jar [Bucket_Name]
|
버킷 리스트 확인
package aws.example.s3;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import java.util.List;
public class ListBuckets {
public static void main(String[] args) {
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(“Endpoint“, “default”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“Access_Key“, “Secret_Key“)))
.build();
List buckets = s3.listBuckets();
System.out.println(“Your Amazon S3 buckets are:”);
for (Bucket b : buckets) {
System.out.println(“* ” + b.getName());
}
}
}
|
오브젝트 업로드
package aws.example.s3;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
import java.io.File;
import java.nio.file.Paths;
public class PutObject {
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: PutObject \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);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(“Endpoint“, “default”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“Access_Key“, “Secret_Key“)))
.build();
try {
s3.putObject(bucket_name, key_name, new File(file_path));
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
}
System.out.println(“Done!”);
}
}
# 실행 명령어
java -jar 파일명.jar [Bucket_Name] [Path/File_Name]
ex) java -jar myapp-1.0-SNAPSHOT.java iwinv-bucket /home/ubuntu/test.txt
|
오브젝트 다운로드
package aws.example.s3;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class GetObject {
public static void main(String[] args) {
final String USAGE = “\n” +
“To run this example, supply the name of an S3 bucket and object to\n” +
“download from it.\n” +
“\n” +
“Ex: GetObject \n”;
if (args.length < 2) {
System.out.println(USAGE);
System.exit(1);
}
String bucket_name = args[0];
String key_name = args[1];
System.out.format(“Downloading %s from S3 bucket %s…\n”, key_name, bucket_name);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(“Endpoint“, “default”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“Access_Key“, “Secret_Key“)))
.build();
try {
S3Object o = s3.getObject(bucket_name, key_name);
S3ObjectInputStream s3is = o.getObjectContent();
FileOutputStream fos = new FileOutputStream(new File(key_name));
byte[] read_buf = new byte[1024];
int read_len = 0;
while ((read_len = s3is.read(read_buf)) > 0) {
fos.write(read_buf, 0, read_len);
}
s3is.close();
fos.close();
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
} catch (FileNotFoundException e) {
System.err.println(e.getMessage());
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
System.out.println(“Done!”);
}
}
# 실행 명령어
java -jar 파일명.jar [Bucket_Name] [Object_Name]
|
오브젝트 리스트 확인
package aws.example.s3;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsV2Result;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
import java.util.List;
public class ListObjects {
public static void main(String[] args) {
final String USAGE = “\n” +
“To run this example, supply the name of a bucket to list!\n” +
“\n” +
“Ex: ListObjects \n”;
if (args.length < 1) {
System.out.println(USAGE);
System.exit(1);
}
String bucket_name = args[0];
System.out.format(“Objects in S3 bucket %s:\n”, bucket_name);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(“Endpoint“, “default”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“Access_Key“, “Secret_Key“)))
.build();
ListObjectsV2Result result = s3.listObjectsV2(bucket_name);
List objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
System.out.println(“* ” + os.getKey());
}
}
}
# 실행 명령어
java -jar 파일명.jar [Bucket_Name]
|
오브젝트 삭제
package aws.example.s3;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
public class DeleteObject {
public static void main(String[] args) {
final String USAGE = “\n” +
“To run this example, supply the name of an S3 bucket and object\n” +
“name (key) to delete.\n” +
“\n” +
“Ex: DeleteObject \n”;
if (args.length < 2) {
System.out.println(USAGE);
System.exit(1);
}
String bucket_name = args[0];
String object_key = args[1];
System.out.format(“Deleting object %s from S3 bucket: %s\n”, object_key,
bucket_name);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(“Endpoint“, “default”))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(“Access_Key “, “Secret_Key“)))
.build();
try {
s3.deleteObject(bucket_name, object_key);
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
}
System.out.println(“Done!”);
}
}
# 실행 명령어
java -jar 파일명.jar [Bucket_Name] [Object_Name]
|
Category: 가상화/클라우드