Java를 사용하여 클라우드 데이터 저장소 제어를 시뮬레이션하는 방법
JetS3t를 통해 S3에 로그인하는 프로그래밍 방법은 두 단계로 나눌 수 있습니다. 먼저 AWSCredentials 객체를 생성한 다음 S3Service 객체에 전달해야 합니다. AWSCredentials 객체는 매우 간단합니다. 액세스 키와 비밀 키를 문자열로 처리합니다. S3Service 객체는 실제로 인터페이스 유형입니다. S3는 RESTful API와 SOAP API를 모두 제공하므로 JetS3t 라이브러리는 RestS3Service와 SoapS3Service라는 두 가지 구현 유형을 제공할 수 있습니다. 이 기사(및 대부분의 S3 트랜잭션)의 목적에 따라 RESTful API는 단순하기 때문에 좋은 선택이 됩니다.
연결된 RestS3Service 인스턴스를 생성하는 것은 목록 1과 같이 매우 간단합니다.
1단계. JetS3t RestS3Service 인스턴스 생성
다음은 참조 조각입니다. :
def awsAccessKey = “어쩌고”
def awsSecretKey = “어쩌고”
def awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey)
def s3Service = new RestS3Service(awsCredentials)
이제 버킷 생성, 영화 추가, 시간 제한 URL 가져오기 등 몇 가지 흥미로운 작업을 수행할 수 있습니다. 사실 이것은 비즈니스 프로세스처럼 들리는데, 영화와 같은 제한된 자산을 출판하는 것과 관련된 비즈니스 프로세스이지 않습니까?
버킷 만들기
가상 영화 사업을 위해 bc50i라는 버킷을 만들겠습니다. JetS3t를 사용하면 프로세스가 간단합니다. S3Service 유형에는 여러 가지 옵션이 있습니다. 나는 목록 2에 표시된 것처럼 getOrCreateBucket 호출을 사용하는 것을 선호합니다. 이름에서 알 수 있듯이 이 메서드를 호출하면 버킷 인스턴스(S3Bucket 유형의 인스턴스로 표시됨)가 반환되거나 S3에 코드 조각이 생성될 수 있습니다.
S3 플랫폼 사용의 세부 단계 소개
2단계. S3 서버에 스토리지 세그먼트 생성
다음은 참조 부분입니다.
def bucket = s3Service.getOrCreateBucket("bc50i")
제 간단한 코드 예제에 속지 마세요. JetS3t 라이브러리는 확장성이 매우 뛰어납니다. 예를 들어 보유하고 있는 버킷 수를 빠르게 확인할 수 있습니다. listAllBuckets 호출을 통해 S3 서비스 인스턴스를 요청하기만 하면 됩니다. 이 메서드는 S3Bucket 인스턴스의 배열을 반환합니다. 모든 버킷 인스턴스에 대해 이름과 생성 날짜를 요청할 수 있습니다. 또한 AccessControlList 유형을 통해 JetS3t와 관련된 권한을 제어할 수 있습니다. 예를 들어 목록 3과 같이 bc50i 버킷 인스턴스를 가져와 누구나 이를 공개적으로 읽고 쓸 수 있도록 허용할 수 있습니다.
3단계. 버킷의 액세스 제어 목록 수정
다음은 참조 조각입니다.
def bucket.acl = AccessControlList.REST_CANNED_PUBLIC_READ_WRITE
물론 API를 통해 버킷을 마음대로 삭제할 수도 있습니다. Amazon에서는 버킷이 생성될 지리적 위치를 지정할 수도 있습니다. Amazon은 실제 데이터 저장의 복잡성을 단순화하지만 버킷(및 버킷 내의 모든 객체)을 미국이나 유럽(현재 사용 가능한 옵션)에 배치하도록 Amazon에 지시할 수 있습니다.
버킷에 객체 추가
JetS3t의 API를 사용하여 S3 객체를 생성하는 것은 버킷을 작동하는 것만큼 쉽습니다. JetS3t 라이브러리는 또한 스마트하며 S3 버킷 내의 파일과 관련된 콘텐츠 유형을 처리합니다. 예를 들어 nerfwars2.mp4 동영상을 S3에 업로드하여 사용자가 제한된 시간 동안 시청할 수 있도록 하고 싶습니다.
S3 객체를 생성하는 것은 목록 4에 표시된 것처럼 일반적인 java.io.File 유형을 생성하고 S3Object 유형을 버킷과 연결하는 것만큼 간단합니다.
4단계. S3 객체 생성
다음은 참조 조각입니다:
def s3obj = new S3Object(bucket, new File(”/path/to/nerfwars2.mp4″))
파일 사용 및 S3Object를 초기화한 후 수행해야 할 작업은 목록 5와 같이 putObject 메서드를 통해 업로드하는 것뿐입니다.
5단계. 비디오 업로드
다음은 다음과 같습니다. 참조 조각:
s3Service.putObject(bucket, s3obj)
목록 5를 사용하여 업로드를 완료합니다. 이제 비디오가 Amazon 서버에 있으므로 비디오의 핵심은 이름입니다. 물론 필요한 경우 이 이름을 재정의하여 다른 개체를 호출할 수 있습니다. 실제로 JetS3t API(AmazonS3RESTful API도 포함)는 객체를 생성할 때 사용할 수 있는 많은 정보를 제공합니다. 우리는 액세스 제어 목록을 제공할 수도 있다는 것을 알고 있습니다. S3의 모든 객체는 API를 통해 생성할 수 있는 추가 메타데이터를 보유할 수 있습니다. 그런 다음 해당 메타데이터의 S3API(및 파생된 JetS3t)를 통해 모든 개체를 쿼리할 수 있습니다.
객체의 URL 생성
지금까지 내 S3 인스턴스에는 영화가 포함된 버킷이 있습니다. 실제로 내 동영상은 다음 URI를 통해 볼 수 있습니다. 하지만 나만 얻을 수 있어요. (이 경우 모든 것과 관련된 기본 액세스 제어가 무단 액세스를 거부하도록 설정되어 있으므로 프로그래밍 방식으로만 액세스할 수 있습니다.) 내 의도는 액세스 비용을 청구하기 시작할 때까지 선택된 사용자가 제한된 시간 동안 새 비디오를 볼 수 있는 방법을 제공하는 것입니다(S3도 이 작업에 도움이 됩니다).
공개 URL 생성은 S3에서 제공하는 편리한 기능입니다. 실제로 S3에서는 공개 URL을 생성할 수 있지만 일정 기간 동안만 유효합니다(예: 24시간 내부). . 방금 S3 서버에 저장한 영화에 대해 48시간 동안 유효한 URL을 생성하겠습니다. 그런 다음 선택한 사용자에게 해당 URL을 제공하여 사용자가 다운로드하고 시청할 수 있도록 합니다(2일 이내에 다운로드한다고 가정).
유효 기간이 있는 파일 처리
S3 객체에 대해 시간에 민감한 URL을 생성하려면 S3Service 유형의 정적 메소드인 JetS3t의 createSignedGetUrl 메소드를 사용할 수 있습니다. 이 메서드는 버킷 이름, 객체 키(이 경우 영화 이름, 기억하시나요?), 일부 자격 증명(JetS3t의 AWSCredentials 객체 형식) 및 만료 날짜를 사용합니다. 필요한 버킷 및 객체 키를 알고 있는 경우 목록 6의 Groovy 코드를 사용하여 URL을 빠르게 얻을 수 있습니다.
6단계. 시간에 민감한 URL 생성
다음은 다음과 같습니다. 인용 조각:
def now = new Date()
def url = S3Service.createSignedGetUrl(
bucket.getName(), s3obj.key, awsCredentials, now + 2)
Groovy를 사용하면 + 2 구문을 사용하여 48시간 제한 날짜를 쉽게 지정할 수 있습니다. 결과 URL은 다음과 같습니다(단 한 줄).
대역폭과 스토리지 요구 사항이 일치하지 않는 경우 S3가 많은 도움이 될 수 있습니다. 예를 들어, 제가 시연한 비즈니스 모델을 생각해 보세요. 동영상은 연중 특정 시기에 공개됩니다. 어딘가의 랙에서 많은 공간을 구입하거나 여기에 하드웨어와 파이프를 제공하는 전통적인 스토리지 모델에서는 다운로드 볼륨이 높을 가능성이 높지만 상대적으로 느려집니다. 그러나 필요에 따라 지불할 수는 없습니다. S3의 모델은 종량제입니다. 기업은 필요할 때만 스토리지와 대역폭에 대한 비용을 지불합니다. 게다가 S3의 보안 기능을 사용하면 사람들이 비디오를 다운로드할 수 있는 시기와 다운로드할 수 있는 사람까지 자세히 지정할 수 있습니다.
S3를 사용하면 이러한 요구 사항을 구현하는 것이 매우 쉽습니다. 개략적으로 다운로드용으로 제한된 비디오 파일을 생성하려면 다음 4단계가 필요합니다.
1.
2. 스토리지 세그먼트를 생성합니다.
3. 버킷에 필요한 비디오(또는 개체)를 추가합니다.
4. 동영상을 가리키는 시간에 민감한 URL을 만듭니다.