[원문출처] https://camel.apache.org/components/2.x/aws-s3-component.html

 

해당 문서의 경우 Apache 재단의 Camel Document 문서 일부를 번역 한 것입니다.  일부 내용의 경우 필요에 따라 삭제된 부분이 있슴
번역본인 해당 문서의 경우 역자에게 있음을 알리며 상업적 이용을 불허합니다. 

www.sogomsoft.co.kr (주) 소곰소프트  

 

(주) 소곰소프트

GS인증 획득 (주)소곰소프트의 Sogom ISB 1.2.0(ESB:Enterpries Service Bus)제품이 한국정보통신기술협회(TTA)의 소프트웨어 품질인증인 Good Software 1등급 인증을 획득하였습니다. GS 인증은 국가가 국산 소프

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 컴포넌트 사용예

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개 옵션을 지원한다. 

이름 상서 설명 기본값 유형
camel.component.aws-s3.accelerate-mode-enabled Define if Accelerate Mode enabled is true or false. false Boolean
camel.component.aws-s3.access-key Amazon AWS Access Key.   String
camel.component.aws-s3.amazon-s3-client Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. The option is a com.amazonaws.services.s3.AmazonS3 type.   AmazonS3
camel.component.aws-s3.auto-create-bucket Setting the autocreation of the bucket. true Boolean
camel.component.aws-s3.auto-discover-client Setting the autoDiscoverClient mechanism, if true, the component will look for a client instance in the registry automatically otherwise it will skip that checking. true Boolean
camel.component.aws-s3.autoclose-body If this option is true and includeBody is true, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. true Boolean
camel.component.aws-s3.autowired-enabled Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. true Boolean
camel.component.aws-s3.aws-k-m-s-key-id Define the id of KMS key to use in case KMS is enabled.   String
camel.component.aws-s3.bridge-error-handler Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. false Boolean
camel.component.aws-s3.chunked-encoding-disabled Define if disabled Chunked Encoding is true or false. false Boolean
camel.component.aws-s3.configuration The component configuration. The option is a org.apache.camel.component.aws.s3.S3Configuration type.   S3Configuration
camel.component.aws-s3.delete-after-read Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the S3Constants#BUCKET_NAME and S3Constants#KEY headers, or only the S3Constants#KEY header. true Boolean
camel.component.aws-s3.delete-after-write Delete file object after the S3 file has been uploaded. false Boolean
camel.component.aws-s3.delimiter The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in.   String
camel.component.aws-s3.dualstack-enabled Define if Dualstack enabled is true or false. false Boolean
camel.component.aws-s3.enabled Whether to enable auto configuration of the aws-s3 component. This is enabled by default.   Boolean
camel.component.aws-s3.encryption-materials The encryption materials to use in case of Symmetric/Asymmetric client usage. The option is a com.amazonaws.services.s3.model.EncryptionMaterials type.   EncryptionMaterials
camel.component.aws-s3.endpoint-configuration Amazon AWS Endpoint Configuration. The option is a com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration type.   AwsClientBuilder$EndpointConfiguration
camel.component.aws-s3.file-name To get the object from the bucket with the given file name.   String
camel.component.aws-s3.force-global-bucket-access-enabled Define if Force Global Bucket Access enabled is true or false. false Boolean
camel.component.aws-s3.include-body If it is true, the exchange body will be set to a stream to the contents of the file. If false, the headers will be set with the S3 object metadata, but the body will be null. This option is strongly related to autocloseBody option. In case of setting includeBody to true and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. true Boolean
camel.component.aws-s3.key-name Setting the key name for an element in the bucket through endpoint parameter.   String
camel.component.aws-s3.lazy-start-producer Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel’s routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. false Boolean
camel.component.aws-s3.multi-part-upload If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize. false Boolean
camel.component.aws-s3.operation The operation to do in case the user don’t want to do only an upload.   S3Operations
camel.component.aws-s3.part-size Setup the partSize which is used in multi part upload, the default size is 25M. 26214400 Long
camel.component.aws-s3.path-style-access Whether or not the S3 client should use path style access. false Boolean
camel.component.aws-s3.payload-signing-enabled Define if Payload Signing enabled is true or false. false Boolean
camel.component.aws-s3.policy The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method.   String
camel.component.aws-s3.prefix The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in.   String
camel.component.aws-s3.proxy-host To define a proxy host when instantiating the S3 client.   String
camel.component.aws-s3.proxy-port Specify a proxy port to be used inside the client definition.   Integer
camel.component.aws-s3.proxy-protocol To define a proxy protocol when instantiating the S3 client.   Protocol
camel.component.aws-s3.region The region in which S3 client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You’ll need to use the name Regions.EU_WEST_1.name().   String
camel.component.aws-s3.secret-key Amazon AWS Secret Key.   String
camel.component.aws-s3.server-side-encryption Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256.   String
camel.component.aws-s3.storage-class The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request.   String
camel.component.aws-s3.use-aws-k-m-s Define if KMS must be used or not. false Boolean
camel.component.aws-s3.use-encryption Define if encryption must be used or not. false Boolean
camel.component.aws-s3.use-i-a-m-credentials Set whether the S3 client should expect to load credentials on an EC2 instance or to expect static credentials to be passed in. false Boolean

+ Recent posts