[원문출처] https://camel.apache.org/components/2.x/aws-s3-component.html
해당 문서의 경우 Apache 재단의 Camel Document 문서 일부를 번역 한 것입니다. 일부 내용의 경우 필요에 따라 삭제된 부분이 있슴
번역본인 해당 문서의 경우 역자에게 있음을 알리며 상업적 이용을 불허합니다.
www.sogomsoft.co.kr (주) 소곰소프트
Amazon S3 스토리지 서비스 컴포넌트
Camel 2.8 이후 지원, Both producer 와 consumer 양쪽 모두 지원.
S3 컴포넌트는 Amazon’s S3 서비스에 또는 서비스로 부터 객체를 저장하거나 조회 하는 것을 지원한다.
전제 조건으로 유효한 Amazon Web Services 개발자 계정을 가지고 있어야 하고, S3에 가입되어 있어야 한다. Amazon S3에서 더 많은 정보를 볼 수 있다.
URI 형식
aws-s3://[bucketName|arn][?options]
이 버킷은 만약 존재 하지 않는다면 생성되게 될 것이다. ?options=value&option2=value&… 과 같은 형식으로 URI에 쿼리 옵션을 추가 할 수있다.
예를 들면, helloBucket 버킷으로 부터 hello.txt 파일을 읽기 위해, 다음처럼 사용한다. :
from("aws-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt")
.to("file:/var/downloaded");
환경 구성 옵션
환경 구성 옵션은 다음과 같이 2레벨로 구분된 레벨로 환경 설정 될 수 있다.
- 컴포넌트 레벨
- 엔드포인트 레벨
환경 구성 컴포넌트 옵션
컴포넌트 레벨은 엔드포인트에 의해 상속받게 되는 일반적이고 보통의 환경 구성을 설정하기 위한 가장 높은 레벨이다. 컴포넌트의 보안 설정, 인증을 위한 자격증명, 네트워크 연결을 위한 URL 등과 같은 것을 설정한다.
환경 구성 엔드포인트 옵션
가장 많이 자체적으로 환경 구성하는 곳이 엔드포인트이고, 엔드포인트가 종종 많은 옵션을 가지고, 엔드포인트에 해야 할 필요가 있는 환경 설정하는 것을 허용한다. 이 옵션은 엔드포인트가 컨슈머로서, 프로듀서로서 또는 양쪽 모두에서 사용되는 지에 따라 분류 된다.
컴포넌트 옵션
AWS S3 스토리지 서비스 컴포는트는 아래 목록에 나열된 것처럼 39가지옵션을 제공한다.
이름 | 상세설명 | 기본값 | 유형 |
configuration (common) |
컴포넌트의 환경 구성을 한다. | S3Configuration | |
region (common) |
S3 클라이언트가 작업할 필요가 있는 리즌. 이 파라미터를 사용할 때, 환경구성에서 리즌의 대문자 이름을 예상하게 될 것이다. (예를 들면, AP_EAST_1) Regions.EU_WEST_1.name() 메서드로 이름을 사용해야 할 것이다. | String | |
resolvePropertyPlaceholders (advanced) |
시작할 때, 자체적으로 프로퍼티 플레이스홀더를 해결해야 하는지 여부를 설정한다. 단지 문자열 유형으로 된 프로퍼티들만 프로퍼티 플레이스 홀더를 사용 할 수 있다. | true | boolean |
accessKey (security) |
아마존 AWS 엑세스 키 | String | |
secretKey (security) |
아마존 AWS 시크릿 키 | String |
엔드포인트 옵션
AWS S3 저장소 서비스 엔드포인트는 다음 URI 구문을 사용하여 환경 구성될 수 있다. :
aws-s3://bucketNameOrArn
다음 패스 파라미터와 와 쿼리 파라미터를 사용하여 :
패스 파라미터 (1개 파라미터):
이름 | 상세설명 | 기본값 | 타입 |
bucketNameOrArn | 필수값 버킷명 또는ARN(Amazon Resource Number, 아마존 리소스 번호) | String |
쿼리 파라미터 (58개 파라미터):
이름 | 상세설명 | 기본값 | 타입 |
amazonS3Client (common) |
레지스터리에서 com.amazonaws.services.s3.AmazonS3 에 참조 된다.. | AmazonS3 | |
pathStyleAccess (common) |
S3 클라이언트가 패스 스타일을 사용하는지 아닌지를 설정한다. | false | boolean |
policy (common) |
com.amazonaws.services.s3.AmazonS3#setBucketPolicy() 메서드에서 설정할 큐를 위한 정책을 설정한다. | String | |
proxyHost (common) |
S3 클라이언트를 인스턴스화 할때 프록시 호스트를 정의한다. | String | |
proxyPort (common) |
S3 클라이언트 정의 내부에 사용될 프록시 포트를 지정한다. | Integer | |
region (common) |
S3 클라이언트가 작업할 필요가 있는 리즌. 이 파라미터를 사용할 때, 환경구성에서 리즌의 대문자 이름을 예상하게 될 것이다. (예를 들면, AP_EAST_1) Regions.EU_WEST_1.name() 메서드로 이름을 사용해야 할 것이다. | String | |
useIAMCredentials (common) |
S3 클라이언트가 EC2 인스턴스에 자격증명을 로드 하는 것을 기대하는지 또는 통과되기 위한 정적 자격 증명을 기대 해야 하는지를 설정한다. | false | boolean |
encryptionMaterials (common) |
클라이언트가 사용할 대칭/비대칭의 경우에 사용하게 될 암호화 자료 | EncryptionMaterials | |
useEncryption (common) |
암호화를 사용할 것인지 아닌지를 정의 한다. | false | boolean |
bridgeErrorHandler (consumer) |
Camel 라우팅 에러 핸들러에 컨슈머를 연결하는 것을 허용한다. 이는 어떤 예외가 발생했을 때, 컨슈머가 들어오는 메시지 또는 선호하는 것을 가져오는 것을 시도 하는것을 의미 한다. 라우팅 에러 핸들러에 의해 메시지가 처리 하고 관리 되게 될 것이다. 기본값은 컨슈머가 예외를 다루기 위해 org.apache.camel.spi.ExceptionHandler를 사용하게 될 것이고, WARN 또는 ERROR 레벨로 로깅 되거나 무시 될 것이다. | false | boolean |
deleteAfterRead (consumer) |
이 옵션은 조회된 이후에 S3로 부터 객체를 지운다. 이 삭제는 단지 Exchange가 커밋되었을 때 수행되게 된다. 만약 롤백이 발생하면 이 객체는 지워지지 않는다. 이 옵션이 false이면, 메시지를 폴링시에 계속 계속 조회 되게 될 것이다. 그러므로 라우터에서 중복을 필터링하기 위해 멱등적 컨슈며 EIP를 사용할 필요가 있다. S3Constants#BUCKET_NAME 과 S3Constants#KEY 헤더 또는 S3Constants#KEY 헤더를 사용하여 필터링 할 수 있다 . | true | boolean |
fileName (consumer) |
주어진 파일 명으로 버킷에서 객체를 얻기위해 사용한다. | String | |
includeBody (consumer) |
이 옵션이 true이면, exchange 바디에 파일의 내용을 스트림으로 설정되게 되고 false이면, 헤더에 S3 객체 메타 데이타로 설정되게 되고 바디 값은 null이 된다. 이 옵션은 autocloseBody 옵션과 밀접한 관련 되어 있다. includeBody가 true로 설정된 경우에, autocloseBody가 false이면, S3Object 스트림을 닫는 것은 호출자에 달려 있다. autocloseBody가 true 설정되어 있으면, S3Object 스트림이 자동으로 닫히게 될 것이다. | true | boolean |
maxConnections (consumer) |
S3 클라이언트 환경 구성에서 최대 커넥션 파라미터를 설정한다. | 60 | int |
maxMessagesPerPoll (consumer) |
각각을 폴링 시 폴링하기 위한 제한으로 메시지의 최대 수를 얻는다. 기본 값은 10이고. 제한없도록 설정하기 위해서는 0 또는 음수를 설정한다. | 10 | int |
prefix (consumer) |
이 옵션은 관심 있는 객체를 소비 하기 위해 com.amazonaws.services.s3.model.ListObjectsRequest에서 사용될 접두사이다. | String | |
sendEmptyMessageWhenIdle (consumer) |
만약 폴링 컨슈머가 어떤 파일을 폴링 하지 않는다면, 대신 비어있는 메시지(no body)를 보내기 위해서 이 옵션을 활성화 할 수 있다. | false | boolean |
autocloseBody (consumer) |
만약 이 옵션이 true 이고 includeBody가 true이면, S3Object.close() 메서드가 exchange가 완료시 호출 되게 될 것이다. 이 옵션은 includeBody 옵션에 밀접하게 관련되어 있다. includeBody가 true로 설정된 경우에, autocloseBody가 false이면, S3Object 스트림을 닫는 것은 호출자에 달려 있다. autocloseBody가 true 설정되어 있으면, S3Object 스트림이 자동으로 닫히게 될 것이다. |
true | boolean |
exceptionHandler (consumer) |
컨슈며가 사용자 정의 ExceptionHandler를 사용하게 한다. 만약 bridgeErrorHandler 옵션이 활성화 되어 있다면 이 옵션이 사용되지 않는다는 점에 유의하라. 기본적으로 컨슈머는 예외를 처리 하게 되고, WARN 나 ERROR 레벨로 로그릴 기록하게 되거나 무시되게 될 것이다. | ExceptionHandler | |
exchangePattern (consumer) |
컨슘가 Exchange를 생성할 때, Exchange 패턴을 설정한다. 3개의 열거형으로 구성되어 있고 InOnly, InOut, InOptionalOut 중에 하나가 될 수 있다. | ExchangePattern | |
pollStrategy (consumer) |
Camel에서 Exchange가 생성되고 라우팅 되기 전에 폴링 동작을 하는 동안 에러를 핸들링을 컨트롤 하기 위해 사용자 정의 구현체를 제공하기 위해 하용하고 있는 플러그인 가능한 org.apache.camel.PollingConsumerPollingStrategy 을 설정한다. | PollingConsumerPollStrategy | |
deleteAfterWrite (producer) |
이 옵션은 S3 파일이 업로드 되었을 때 파일 객체를 삭제한다. | false | boolean |
multiPartUpload (producer) |
만약 true이면, multi part 형식으로 파일을 업로드 하게 될 것이다. 이 멀티파트의 사이즈는 partSize 옵션에 의해 결정되게 된다. | false | boolean |
operation (producer) |
단지 업로드만 원하지 않는 경우에 사용하기 위한 작업이다. copyObject, deleteBucket, listBuckets, downloadLink 의 4개의 열거형이 있고 그중에 하나의 값을 선택 할 수 있다. | S3Operations | |
partSize (producer) |
multi part 업로드에서 사용할 partSize를 설정한다 기본값은 25M이다. | 26214400 | long |
serverSideEncryption (producer) |
AWS에서 관리되는 키로 객체를 암호화 하기 위해서 서버 측 암호화 알고리즘을 설정한다. 예를 들면 AES256. | String | |
storageClass (producer) |
com.amazonaws.services.s3.model.PutObjectRequest 요청에서 설정할 저장소 클래스를 지정한다. | String | |
awsKMSKeyId (producer) |
KMS가 활성화 된 경우에 사용할 KMS 키의 ID를 정의 한다. | String | |
useAwsKMS (producer) |
KMS 사용해야 하는지 아닌지를 정의한다. | false | boolean |
accelerateModeEnabled (advanced) |
가속 모드(Accelerate Mode)를 true인지 false인지를 정의한다. | false | boolean |
chunkedEncodingDisabled (advanced) |
비활성화 된 청크 인코딩이 true인지 false인지를 정의한다. HTTP 1.1 version 에서 사용가능한 스트리밍 데이터 전송 방식, chunked 인코딩 방식에서 데이터는 각각의 덩어리들 나눠 독립적으로 송신 및 수신 , 각 chunk의 앞에는 해당 chunk의 크기 설정 형식은 byte 형식으로 송수신 길이가 0인 chunk가 수신되면 전송이 종료 |
false | boolean |
dualstackEnabled ( advanced) |
듀얼스택이 활성화가 true인지 false인지를 정의한다. | false | boolean |
forceGlobalBucketAccessEnabled ( advanced) |
강제 글로벌 버킷 엑세스(Force Global Bucket Access)이 활성화가 true인지 false인지를 정의한다. | false | boolean |
payloadSigningEnabled ( advanced) |
페이로드 서명(Payload Signing)이 활성화가 true인지 false인지를 정의한다. | false | boolean |
backoffErrorThreshold (scheduler) |
backoffMultipler 시작 되기 전에 발생되어야 하는 (어떤 에러로 실패된) 에러 폴링의 하위순번의 숫자. | int | |
backoffIdleThreshold (scheduler) |
backoffMultipler 시작 되기 전에 발생되어야 하는 유휴 홀링의 하위 순번의 숫자 | int | |
backoffMultiplier (scheduler) |
To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. 개별 행의 유휴/에러 하위순번의 숫자를 가지고 있다면 예약된 폴링 컨슈며가 물러나게 한다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛰어야 하는 폴링의 수이다. 이 옵션을 사용할 때는 backoffIdleThreshold 나/또는 backoffErrorThreshold가 반드시 환경 구성 되어 있어야 한다. |
int | |
delay (scheduler) |
다음 폴링 전에 지연 시간(밀리초). | 500 | long |
greedy (scheduler) |
greedy 옵션이 활성화 되어 있다면, 이전 실행이 하나 또는 그 이상의 메시지를 폴링한 경우, ScheduledPollConsumer가 즉시 다시 실행되게 된다. | false | boolean |
initialDelay (scheduler) |
첫번째 폴링 시작 전에 지연시간(밀리초). | 1000 | long |
runLoggingLevel (scheduler) |
컨슈며가 폴링 될 때, 시작/완료 로그 라인을 로그 기록한다. 이 옵션은 로그를 위한 로그 레벨을 환경 설정하는 것을 허용하고 로그 레벨은 6개의 열거형으로 되어 있고 TRACE, DEBUG, INFO, WARN, ERROR, OFF 값중에 하나를 사용한다. | TRACE | LoggingLevel |
scheduledExecutorService (scheduler) |
컨슈머를 위해 사용할 사용자정의 또는 공유된 쓰레드 풀을 환경 구성하는 것을 허용한다. 기본적으로 각각 컨슈며는 단일 쓰레드로된 자신의 쓰레드 풀을 가지고 있다. | ScheduledExecutorService | |
scheduler (scheduler) |
camel-spring 또는 camel-quartz 컴포넌트로부터 크론 스케줄을 사용하기 위해서 설정. 스케줄러에서 내장된 스프링 또는 쿼츠의 값을 사용한다. | none | Object |
schedulerProperties (scheduler) |
사용자 정의 스케줄러 또는 쿼츠나 스프링 기반 스케줄러 중에 하나를 사용할때 추가적인 프로퍼티를 환경 구성하기 위해 사용한다. | Map | |
startScheduler (scheduler) |
스케줄러가 자동 시작 되어야 하는지를 설정한다. | true | boolean |
timeUnit (scheduler) |
initialDelay 과 delay 옵션읠 위한 타임 유닛 값. 7개의 열거형을 가지고 NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS 중에 하나의 값이 될 수 있다. | MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) |
고정된 지연시간 또는 고정된 비율이 사용되었는지를 제어한다. 자세한 것은 JDK의 ScheduledExecutorService 를 보라 | true | boolean |
accessKey (security) | 아마존 AWS 엑세스 키 | String | |
secretKey (security) | 아마존 AWS 시크릿 키 | String |
필수 S3 컴포넌트 옵션
레지스터리에 Amazon’s S3에 엑세스 하기 위해 amazonS3Client 또는 액세스 키 와 시크릿 키를 제공 해야 한다.
배치 컨슈머
이 컴포넌트는 배치 컨슈머를 구현한다.
인스턴스가 배치에 존재 하는 메시지가 얼마나 많은지 알 수 있고 Aggregator가 메시지의 수를 집계 하게 해주는 것을 허용한다.
S3 컴포넌트 사용예
헤더 | 유형 | 상세 설명 |
CamelAwsS3BucketName | String | 현재 작업에서 저장되거나 사용되게 될 객체의 버킷 이름. |
CamelAwsS3BucketDestinationName | String | 현재 작업에서 사용되게 될 버킷 목적지 명. |
CamelAwsS3ContentLength | Long | 이 객체의 컨텐츠 길이. |
CamelAwsS3ContentType | String | 이 객체의 컨텐츠 유형. |
CamelAwsS3ContentControl | String | 이 객체의 컨텐츠 컨트롤 |
CamelAwsS3ContentDisposition | String | 이 객체의 컨텐츠 처분 |
CamelAwsS3ContentEncoding | String | 이 객체의 컨텐츠 인코딩 |
CamelAwsS3ContentMD5 | String | 이 객체의 md5 체크섬 |
CamelAwsS3DestinationKey | String | 현재 작업에서 사용되게 될 목적지 키. |
CamelAwsS3Key | String | 현재 작업에서 저장되거나 사용되게 될 아래 키. |
CamelAwsS3LastModified | java.util.Date | 이 객체의 마지막 변경된 타임스탬프. |
CamelAwsS3Operation | String | 수행할 작업. 허용되는 값은 copyObject, deleteObject, listBuckets, deleteBucket, downloadLink, listObjects 이다. |
CamelAwsS3StorageClass | String | 객체의 저장 클래스 |
CamelAwsS3CannedAcl | String | 객체에 적용하게 될 취소된 acl. 허용되는 값은 com.amazonaws.services.s3.model.CannedAccessControlList를 보라. |
CamelAwsS3Acl | com.amazonaws.services.s3.model.AccessControlList | 맞게 생성된 Amazon S3 Access Control List 객체. 더 자세한 것은 com.amazonaws.services.s3.model.AccessControlList를 보라. |
CamelAwsS3Headers | Map<String,String> | 사용자 정의 objectMetadata 헤더들을 얻거나 설정하는 것을 지원한다.. |
CamelAwsS3ServerSideEncryption | String | AWS에 관리되는 키를 사용하여 객체를 암호화 할 때, 서버측 암호화 알고리즘을 설정한다. 예를 들면, AES256를 사용. |
CamelAwsS3VersionId | String | 현재 작업으로 부터 저장되거나 반환될 객체의 버전 ID |
S3 프로듀서에 의해 설정될 메시지 헤더
헤더 | 유형 | 상세 설명 |
CamelAwsS3ETag | String | 새로 업로드 될 객체를 위한 ETag 값. |
CamelAwsS3VersionId | String | 새로 업로드 될 객체의 부가적인 버전 ID. |
CamelAwsS3DownloadLinkExpiration | String | URL 다운로드 링크의 만료 시간(밀리초). 다운로드 링크는 CamelAwsS3DownloadLink 응답 헤더에 저장되게 될 것이다. |
S3 컨슈머에 의해 설정될 메시지 헤더
헤더 | 유형 | 상세 설명 |
CamelAwsS3Key | String | 객체가 저장 될 때 키 |
CamelAwsS3BucketName | String | 객체가 포함된 버킷의 이름. |
CamelAwsS3ETag | String | RFC 1864에 따라 객체와 관련된 16진수로 인코딩된 128-bit MD5 다이제스트. 이 데이타는 호출자가 수신 받은 데이타와 아마존 S3에 의해 보내 질 데이타와 같은지 검증하기 위해 무결성 체크로 사용된다. |
CamelAwsS3LastModified | Date | 객체와 관련해서 아마존 S3 마지막 기록된 변경 사항에 날짜와 시간을 나타내는 마지막 변경 시점 헤더의 값 |
CamelAwsS3VersionId | String | 만약 가능하다면 연관된 아마존 S3 객체 버전 ID. 버전 ID들은 객체 버전 관리가 활성화 된 Amazon S3 버킷에 객체가 업로드 될 때, 객체에만 할당 된다. |
CamelAwsS3ContentType | String | 연관된 객체에 저장될 컨텐츠의 유형을 가리키는 Content-Type HTTP 헤더. 이 헤더의 값은 표준 MIME 유형이다. |
CamelAwsS3ContentMD5 | String | RFC 1864에 따라연관된 객체의 base64 인코딩된 128-bit MD5 다이제스트. (헤더를 포함하지 않는 컨텐츠). 이 데이타는 Amazon S3에 의해 수신 된 데이타가 호출자에게 보내진 데이타와 같은지를 검증하기 위해 무결성 체크 메시지로 사용된다. |
CamelAwsS3ContentLength | Long | byte로 객체와 연관된 사이즈를 나타내는 Content-Length HTTP 헤더. |
CamelAwsS3ContentEncoding | String | 객체에 적용된 컨텐츠 인코딩이 무엇인지, Content-Type 필드에 의해 참조될 미디어 타입을 포함하기 위해 적용되어야 하는 디코딩 매카니즘이 무엇인지를 지정하는 부가적인 Content-Encoding HTTP 헤더. |
CamelAwsS3ContentDisposition | String | 저장될 객체를 위한 요청되어진 파일 명 같은 프리젠테이션 정보를 지정하는 부가적인 Content-Disposition HTTP 헤더. 일반적인 HTTP 응답에서 Content-Disposition 헤더는 컨텐츠가 브라우저에 inline 되어야 하는 웹페이지 자체이거나 웹페이지의 일부인지, 아니면 attachment로써 다운로드 되거나 로컬에 저장될 용도록 쓰이는 것인지를 알려주는 헤더입니다 |
CamelAwsS3ContentControl | String | 사용자가 HTTP 요청/응답 체인을 따라 캐싱 동작을 지정하는 것을 허용하는 부가적인 Cache-Control HTTP 헤더. |
CamelAwsS3ServerSideEncryption | String | AWS에 의해 관리되는 키를 사용하여 객체를 암호화 할때 서버측 암호화 알고리즘. |
S3 프로듀셔 작업
Camel-AWS s3 컴포넌트는 프로듀서 측에서 다음 작업을 제공한다. :
- copyObject
- deleteObject
- listBuckets
- deleteBucket
- downloadLink
- listObjects
- getObject (S3Object 인스턴스를 반환하게 될 것이다.)
- getObjectRange ( S3Object 인스턴스를 반환하게 될 것이다.)
고급 아마존 S3 환경 구성
만약 Camel 어플리케이션이 방화벽 뒤에서 동작중이거나 또는 아마존 S3 인스턴스 환경 구성을 좀더 컨트롤 하는 것을 원하면 자신의 환경 구성 인스턴스를 생성 할 수 있다. :
AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);
AmazonS3 client = new AmazonS3Client(awsCredentials, clientConfiguration);
registry.bind("client", client);
Camel aws-s3 컴포넌트 환경구성 설정을 참조한다.:
from("aws-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");
S3 컴포넌트로 KMS 사용하기
To use AWS KMS to encrypt/decrypt data by using AWS infrastructure you can use the options introduced in 2.21.x like in the following example
from("file:tmp/test?fileName=test.txt")
.setHeader(S3Constants.KEY, constant("testFile"))
.to("aws-s3://mybucket?amazonS3Client=#client&useAwsKMS=true&awsKMSKeyId=3f0637ad-296a-3dfe-a796-e60654fb128c");
In this way you’ll ask to S3, to use the KMS key 3f0637ad-296a-3dfe-a796-e60654fb128c, to encrypt the file test.txt. When you’ll ask to download this file, the decryption will be done directly before the download.
S3 컴포넌트로 IAM자격증명사용 옵션 ("useIAMCredentials" ) 사용하기
아마존 IAM 자격증명을 사용하기 위해, 먼저 Camel 어플리케이션을 구동하고 있는 EC2가 효과적으로 동작하기 위해 첨부된 적절한 정책을 포함된 것과 관련된 IAM 롤을 가지는지를 검증 해야 한다. 단지 이 기능은 원격 인스턴스에 "true" 를 설정해야 한다는 것을 유의해라. 심지어 더 명확하기 위해, IAM 가 AWS 특정 컴포넌트이기 때문에 로컬환경에서는 정적 자격증명을 여전히 사용해야 하고, 그러나 AWS 환경은 더 휩게 관리 되어야 한다. 이 IAM 자격 증명이 구현되고 이해 되었을 때, AWS 환경 설정을 위해, 쿼리 파리미터 "useIAMCredentials"에 "true"로 설정 할 수 있다. 로컬 환경과 원격 환경에 기반하여 on/off로 효과적으로 전환 하기 위해, 시스템 환경 변수로 쿼리 파라미터를 활성화 하는 것을 고려 할 수 있다. 예를 들면, "isRemote" 가 "true"로 시스템 환경 변수에서 호출 될 때, 당신의 코드에 쿼리 파라미터에 "true" 를 설정해야 한다. ( 간단한 예제처럼 동작해야 하고 그렇게 하기 위한 많은 다른 방법이 있다). 비록 정적 자격 증명이 완전하게 필요가 제거 되지 않는다 할지라도, 마마존 AWS 환경 설정에서 IAM credentials을 사용하는 것은 원격 환경에서 갱신될 필요를 없애고, 주요 보안이 향상을 추가 한다. (IAM 자격증명은 매일 6시간 마다 자동적으로 갱신되고 그 보안 정책이 업데이트 될때 업데이트 된다). 이것은 가격 증명을 관리 하기 위해 AWS에서 요구된 방법이고 그러므로 가능한 자주 사용해야 한다.
S3 PRODUCER OPERATION EXAMPLES
- CopyObject: 이 동작은 하나의 버킷으로 부터 다른 하나의 버킷으로 객체를 복사 한다.
from("direct:start").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(S3Constants.BUCKET_DESTINATION_NAME, "camelDestinationBucket");
exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
exchange.getIn().setHeader(S3Constants.DESTINATION_KEY, "camelDestinationKey");
}
})
.to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=copyObject")
.to("mock:result");
이 옵션은 객체를 camelDestinationKey 헤더에서 표현된 이름으로 mycamelbucket 버킷으로 부터 to the camelDestinationBucket 버킷로 복사한다.
- DeleteObject: 이 작업은 버킷으로 부터 객체를 삭제 한다.
from("direct:start").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
}
})
.to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteObject")
.to("mock:result");
이 작업은 mycamelbucket 버킷으로 부터 camelKey 객체를 삭제 하게 된다.
- ListBuckets: 이 작업은 이 리즌 내의 계정에 버킷의 목록을 나열한다.
from("direct:start")
.to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listBuckets")
.to("mock:result");
이 작업은 이 계정의 버킷들의 목록을 나열하게 될 것이다.
- DeleteBucket: 이 작업은 URI 파라미터와 헤더로 지정된 버킷을 삭제 한다.
from("direct:start")
.to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
.to("mock:result");
이 작업은 mycamelbucket 버킷을 삭제 한다.
- DownloadLink: 이 작업은 키 헤더에 지정된 파일을 위한 다운로드 링크를 생성한다.
from("direct:start").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
}
})
.to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=downloadLink")
.to("mock:result");
이 작업은 mycamelbucket 버킷에 camelKey의 파일을 위한 다운로드 링크를 생성한다.
- ListObjects: 이 작업은 지정된 버킷에 객체를 목록으로 나열한다.
from("direct:start")
.to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listObjects")
.to("mock:result");
이 작업은 mycamelbucket 버킷에 객체 목록을 나열하게 될 것다.
- GetObject: 이 작업은 지정된 버킷에 단일 객체를 얻게 된다.
from("direct:start").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
}
})
.to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject")
.to("mock:result");
이 작업은 mycamelbucket 버킷에서 camelKey 객체에 관련된 S3Object를 반환하게 될 것이다..
- GetObjectRange: 이 작업은 지정된 버킷에서 단일 범위 객체를 얻는다.
from("direct:start").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
exchange.getIn().setHeader(S3Constants.RANGE_START, "0");
exchange.getIn().setHeader(S3Constants.RANGE_END, "9");
}
})
.to("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange")
.to("mock:result");
이 작업은 0에서 9까지 바이트들을 포함하는 mycamelbucket 버킷에 camelKey 객체에 관련된 S3Object 인스턴스를 반환한다.
버킷 자동 생성
autoCreateBucket 옵션으로, 사용자는S3 버킷이 존재 하지 않는 경우에 자동 생성을 피할 수 있다. 이 옵션의 기본값은 true 이다. 만약 false로 설정되면, AWS 내에 존재 하지 않은 모든 버킷에 대한 어떤 동작도 성공할 수 없고 에러를 반환하게 될 것이다.
레지스터리 에서 Amazon S3 클라이언트 자동 탐색
이 컴포넌트는 레지스터리에서 Amazon S3 빈의 존재를 탐색하는 것이 가능하다. 만약 Amazon S3 클라이언트 유형의 유일한 인스턴스라면 그 인스턴스를 클라이언트로 사용하게 될 것이고, 예제에서 처럼 uri 파라미터로 S3 클라이언트를 정의 할 필요는 없다. 이는 엔드포인트의 스마트하게 환경구성하기 위해 더 유용할 수 있다.
하나의 버킷에서 다른 버킷으로 객체 이동
몇몇 사용자는 이 컴포넌트의 copyObject 기능을 사용하지 않고 어떤 버킷으로 부터 객체를 소비하고 다른 버킷에 컨텐츠를 옮기는 것을 좋아한다. 만약 당신이 이 경우라면, 컨슈머의 들어오는 Exchange로 부터 bucketName 헤더를 제거 하는 것을 잊지 말아라. 그렇지 않으면 그 파일이 같은 원본 버킷을 항상 재 작성 하게 될 것이다.
디펜던시
메이븐 사용자는 pom.xml 파일에 다음 디펜던시를 추가 해야 할 것이다.
pom.xml
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-aws-s3</artifactId>
<version>${camel-version}</version>
</dependency>
where ${camel-version} must be replaced by the actual version of Camel.
스프링 부트 자동 환경 구성
스프링 부트로 aws-s3를 사용할 때 자동 환경 구성을 가지기 위해 메이븐 디펜던시를 다음과 같이 설정 해야 한다.:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-aws-s3-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
이 컴포넌트는 아래 나열된 40개 옵션을 지원한다.
'Apache Camel > Components' 카테고리의 다른 글
Apache Camel > Documentation > Components > VM (0) | 2015.09.15 |
---|---|
Apache Camel > Documentation > Components > Direct (0) | 2015.09.15 |
Apache Camel > Documentation > Components > SEDA (0) | 2015.09.15 |
Apache Camel > Documentation > Architecture > Debugger (0) | 2015.08.26 |