AWS Lambda
AWS Lambda (AWS2 Lambda)
AWS2 Lambda 컴포넌트는 AWS Lambda 함수를 생성(create), 조회(get), 목록 조회(list), 삭제(delete), 호출(invoke)할 수 있게 해 주는 컴포넌트예요. Camel 3.2부터 제공됐고 producer만 지원합니다. operation, pojoRequest, region 옵션과 자격 증명·프록시 관련 설정을 제공하고, Function URL이나 함수 설정·동시성·권한 관련 연산도 다룰 수 있어요.
출처: 문서
본문
Camel 3.2부터 지원
producer만 지원해요
AWS2 Lambda 컴포넌트는 AWS Lambda 함수의 create, get, list, delete, invoke를 지원해요.
준비물 (Prerequisites)
유효한 Amazon Web Services 개발자 계정이 있고 Amazon Lambda를 사용하도록 가입되어 있어야 해요. 자세한 정보는 AWS Lambda에서 확인할 수 있습니다.
Lambda 함수를 만들 때는 최소한 AWSLambdaBasicExecuteRole 정책이 연결된 IAM 역할을 지정해야 해요.
URI 형식 (URI Format)
aws2-lambda://functionName[?options]
다음 형식으로 URI에 쿼리 옵션을 붙일 수 있어요:
?options=value&option2=value&…
옵션 설정 방법 (Configuring Options)
Camel 컴포넌트는 두 단계로 나눠 설정합니다:
-
컴포넌트(component) 레벨
-
엔드포인트(endpoint) 레벨
컴포넌트 옵션 설정 (Configuring Component Options)
컴포넌트 레벨에서는 엔드포인트들이 이어서 물려받는 일반적이고 공유되는 설정을 해요. 가장 상위의 설정 레벨이죠.
예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 있을 수 있어요.
컴포넌트에 따라 옵션이 몇 개뿐인 것도 있고 아주 많은 것도 있어요. 컴포넌트는 보통 널리 쓰이는 기본값이 미리 설정되어 있어서, 몇 가지 옵션만 설정하거나 아예 하나도 건드리지 않아도 되는 경우가 많아요.
컴포넌트는 다음 방법으로 설정할 수 있어요:
-
the Component DSL.
-
설정 파일(
application.properties,*.yaml파일 등). -
Java 코드에서 직접.
엔드포인트 옵션 설정 (Configuring Endpoint Options)
엔드포인트는 옵션이 많아서 설정에 시간을 더 쓰게 될 거예요. 이 옵션들이 엔드포인트가 원하는 일을 하도록 커스터마이즈해 줘요. 옵션은 엔드포인트가 consumer(from)로 쓰이는지, producer(to)로 쓰이는지, 둘 다인지에 따라 분류되기도 해요.
엔드포인트 설정은 대부분 엔드포인트 URI에 _path_와 query 파라미터로 바로 하는 경우가 많아요. Java에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정하려면 Endpoint DSL과 DataFormat DSL을 쓸 수도 있어요.
옵션을 설정할 때 좋은 습관은 Property Placeholders를 사용하는 거예요.
프로퍼티 플레이스홀더는 이런 장점이 있어요:
-
URL, 포트 번호, 민감한 정보 같은 설정을 하드코딩하는 걸 막아 줘요.
-
설정을 코드 밖으로 분리할 수 있어요.
-
코드가 더 유연해지고 재사용하기 좋아져요.
다음 두 섹션에서 모든 옵션을 나열해요. 먼저 컴포넌트 옵션, 그다음 엔드포인트 옵션 순서예요.
컴포넌트 옵션 (Component Options)
AWS Lambda 컴포넌트가 지원하는 옵션은 아래와 같아요.
| Name | Description | Default | Type |
|---|---|---|---|
| configuration (producer) | 컴포넌트 설정이에요. | Lambda2Configuration | |
| lazyStartProducer (producer) | producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. | false | boolean |
| operation (producer) |
수행할 연산이에요. listFunctions, getFunction, createFunction, deleteFunction 또는 invokeFunction이 가능해요.
Enum values:
-
listFunctions
-
getFunction
-
createAlias
-
deleteAlias
-
getAlias
-
listAliases
-
createFunction
-
deleteFunction
-
invokeFunction
-
updateFunction
-
createEventSourceMapping
-
deleteEventSourceMapping
-
listEventSourceMapping
-
listTags
-
tagResource
-
untagResource
-
publishVersion
-
listVersions
-
createFunctionUrlConfig
-
getFunctionUrlConfig
-
updateFunctionUrlConfig
-
deleteFunctionUrlConfig
-
listFunctionUrlConfigs
-
getFunctionConfiguration
-
updateFunctionConfiguration
-
putFunctionConcurrency
-
deleteFunctionConcurrency
-
getFunctionConcurrency
-
addPermission
-
removePermission
-
getPolicy
| invokeFunction | Lambda2Operations | | overrideEndpoint (producer) | 엔드포인트를 오버라이드할 필요가 있는지 설정해요. 이 옵션은 uriEndpointOverride 옵션과 조합해서 써야 합니다. | false | boolean | | pojoRequest (producer) | POJO 요청을 본문으로 쓸지 여부예요. | false | boolean | | region (producer) |
Lambda 클라이언트가 동작할 리전이에요. 이 파라미터를 쓰면 설정은 리전의 소문자 이름(예: ap-east-1)을 기대하고, Region.EU_WEST_1.id() 형태의 이름을 써야 해요.
Enum values:
-
ap-south-2
-
ap-south-1
-
eu-south-1
-
eu-south-2
-
us-gov-east-1
-
me-central-1
-
il-central-1
-
ca-central-1
-
eu-central-1
-
us-iso-west-1
-
eu-central-2
-
eu-isoe-west-1
-
us-west-1
-
us-west-2
-
af-south-1
-
eu-north-1
-
eu-west-3
-
eu-west-2
-
eu-west-1
-
ap-northeast-3
-
ap-northeast-2
-
ap-northeast-1
-
me-south-1
-
sa-east-1
-
ap-east-1
-
cn-north-1
-
ca-west-1
-
us-gov-west-1
-
ap-southeast-1
-
ap-southeast-2
-
us-iso-east-1
-
ap-southeast-3
-
ap-southeast-4
-
us-east-1
-
us-east-2
-
cn-northwest-1
-
us-isob-east-1
-
aws-global
-
aws-cn-global
-
aws-us-gov-global
-
aws-iso-global
-
aws-iso-b-global
| | String | | uriEndpointOverride (producer) | 오버라이드할 URI 엔드포인트를 설정해요. 이 옵션은 overrideEndpoint 옵션과 조합해서 써야 합니다. | | String | | autowiredEnabled (advanced) | 오토와이어링 사용 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 하나만 있는지 찾아서 컴포넌트에 자동으로 설정하는(옵션이 autowired로 표시돼 있어야 함) 자동 오토와이어링에 쓰입니다. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 설정할 때 유용해요. | true | boolean | | awsLambdaClient (advanced) | Autowired 이미 설정된 AwsLambdaClient 클라이언트를 사용해요. | | LambdaClient | | healthCheckConsumerEnabled (health) | 이 컴포넌트의 consumer 기반 헬스 체크를 모두 켜고 끌 때 사용해요. | true | boolean | | healthCheckProducerEnabled (health) | 이 컴포넌트의 producer 기반 헬스 체크를 모두 켜고 끌 때 사용해요. 참고: Camel은 기본으로 producer 기반 헬스 체크를 모두 꺼 둬요. camel.health.producersEnabled=true로 설정하면 producer 체크를 전역으로 켤 수 있습니다. | true | boolean | | proxyHost (proxy) | Lambda 클라이언트를 만들 때 사용할 프록시 호스트를 지정해요. | | String | | proxyPort (proxy) | Lambda 클라이언트를 만들 때 사용할 프록시 포트를 지정해요. | | Integer | | proxyProtocol (proxy) |
Lambda 클라이언트를 만들 때 사용할 프록시 프로토콜을 지정해요.
Enum values:
-
HTTP
-
HTTPS
| HTTPS | Protocol | | accessKey (security) | Amazon AWS Access Key예요. | | String | | profileCredentialsName (security) | 프로파일 자격 증명 프로바이더를 쓸 때 이 파라미터가 프로파일 이름을 지정해요. | | String | | secretKey (security) | Amazon AWS Secret Key예요. | | String | | sessionToken (security) | 사용자가 IAM 역할을 수행(assume)해야 할 때 쓰는 Amazon AWS Session Token이에요. | | String | | trustAllCertificates (security) | 엔드포인트를 오버라이드하는 경우 모든 인증서를 신뢰할지 여부예요. | false | boolean | | useDefaultCredentialsProvider (security) | Lambda 클라이언트가 기본 자격 증명 프로바이더를 통해 자격 증명을 읽을지, 아니면 정적 자격 증명이 전달될 것으로 기대할지 설정해요. | false | boolean | | useProfileCredentialsProvider (security) | Lambda 클라이언트가 프로파일 자격 증명 프로바이더를 통해 자격 증명을 읽을지 설정해요. | false | boolean | | useSessionCredentials (security) | Lambda 클라이언트가 세션 자격 증명(Session Credentials)을 쓸지 설정해요. Lambda에서 연산을 수행하기 위해 사용자가 IAM 역할을 수행(assume)해야 하는 상황에서 유용합니다. | false | boolean |
엔드포인트 옵션 (Endpoint Options)
AWS Lambda 엔드포인트는 다음 URI 문법으로 설정해요:
aws2-lambda:function
다음 _path_와 query 파라미터를 씁니다:
경로 파라미터 (Path Parameters)
| Name | Description | Default | Type |
|---|---|---|---|
| function (producer) | 필수 Lambda 함수 이름이에요. | String |
쿼리 파라미터 (Query Parameters)
| Name | Description | Default | Type |
|---|---|---|---|
| operation (producer) |
수행할 연산이에요. listFunctions, getFunction, createFunction, deleteFunction 또는 invokeFunction이 가능해요.
Enum values:
-
listFunctions
-
getFunction
-
createAlias
-
deleteAlias
-
getAlias
-
listAliases
-
createFunction
-
deleteFunction
-
invokeFunction
-
updateFunction
-
createEventSourceMapping
-
deleteEventSourceMapping
-
listEventSourceMapping
-
listTags
-
tagResource
-
untagResource
-
publishVersion
-
listVersions
-
createFunctionUrlConfig
-
getFunctionUrlConfig
-
updateFunctionUrlConfig
-
deleteFunctionUrlConfig
-
listFunctionUrlConfigs
-
getFunctionConfiguration
-
updateFunctionConfiguration
-
putFunctionConcurrency
-
deleteFunctionConcurrency
-
getFunctionConcurrency
-
addPermission
-
removePermission
-
getPolicy
| invokeFunction | Lambda2Operations | | overrideEndpoint (producer) | 엔드포인트를 오버라이드할 필요가 있는지 설정해요. 이 옵션은 uriEndpointOverride 옵션과 조합해서 써야 합니다. | false | boolean | | pojoRequest (producer) | POJO 요청을 본문으로 쓸지 여부예요. | false | boolean | | region (producer) |
Lambda 클라이언트가 동작할 리전이에요. 이 파라미터를 쓰면 설정은 리전의 소문자 이름(예: ap-east-1)을 기대하고, Region.EU_WEST_1.id() 형태의 이름을 써야 해요.
Enum values:
-
ap-south-2
-
ap-south-1
-
eu-south-1
-
eu-south-2
-
us-gov-east-1
-
me-central-1
-
il-central-1
-
ca-central-1
-
eu-central-1
-
us-iso-west-1
-
eu-central-2
-
eu-isoe-west-1
-
us-west-1
-
us-west-2
-
af-south-1
-
eu-north-1
-
eu-west-3
-
eu-west-2
-
eu-west-1
-
ap-northeast-3
-
ap-northeast-2
-
ap-northeast-1
-
me-south-1
-
sa-east-1
-
ap-east-1
-
cn-north-1
-
ca-west-1
-
us-gov-west-1
-
ap-southeast-1
-
ap-southeast-2
-
us-iso-east-1
-
ap-southeast-3
-
ap-southeast-4
-
us-east-1
-
us-east-2
-
cn-northwest-1
-
us-isob-east-1
-
aws-global
-
aws-cn-global
-
aws-us-gov-global
-
aws-iso-global
-
aws-iso-b-global
| | String | | uriEndpointOverride (producer) | 오버라이드할 URI 엔드포인트를 설정해요. 이 옵션은 overrideEndpoint 옵션과 조합해서 써야 합니다. | | String | | lazyStartProducer (producer (advanced)) | producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. | false | boolean | | awsLambdaClient (advanced) | Autowired 이미 설정된 AwsLambdaClient 클라이언트를 사용해요. | | LambdaClient | | proxyHost (proxy) | Lambda 클라이언트를 만들 때 사용할 프록시 호스트를 지정해요. | | String | | proxyPort (proxy) | Lambda 클라이언트를 만들 때 사용할 프록시 포트를 지정해요. | | Integer | | proxyProtocol (proxy) |
Lambda 클라이언트를 만들 때 사용할 프록시 프로토콜을 지정해요.
Enum values:
-
HTTP
-
HTTPS
| HTTPS | Protocol | | accessKey (security) | Amazon AWS Access Key예요. | | String | | profileCredentialsName (security) | 프로파일 자격 증명 프로바이더를 쓸 때 이 파라미터가 프로파일 이름을 지정해요. | | String | | secretKey (security) | Amazon AWS Secret Key예요. | | String | | sessionToken (security) | 사용자가 IAM 역할을 수행(assume)해야 할 때 쓰는 Amazon AWS Session Token이에요. | | String | | trustAllCertificates (security) | 엔드포인트를 오버라이드하는 경우 모든 인증서를 신뢰할지 여부예요. | false | boolean | | useDefaultCredentialsProvider (security) | Lambda 클라이언트가 기본 자격 증명 프로바이더를 통해 자격 증명을 읽을지, 아니면 정적 자격 증명이 전달될 것으로 기대할지 설정해요. | false | boolean | | useProfileCredentialsProvider (security) | Lambda 클라이언트가 프로파일 자격 증명 프로바이더를 통해 자격 증명을 읽을지 설정해요. | false | boolean | | useSessionCredentials (security) | Lambda 클라이언트가 세션 자격 증명(Session Credentials)을 쓸지 설정해요. Lambda에서 연산을 수행하기 위해 사용자가 IAM 역할을 수행(assume)해야 하는 상황에서 유용합니다. | false | boolean |
메시지 헤더 (Message Headers)
AWS Lambda 컴포넌트가 지원하는 메시지 헤더는 아래와 같아요:
| Name | Description | Default | Type |
|---|---|---|---|
CamelAwsLambdaOperation (all) Constant: OPERATION |
필수 수행하려는 연산이에요. 쿼리 파라미터로 전달된 operation을 재정의해요. | String | |
CamelAwsLambdaS3Bucket (createFunction) Constant: S3_BUCKET |
배포 패키지가 담긴 .zip 파일이 저장된 Amazon S3 버킷 이름이에요. 이 버킷은 Lambda 함수를 만드는 AWS 리전과 같은 리전에 있어야 해요. | String | |
CamelAwsLambdaS3Key (createFunction) Constant: S3_KEY |
업로드하려는 Amazon S3 객체(배포 패키지)의 키 이름이에요. | String | |
CamelAwsLambdaS3ObjectVersion (createFunction) Constant: S3_OBJECT_VERSION |
업로드하려는 Amazon S3 객체(배포 패키지)의 버전이에요. | String | |
CamelAwsLambdaZipFile (createFunction) Constant: ZIP_FILE |
zip 파일(배포 패키지)의 로컬 경로예요. zip 파일 내용을 메시지 본문에 담을 수도 있어요. | String | |
CamelAwsLambdaDescription (createFunction) Constant: DESCRIPTION |
사용자가 지정한 설명이에요. | String | |
CamelAwsLambdaRole (createFunction) Constant: ROLE |
필수 Lambda가 함수를 실행하면서 다른 Amazon Web Services(AWS) 리소스에 접근할 때 수행(assume)하는 IAM 역할의 Amazon Resource Name(ARN)이에요. | String | |
CamelAwsLambdaRuntime (createFunction) Constant: RUNTIME |
필수 업로드하는 Lambda 함수의 런타임 환경이에요. (nodejs, nodejs4.3, nodejs6.10, java8, python2.7, python3.6, dotnetcore1.0, odejs4.3-edge). | String | |
CamelAwsLambdaHandler (createFunction) Constant: HANDLER |
필수 Lambda가 실행을 시작하기 위해 호출하는 코드 안의 함수예요. Node.js라면 함수의 module-name.export 값이고, Java라면 package.class-name::handler 또는 package.class-name 형태가 될 수 있어요. | String | |
CamelAwsLambdaTargetArn (createFunction) Constant: TARGET_ARN |
Amazon SQS 큐 또는 Amazon SNS 토픽의 대상 ARN(Amazon Resource Name)을 담고 있는 부모 객체예요. | String | |
CamelAwsLambdaMemorySize (createFunction) Constant: MEMORY_SIZE |
함수에 설정한 메모리 크기(MB)예요. 64MB의 배수여야 해요. | Integer | |
CamelAwsLambdaKMSKeyArn (createFunction) Constant: KMS_KEY_ARN |
함수의 환경 변수를 암호화하는 데 쓰는 KMS 키의 Amazon Resource Name(ARN)이에요. 지정하지 않으면 AWS Lambda가 기본 서비스 키를 사용해요. | String | |
CamelAwsLambdaEnvironmentVariables (createFunction) Constant: ENVIRONMENT_VARIABLES |
환경 설정 값을 나타내는 키-값 쌍이에요. | Map | |
CamelAwsLambdaPublish (createFunction updateFunction) Constant: PUBLISH |
AWS Lambda에 Lambda 함수 생성과 버전 게시를 원자적(atomic) 연산으로 요청할 때 쓰는 불리언 파라미터예요. | Boolean | |
CamelAwsLambdaTimeout (createFunction) Constant: TIMEOUT |
Lambda가 함수를 종료해야 하는 함수 실행 시간이에요. 기본값은 3초예요. | Integer | |
CamelAwsLambdaTags (createFunction) Constant: TAGS |
새 함수에 할당되는 태그(키-값 쌍) 목록이에요. | Map | |
CamelAwsLambdaTracingConfig (createFunction) Constant: TRACING_CONFIG |
함수의 트레이싱 설정이에요(Active 또는 PassThrough). | String | |
CamelAwsLambdaSecurityGroupIds (createFunction) Constant: SECURITY_GROUP_IDS |
Lambda 함수가 VPC의 리소스에 접근한다면, VPC에 있는 보안 그룹 ID 하나 이상의 목록이에요. | List | |
CamelAwsLambdaSubnetIds (createFunction) Constant: SUBNET_IDS |
Lambda 함수가 VPC의 리소스에 접근한다면, VPC에 있는 서브넷 ID 하나 이상의 목록이에요. | List | |
CamelAwsLambdaEventSourceArn (createEventSourceMapping) Constant: EVENT_SOURCE_ARN |
이벤트 소스의 Amazon Resource Name(ARN)이에요. | String | |
CamelAwsLambdaEventSourceBatchSize (createEventSourceMapping) Constant: EVENT_SOURCE_BATCH_SIZE |
Lambda가 스트림이나 큐에서 가져와 함수로 보내는 배치(batch)당 최대 레코드 수예요. | Integer | |
CamelAwsLambdaEventSourceUuid (deleteEventSourceMapping) Constant: EVENT_SOURCE_UUID |
이벤트 소스 매핑의 식별자예요. | String | |
CamelAwsLambdaResourceArn (listTags tagResource untagResource) Constant: RESOURCE_ARN |
함수의 Amazon Resource Name(ARN)이에요. | String | |
CamelAwsLambdaResourceTags (tagResource) Constant: RESOURCE_TAGS |
함수에 적용할 태그 목록이에요. | Map | |
CamelAwsLambdaResourceTagKeys (untagResource) Constant: RESOURCE_TAG_KEYS |
함수에서 제거할 태그 키 목록이에요. | List | |
CamelAwsLambdaVersionDescription (publishVersion) Constant: VERSION_DESCRIPTION |
함수 설정의 설명을 대체할 버전 설명이에요. | String | |
CamelAwsLambdaVersionRevisionId (publishVersion) Constant: VERSION_REVISION_ID |
지정한 ID와 revision ID가 일치할 때만 함수를 업데이트해요. | String | |
CamelAwsLambdaFunctionVersion (createAlias listAliases) Constant: FUNCTION_VERSION |
별칭(alias)에 설정할 함수 버전이에요. | String | |
CamelAwsLambdaAliasFunctionName (createAlias deleteAlias getAlias) Constant: FUNCTION_ALIAS_NAME |
필수 별칭의 함수 이름이에요. | String | |
CamelAwsLambdaAliasFunctionDescription (createAlias) Constant: FUNCTION_ALIAS_DESCRIPTION |
별칭에 설정할 함수 설명이에요. | String | |
CamelAwsLambdaMarker (listFunctions listVersions listAliases listEventSourceMapping listTags) Constant: MARKER |
다음 결과 세트를 위한 마커예요. | String | |
CamelAwsLambdaMaxItems (listFunctions listVersions listAliases listEventSourceMapping) Constant: MAX_ITEMS |
반환할 최대 결과 수예요. | Integer | |
CamelAwsLambdaIsTruncated (listFunctions listVersions listAliases listEventSourceMapping) Constant: IS_TRUNCATED |
응답에 결과가 더 있는지(잘렸는지) 여부예요. | Boolean | |
CamelAwsLambdaFunctionArn (createFunction getFunction publishVersion createAlias getAlias) Constant: FUNCTION_ARN |
함수의 Amazon Resource Name(ARN)이에요. | String | |
CamelAwsLambdaStatusCode (invokeFunction) Constant: STATUS_CODE |
함수 호출(invoke)의 HTTP 상태 코드예요. | Integer | |
CamelAwsLambdaFunctionError (invokeFunction) Constant: FUNCTION_ERROR |
값이 있으면 함수 실행 중 에러가 발생했다는 뜻이에요. | String | |
CamelAwsLambdaLogResult (invokeFunction) Constant: LOG_RESULT |
실행 로그의 마지막 4KB예요. | String | |
CamelAwsLambdaFunctionUrlAuthType (createFunctionUrlConfig updateFunctionUrlConfig) Constant: FUNCTION_URL_AUTH_TYPE |
필수 함수 URL이 사용하는 인증 타입이에요. AWS_IAM으로 설정하면 인증된 사용자만 접근할 수 있고, NONE으로 설정하면 IAM 인증을 건너뛰고 누구나 함수를 호출할 수 있어요. | String | |
CamelAwsLambdaFunctionUrlQualifier (createFunctionUrlConfig updateFunctionUrlConfig getFunctionUrlConfig deleteFunctionUrlConfig) Constant: FUNCTION_URL_QUALIFIER |
함수 URL의 별칭 이름 또는 $LATEST예요. | String | |
CamelAwsLambdaFunctionUrlCorsAllowCredentials (createFunctionUrlConfig updateFunctionUrlConfig) Constant: FUNCTION_URL_CORS_ALLOW_CREDENTIALS |
함수 URL의 CORS(Cross-Origin Resource Sharing) 설정이에요. | String | |
CamelAwsLambdaFunctionUrlCorsAllowOrigins (createFunctionUrlConfig updateFunctionUrlConfig) Constant: FUNCTION_URL_CORS_ALLOW_ORIGINS |
CORS에서 허용되는 origin 목록이에요. | List | |
CamelAwsLambdaFunctionUrlCorsAllowMethods (createFunctionUrlConfig updateFunctionUrlConfig) Constant: FUNCTION_URL_CORS_ALLOW_METHODS |
CORS에서 허용되는 HTTP 메서드 목록이에요. | List | |
CamelAwsLambdaFunctionUrlCorsAllowHeaders (createFunctionUrlConfig updateFunctionUrlConfig) Constant: FUNCTION_URL_CORS_ALLOW_HEADERS |
CORS에서 허용되는 HTTP 헤더 목록이에요. | List | |
CamelAwsLambdaFunctionUrlCorsExposeHeaders (createFunctionUrlConfig updateFunctionUrlConfig) Constant: FUNCTION_URL_CORS_EXPOSE_HEADERS |
CORS에서 노출되는 헤더 목록이에요. | List | |
CamelAwsLambdaFunctionUrlCorsMaxAge (createFunctionUrlConfig updateFunctionUrlConfig) Constant: FUNCTION_URL_CORS_MAX_AGE |
CORS의 max age(초)예요. | Integer | |
CamelAwsLambdaFunctionUrl (createFunctionUrlConfig getFunctionUrlConfig) Constant: FUNCTION_URL |
함수 URL 엔드포인트예요. | String | |
CamelAwsLambdaFunctionMemorySize (updateFunctionConfiguration) Constant: FUNCTION_MEMORY_SIZE |
런타임에 함수에 할당되는 메모리 양이에요. 함수 메모리를 늘리면 CPU 할당도 함께 늘어나요. 기본값은 128MB이고, 값은 1MB의 배수면 돼요. | Integer | |
CamelAwsLambdaFunctionTimeout (updateFunctionConfiguration) Constant: FUNCTION_TIMEOUT |
Lambda가 함수를 멈추기 전까지 함수를 실행할 수 있는 시간(초)이에요. 기본값은 3초이고, 허용되는 최댓값은 900초예요. | Integer | |
CamelAwsLambdaFunctionRuntime (updateFunctionConfiguration) Constant: FUNCTION_RUNTIME |
함수의 새 런타임 환경이에요. | String | |
CamelAwsLambdaFunctionHandler (updateFunctionConfiguration) Constant: FUNCTION_HANDLER |
새 함수 핸들러예요. | String | |
CamelAwsLambdaReservedConcurrentExecutions (putFunctionConcurrency) Constant: RESERVED_CONCURRENT_EXECUTIONS |
필수 함수에 예약할 동시 실행 수예요. | Integer | |
CamelAwsLambdaStatementId (addPermission) Constant: STATEMENT_ID |
필수 권한의 유니크한 statement 식별자예요. | String | |
CamelAwsLambdaAction (addPermission) Constant: ACTION |
필수 principal이 함수에 사용할 수 있는 액션이에요. 예를 들어 lambda:InvokeFunction 또는 lambda:GetFunction이에요. | String | |
CamelAwsLambdaPrincipal (addPermission) Constant: PRINCIPAL |
필수 함수를 호출하는 Amazon Web Services 서비스, Amazon Web Services 계정, IAM 사용자, 또는 IAM 역할이에요. 예를 들어 s3.amazonaws.com 또는 123456789012가 있어요. | String | |
CamelAwsLambdaSourceAccount (addPermission) Constant: SOURCE_ACCOUNT |
principal의 Amazon Web Services 계정 ID예요. | String | |
CamelAwsLambdaSourceArn (addPermission) Constant: SOURCE_ARN |
함수를 호출하는 Amazon Web Services 리소스의 ARN이에요. 예를 들어 Amazon S3 버킷 또는 Amazon SNS 토픽이 있어요. | String |
Lambda 컴포넌트 필수 옵션 (Required Lambda component options)
Amazon Lambda 서비스에 접근하려면 레지스트리에 awsLambdaClient를 제공하거나 accessKey와 secretKey를 지정해야 해요.
사용법 (Usage)
정적 자격 증명, 기본 자격 증명 프로바이더, 프로파일 자격 증명 프로바이더 (Static credentials, Default Credential Provider and Profile Credentials Provider)
useDefaultCredentialsProvider 옵션을 지정하고 true로 설정하면, 명시적인 정적 자격 증명을 쓰지 않도록 할 수 있어요.
기본 자격 증명 프로바이더(Default Credentials Provider)의 평가 순서는 다음과 같아요:
-
Java 시스템 프로퍼티 -
aws.accessKeyId와aws.secretKey. -
환경 변수 -
AWS_ACCESS_KEY_ID와AWS_SECRET_ACCESS_KEY. -
AWS STS의 Web Identity Token.
-
공유 credentials 및 config 파일.
-
Amazon ECS 컨테이너 자격 증명 - 환경 변수
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI가 설정돼 있으면 Amazon ECS에서 읽어와요. -
Amazon EC2 인스턴스 프로파일 자격 증명.
useProfileCredentialsProvider 옵션을 true로 지정하고 profileCredentialsName에 프로파일 이름을 넣으면, 프로파일 자격 증명 프로바이더(Profile Credentials Provider)를 쓸 수도 있어요.
정적, 기본, 프로파일 자격 증명 중 한 가지만 동시에 사용할 수 있어요.
이에 대한 자세한 내용은 AWS credentials documentation에서 확인하세요.
사용 가능한 연산 목록 (List of Available Operations)
-
listFunctions
-
getFunction
-
createAlias
-
deleteAlias
-
getAlias
-
listAliases
-
createFunction
-
deleteFunction
-
invokeFunction
-
updateFunction
-
createEventSourceMapping
-
deleteEventSourceMapping
-
listEventSourceMapping
-
listTags
-
tagResource
-
untagResource
-
publishVersion
-
listVersions
-
createFunctionUrlConfig
-
getFunctionUrlConfig
-
updateFunctionUrlConfig
-
deleteFunctionUrlConfig
-
listFunctionUrlConfigs
-
getFunctionConfiguration
-
updateFunctionConfiguration
-
putFunctionConcurrency
-
deleteFunctionConcurrency
-
getFunctionConcurrency
-
addPermission
-
removePermission
-
getPolicy
예시 (Examples)
Producer 예시 (Producer Example)
컴포넌트가 어떻게 동작하는지 제대로 이해하려면 이 통합 테스트를 살펴보세요.
Producer 예제들 (Producer Examples)
- CreateFunction: AWS Lambda에서 함수를 하나 만들어 주는 연산이에요.
from("direct:createFunction")
.to("aws2-lambda://GetHelloWithName?operation=createFunction")
.to("mock:result");
<route>
<from uri="direct:createFunction"/>
<to uri="aws2-lambda://GetHelloWithName?operation=createFunction"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:createFunction
steps:
- to:
uri: aws2-lambda://GetHelloWithName
parameters:
operation: createFunction
- to:
uri: mock:result
그리고 다음을 전송하면 돼요.
Java 전용: 파일 업로드가 있는 ProducerTemplate 기반 Java 테스트 API
template.send("direct:createFunction", ExchangePattern.InOut, exchange -> {
exchange.getIn().setHeader("CamelAwsLambdaRuntime", "nodejs6.10");
exchange.getIn().setHeader("CamelAwsLambdaHandler", "GetHelloWithName.handler");
exchange.getIn().setHeader("CamelAwsLambdaDescription", "Hello with node.js on Lambda");
exchange.getIn().setHeader("CamelAwsLambdaRole",
"arn:aws:iam::643534317684:role/lambda-execution-role");
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(
classLoader
.getResource("org/apache/camel/component/aws2/lambda/function/node/GetHelloWithName.zip")
.getFile());
exchange.getIn().setBody(new FileInputStream(file));
});
Function URL 연산 (Function URL Operations)
Function URL은 Lambda 함수에 전용 HTTP(S) 엔드포인트를 제공해서, API Gateway 없이도 HTTP로 바로 함수를 호출할 수 있게 해 줘요.
- createFunctionUrlConfig: Lambda 함수의 Function URL을 만드는 연산이에요.
from("direct:createFunctionUrl")
.setHeader("CamelAwsLambdaFunctionUrlAuthType", constant("NONE"))
.to("aws2-lambda://myFunction?operation=createFunctionUrlConfig")
.to("mock:result");
<route>
<from uri="direct:createFunctionUrl"/>
<setHeader name="CamelAwsLambdaFunctionUrlAuthType">
<constant>NONE</constant>
</setHeader>
<to uri="aws2-lambda://myFunction?operation=createFunctionUrlConfig"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:createFunctionUrl
steps:
- setHeader:
name: CamelAwsLambdaFunctionUrlAuthType
constant: NONE
- to:
uri: aws2-lambda://myFunction
parameters:
operation: createFunctionUrlConfig
- to:
uri: mock:result
FUNCTION_URL_AUTH_TYPE은 NONE(공개 접근) 또는 AWS_IAM(인증된 접근)으로 지정할 수 있어요.
- getFunctionUrlConfig: Function URL 설정을 조회하는 연산이에요.
from("direct:getFunctionUrl")
.to("aws2-lambda://myFunction?operation=getFunctionUrlConfig")
.to("mock:result");
<route>
<from uri="direct:getFunctionUrl"/>
<to uri="aws2-lambda://myFunction?operation=getFunctionUrlConfig"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:getFunctionUrl
steps:
- to:
uri: aws2-lambda://myFunction
parameters:
operation: getFunctionUrlConfig
- to:
uri: mock:result
- updateFunctionUrlConfig: Function URL 설정을 업데이트하는 연산이에요.
from("direct:updateFunctionUrl")
.setHeader("CamelAwsLambdaFunctionUrlAuthType", constant("AWS_IAM"))
.to("aws2-lambda://myFunction?operation=updateFunctionUrlConfig")
.to("mock:result");
<route>
<from uri="direct:updateFunctionUrl"/>
<setHeader name="CamelAwsLambdaFunctionUrlAuthType">
<constant>AWS_IAM</constant>
</setHeader>
<to uri="aws2-lambda://myFunction?operation=updateFunctionUrlConfig"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:updateFunctionUrl
steps:
- setHeader:
name: CamelAwsLambdaFunctionUrlAuthType
constant: AWS_IAM
- to:
uri: aws2-lambda://myFunction
parameters:
operation: updateFunctionUrlConfig
- to:
uri: mock:result
- deleteFunctionUrlConfig: Function URL을 삭제하는 연산이에요.
from("direct:deleteFunctionUrl")
.to("aws2-lambda://myFunction?operation=deleteFunctionUrlConfig")
.to("mock:result");
<route>
<from uri="direct:deleteFunctionUrl"/>
<to uri="aws2-lambda://myFunction?operation=deleteFunctionUrlConfig"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:deleteFunctionUrl
steps:
- to:
uri: aws2-lambda://myFunction
parameters:
operation: deleteFunctionUrlConfig
- to:
uri: mock:result
- listFunctionUrlConfigs: 함수의 모든 Function URL을 나열하는 연산이에요.
from("direct:listFunctionUrls")
.to("aws2-lambda://myFunction?operation=listFunctionUrlConfigs")
.to("mock:result");
<route>
<from uri="direct:listFunctionUrls"/>
<to uri="aws2-lambda://myFunction?operation=listFunctionUrlConfigs"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:listFunctionUrls
steps:
- to:
uri: aws2-lambda://myFunction
parameters:
operation: listFunctionUrlConfigs
- to:
uri: mock:result
함수 설정 연산 (Function Configuration Operations)
함수 설정(Function Configuration) 연산으로 Lambda 함수의 런타임 설정을 조회하고 수정할 수 있어요.
- getFunctionConfiguration: 함수의 설정 상세를 조회하는 연산이에요.
from("direct:getFunctionConfiguration")
.to("aws2-lambda://myFunction?operation=getFunctionConfiguration")
.to("mock:result");
<route>
<from uri="direct:getFunctionConfiguration"/>
<to uri="aws2-lambda://myFunction?operation=getFunctionConfiguration"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:getFunctionConfiguration
steps:
- to:
uri: aws2-lambda://myFunction
parameters:
operation: getFunctionConfiguration
- to:
uri: mock:result
- updateFunctionConfiguration: 함수의 설정을 업데이트하는 연산이에요.
from("direct:updateFunctionConfiguration")
.setHeader("CamelAwsLambdaFunctionMemorySize", constant(512))
.setHeader("CamelAwsLambdaFunctionTimeout", constant(60))
.setHeader("CamelAwsLambdaDescription", constant("Updated function description"))
.to("aws2-lambda://myFunction?operation=updateFunctionConfiguration")
.to("mock:result");
<route>
<from uri="direct:updateFunctionConfiguration"/>
<setHeader name="CamelAwsLambdaFunctionMemorySize">
<constant resultType="java.lang.Integer">512</constant>
</setHeader>
<setHeader name="CamelAwsLambdaFunctionTimeout">
<constant resultType="java.lang.Integer">60</constant>
</setHeader>
<setHeader name="CamelAwsLambdaDescription">
<constant>Updated function description</constant>
</setHeader>
<to uri="aws2-lambda://myFunction?operation=updateFunctionConfiguration"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:updateFunctionConfiguration
steps:
- setHeader:
name: CamelAwsLambdaFunctionMemorySize
constant: 512
- setHeader:
name: CamelAwsLambdaFunctionTimeout
constant: 60
- setHeader:
name: CamelAwsLambdaDescription
constant: Updated function description
- to:
uri: aws2-lambda://myFunction
parameters:
operation: updateFunctionConfiguration
- to:
uri: mock:result
동시성 연산 (Concurrency Operations)
동시성(Concurrency) 연산으로 Lambda 함수의 예약 동시성(reserved concurrency)을 관리할 수 있어요.
- putFunctionConcurrency: 함수의 예약 동시성을 설정하는 연산이에요.
from("direct:putFunctionConcurrency")
.setHeader("CamelAwsLambdaReservedConcurrentExecutions", constant(100))
.to("aws2-lambda://myFunction?operation=putFunctionConcurrency")
.to("mock:result");
<route>
<from uri="direct:putFunctionConcurrency"/>
<setHeader name="CamelAwsLambdaReservedConcurrentExecutions">
<constant>100</constant>
</setHeader>
<to uri="aws2-lambda://myFunction?operation=putFunctionConcurrency"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:putFunctionConcurrency
steps:
- setHeader:
name: CamelAwsLambdaReservedConcurrentExecutions
constant: "100"
- to:
uri: aws2-lambda://myFunction
parameters:
operation: putFunctionConcurrency
- to:
uri: mock:result
- deleteFunctionConcurrency: 함수에서 예약 동시성을 제거하는 연산이에요.
from("direct:deleteFunctionConcurrency")
.to("aws2-lambda://myFunction?operation=deleteFunctionConcurrency")
.to("mock:result");
<route>
<from uri="direct:deleteFunctionConcurrency"/>
<to uri="aws2-lambda://myFunction?operation=deleteFunctionConcurrency"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:deleteFunctionConcurrency
steps:
- to:
uri: aws2-lambda://myFunction
parameters:
operation: deleteFunctionConcurrency
- to:
uri: mock:result
- getFunctionConcurrency: 함수의 예약 동시성을 조회하는 연산이에요.
from("direct:getFunctionConcurrency")
.to("aws2-lambda://myFunction?operation=getFunctionConcurrency")
.to("mock:result");
<route>
<from uri="direct:getFunctionConcurrency"/>
<to uri="aws2-lambda://myFunction?operation=getFunctionConcurrency"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:getFunctionConcurrency
steps:
- to:
uri: aws2-lambda://myFunction
parameters:
operation: getFunctionConcurrency
- to:
uri: mock:result
권한 연산 (Permission Operations)
권한(Permission) 연산으로 Lambda 함수의 리소스 기반 정책(resource-based policy)을 관리할 수 있어요.
- addPermission: 함수의 리소스 기반 정책에 권한을 추가하는 연산이에요.
from("direct:addPermission")
.setHeader("CamelAwsLambdaStatementId", constant("s3-invoke"))
.setHeader("CamelAwsLambdaAction", constant("lambda:InvokeFunction"))
.setHeader("CamelAwsLambdaPrincipal", constant("s3.amazonaws.com"))
.setHeader("CamelAwsLambdaSourceArn", constant("arn:aws:s3:::my-bucket"))
.to("aws2-lambda://myFunction?operation=addPermission")
.to("mock:result");
<route>
<from uri="direct:addPermission"/>
<setHeader name="CamelAwsLambdaStatementId">
<constant>s3-invoke</constant>
</setHeader>
<setHeader name="CamelAwsLambdaAction">
<constant>lambda:InvokeFunction</constant>
</setHeader>
<setHeader name="CamelAwsLambdaPrincipal">
<constant>s3.amazonaws.com</constant>
</setHeader>
<setHeader name="CamelAwsLambdaSourceArn">
<constant>arn:aws:s3:::my-bucket</constant>
</setHeader>
<to uri="aws2-lambda://myFunction?operation=addPermission"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:addPermission
steps:
- setHeader:
name: CamelAwsLambdaStatementId
constant: s3-invoke
- setHeader:
name: CamelAwsLambdaAction
constant: "lambda:InvokeFunction"
- setHeader:
name: CamelAwsLambdaPrincipal
constant: s3.amazonaws.com
- setHeader:
name: CamelAwsLambdaSourceArn
constant: "arn:aws:s3:::my-bucket"
- to:
uri: aws2-lambda://myFunction
parameters:
operation: addPermission
- to:
uri: mock:result
- removePermission: 함수의 리소스 기반 정책에서 권한을 제거하는 연산이에요.
from("direct:removePermission")
.setHeader("CamelAwsLambdaStatementId", constant("s3-invoke"))
.to("aws2-lambda://myFunction?operation=removePermission")
.to("mock:result");
<route>
<from uri="direct:removePermission"/>
<setHeader name="CamelAwsLambdaStatementId">
<constant>s3-invoke</constant>
</setHeader>
<to uri="aws2-lambda://myFunction?operation=removePermission"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:removePermission
steps:
- setHeader:
name: CamelAwsLambdaStatementId
constant: s3-invoke
- to:
uri: aws2-lambda://myFunction
parameters:
operation: removePermission
- to:
uri: mock:result
- getPolicy: 함수의 리소스 기반 정책을 조회하는 연산이에요.
from("direct:getPolicy")
.to("aws2-lambda://myFunction?operation=getPolicy")
.to("mock:result");
<route>
<from uri="direct:getPolicy"/>
<to uri="aws2-lambda://myFunction?operation=getPolicy"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: direct:getPolicy
steps:
- to:
uri: aws2-lambda://myFunction
parameters:
operation: getPolicy
- to:
uri: mock:result
Function URL에 CORS 설정을 지정할 수도 있어요.
Java 전용: CORS 헤더에 List 값이 필요해요
from("direct:createFunctionUrlWithCors")
.process(exchange -> {
exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlAuthType", "NONE");
exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlCorsAllowOrigins",
List.of("https://example.com"));
exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlCorsAllowMethods",
List.of("GET", "POST"));
exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlCorsAllowHeaders",
List.of("Content-Type", "Authorization"));
exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlCorsMaxAge", 3600);
})
.to("aws2-lambda://myFunction?operation=createFunctionUrlConfig")
.to("mock:result");
POJO를 본문으로 쓰기 (Using a POJO as body)
옵션이 여러 개다 보니 AWS 요청을 만드는 게 복잡할 때가 있어요. 그래서 POJO를 본문으로 쓰는 방법도 제공돼요. AWS Lambda에서는 제출할 수 있는 연산이 여러 가지인데, 예를 들어 Get Function 요청이라면 이렇게 할 수 있습니다:
Java 전용: AWS SDK builder가 필요해요
from("direct:getFunction")
.setBody(GetFunctionRequest.builder().functionName("test").build())
.to("aws2-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=getFunction&pojoRequest=true")
이렇게 하면 이 연산과 관련된 헤더와 옵션을 일일이 넘기지 않고도 요청을 바로 전달할 수 있어요.
의존성 (Dependencies)
Maven 사용자는 pom.xml에 다음 의존성을 추가해야 해요.
pom.xml
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-aws2-lambda</artifactId>
<version>${camel-version}</version>
</dependency>
여기서 ${camel-version}은 실제 Camel 버전으로 바꿔야 해요.
더 알아보기 (Learn more)
Lambda 함수 운영 예제는 위의 예시 (Examples) 섹션에서 Function URL·함수 설정·동시성·권한 연산별로 확인할 수 있어요. 자격 증명 설정 방법이 궁금하면 AWS credentials documentation을 참고하고, 컴포넌트 동작을 깊이 이해하려면 AWS2 Lambda 통합 테스트를 살펴보는 것도 좋아요. 의존성 좌표는 위의 의존성(Dependencies) 섹션 그대로 camel-aws2-lambda 아티팩트를 쓰면 됩니다.