[AWS] Amazon S3 (Simple Storage Service) 스토리지 개발
#Amazon #아마존 #S3 #Simple Storage Service #Amazon S3
Amazon S3로 스토리지 개발 방법
Amazon S3는 확장이 가능하고 내구성이 뛰어난 완전 관리형 객체 스토리지 입니다.
S3 버킷을 생성하고 파일을 등록한다.
S3 스토리지 버킷을 2개 생성한다.
input 버킷은 csv 형식의 파일을 저장할 용도, output 버킷은 변환된 json 형식의 파일을 저장하는데 사용된다.
AmazonS3ClientBuilder의 객체 인스턴스를 생성하고 Input, Output bucket을 생성한다.
// Set input bucket name (must be globally unique)
public static final String INPUT_BUCKET_NAME = "loia-compliant-input-bucket-name";
// Set output bucket name (must be globally unique)
public static final String OUTPUT_BUCKET_NAME = "loia-compliant-output-bucket-name";
// Create AmazonS3Client
AmazonS3 s3client = AmazonS3ClientBuilder.standard().build();
// Create Amazon S3 INPUT Bucket
if (!s3client.doesBucketExistV2(INPUT_BUCKET_NAME)) {
s3client.createBucket(INPUT_BUCKET_NAME);
}
// Create Amazon S3 OUTPUT Bucket
if (!s3client.doesBucketExistV2(OUTPUT_BUCKET_NAME)) {
s3client.createBucket(OUTPUT_BUCKET_NAME);
}
자세한 내용은 AmazonS3ClientBuilder() 링크를 참고하자.
AWS Management Console에 접속하여 Amazon S3 Bucket을 확인해보자.
내가 지정한 이름으로 버킷이 생성이 된 것을 확인할 수 있다.
Input bucket에 테스트용 파일을 업로드 한다.
InputStream inputData = new FileInputStream("DrugAdverseEvents_September.txt");
s3client.putObject(INPUT_BUCKET_NAME, "DrugAdverseEvents_September.txt", inputData, objectMetadata);
S3에서 파일을 가져와 json 형식으로 변환 후 업로드 한다.
getobject 메서드를 구현하여 input 버킷의 key값을 가져온다.
자세한 내용은 getObject 링크를 참고하자.
// Retrieve the object with the specified key from the input bucket
s3Object = getObject(s3client, INPUT_BUCKET_NAME, fileKey);
private static S3Object getObject(AmazonS3 s3client, String bucketName, String fileKey) {
S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucketName, fileKey));
return s3Object;
}
input 버킷에서 가져온 filekey값을 json형식으로 변환한 후(json 변환은 java 코드로 생략)
putObject()메서드로 output 버킷에 업로드한다.
자세한 내용은 putOjbect 링크를 참고하자.
// Convert the file from CSV to JSON format
transformedFile = transformText(s3Object);
s3Client.putObject(OUTPUT_BUCKET_NAME, fileKey, transformedFile);
미리 서명된 URL을 생성하는 코드 개발
미리 서명된 URL은 Amazon S3 버킷에서 제한된 시간 동안 URL로 객체를 검색할 수 있는 기능이다.
Java용 AWS SDK를 사용하여 미리 서명된 객체 URL 생성 예제를 참고하자.
public static URL generatePresignedUrl(AmazonS3 s3Client, String bucketName, String objectKey) {
URL url = null;
java.util.Date expiration = new java.util.Date();
long msec = expiration.getTime();
msec += 1000 * 60 * 15; // 15 Minutes
expiration.setTime(msec);
url = s3Client.generatePresignedUrl(OUTPUT_BUCKET_NAME, objectKey, expiration, HttpMethod.GET);
return url;
}
서버 사이드 암호화를 요청하고 사용자 메타데이터를 추가하는 코드 개발
Amazon S3 버킷에 업로드 하기 전 서버 측 암호화를 지정하고 사용자 메타데이터를 추가하는 방법이다.
Amazon S3는 용량, 네트웍, 호출에 따라 요금이 부가되기 때문에 메타데이터를 미리 추가하여 업로드 하는게 비용 절감에 용의하다.
public static PutObjectResult putObjectEnhanced(AmazonS3 s3Client, String bucketName,
String fileKey, File transformedFile) {
ObjectMetadata objectMetadata = new ObjectMetadata();
// Request server-side encryption
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
// Add user metadata "contact", "Joon"
objectMetadata.addUserMetadata("contact", "Joon");
PutObjectRequest putRequest = new PutObjectRequest(bucketName, fileKey, transformedFile);
putRequest.setMetadata(objectMetadata);
// Uploads object
PutObjectResult response = s3Client.putObject(putRequest);
return response;
}
마무리
Amazon S3 (Simple Storage Service) 스토리지를 활용한 개발 방법에 대해 확인해 보았습니다.
S3는 완전 관리형 객체 스토리지로 콘텐츠 저장 뿐만 아니라 백업 및 아카이빙, 빅 데이터 분석, 재해 복구, 정적 웹 사이트 호스팅 등 다양한 업무 분야에 활용이 가능한 서비스입니다.
앞으로 다양한 AWS 서비스를 활용한 포스팅이 계속 될 예정입니다.