Amazon EventBridge Pipes 입력 변환
Amazon EventBridge 파이프는 데이터를 보강과 대상으로 전달할 때 선택적 입력 변환기를 지원합니다. 입력 변환기를 사용하여 보강 또는 대상 서비스의 요구 사항에 맞게 JSON 이벤트 입력 페이로드를 재구성할 수 있습니다. Amazon API Gateway 및 API 대상의 경우 다음과 같이 입력 이벤트를 API의 RESTful 모델에 맞출 수 있습니다. 입력 변환기는 InputTemplate
파라미터로 모델링됩니다. 자유 텍스트, 이벤트 페이로드의 JSON 경로 또는 이벤트 페이로드에 대한 인라인 JSON 경로를 포함하는 JSON 객체일 수 있습니다. 보강을 위해 이벤트 페이로드는 소스에서 가져옵니다. 대상의 경우 파이프에 구성된 경우 보강에서 반환되는 것이 이벤트 페이로드입니다. 이벤트 페이로드의 서비스별 데이터 외에도 InputTemplate
의 예약 변수를 사용하여 파이프의 데이터를 참조할 수 있습니다.
배열의 항목에 액세스하려면 대괄호 표기법을 사용하세요.
참고
EventBridge는 일부 JSON 경로 구문을 지원하며 런타임 시 이를 평가합니다. 지원되는 구문은 다음과 같습니다.
점 표기법(예:
$.detail
)대시
밑줄
영숫자
배열 인덱스
와일드카드(*)
다음은 Amazon SQS 이벤트 페이로드를 참조하는 샘플 InputTemplate
파라미터입니다.
정적 문자열
InputTemplate: "Hello, sender"
JSON 경로
InputTemplate: <$.attributes.SenderId>
동적 문자열
InputTemplate: "Hello, <$.attributes.SenderId>"
정적 JSON
InputTemplate: > { "key1": "value1", "key2": "value2", "key3": "value3", }
다이나믹 JSON
InputTemplate: > { "key1": "value1" "key2": <$.body.key>, "d": <aws.pipes.event.ingestion-time> }
대괄호 표기법을 사용하여 배열의 항목에 액세스합니다.
InputTemplate: > { "key1": "value1" "key2": <$.body.Records[3]>, "d": <aws.pipes.event.ingestion-time> }
참고
EventBridge는 유효한 JSON 출력을 보장하기 위해 런타임 시 입력 변환기를 대체합니다. 따라서 JSON 경로 파라미터를 참조하는 변수는 따옴표로 묶고 JSON 객체 또는 배열을 참조하는 변수는 따옴표로 묶지 마세요.
예약된 변수
입력 템플릿은 다음 예약된 변수를 사용할 수 있습니다.
<aws.pipes.pipe-arn>
- 파이프의 Amazon 리소스 이름(ARN)입니다.<aws.pipes.pipe-name>
- 파이프의 이름입니다.<aws.pipes.source-arn>
– 파이프의 이벤트 소스의 ARN입니다.<aws.pipes.enrichment-arn>
– 파이프의 보강에 대한 ARN입니다.<aws.pipes.target-arn>
– 파이프의 대상 ARN입니다.<aws.pipes.event.ingestion-time>
– 입력 변환기가 이벤트를 수신한 시간입니다. 이는 ISO 8601 타임스탬프입니다. 이 시간은 보강이 이벤트 처리를 완료한 시기에 따라 보강 입력 변환기와 대상 입력 변환기의 시간이 다릅니다.<aws.pipes.event>
– 입력 변환기가 수신한 이벤트입니다.보강 입력 변환기의 경우 이는 소스에서 발생한 이벤트입니다. 여기에는 소스의 원본 페이로드와 추가적인 서비스별 메타데이터가 포함됩니다. 서비스 관련 예제는 Amazon EventBridge 파이프 소스 섹션을 참조하세요.
대상 입력 변환기의 경우 추가 메타데이터 없이 보강(구성된 경우)에서 반환되는 이벤트입니다. 따라서 보강 반환 페이로드는 JSON이 아닐 수 있습니다. 파이프에 보강이 구성되어 있지 않은 경우 메타데이터가 있는 소스에서 발생한 이벤트입니다.
<aws.pipes.event.json>
-aws.pipes.event
와 같지만 원본 페이로드(소스에서 또는 보강을 통해 반환됨)가 JSON인 경우에만 변수에 값이 있습니다. 파이프에 인코딩된 필드(예: Amazon SQSbody
필드 또는 Kinesisdata
)가 있는 경우 해당 필드는 디코딩되어 유효한 JSON으로 바뀝니다. 이스케이프되지 않기 때문에 변수는 JSON 필드의 값으로만 사용할 수 있습니다. 자세한 내용은 암시적 본문 데이터 구문 분석 단원을 참조하십시오.
입력 변환 예제
다음은 샘플 이벤트로 사용할 수 있는 Amazon EC2 이벤트의 예입니다.
{
"version": "0",
"id": "7bf73129-1428-4cd3-a780-95db273d1602",
"detail-type": "EC2 Instance State-change Notification",
"source": "aws.ec2",
"account": "123456789012",
"time": "2015-11-11T21:29:54Z",
"region": "us-east-1",
"resources": [
"arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"
],
"detail": {
"instance-id": "i-0123456789",
"state": "RUNNING"
}
}
다음 JSON을 변환기로 사용하겠습니다.
{
"instance" : <$.detail.instance-id>,
"state": <$.detail.state>,
"pipeArn" : <aws.pipes.pipe-arn>,
"pipeName" : <aws.pipes.pipe-name>,
"originalEvent" : <aws.pipes.event.json>
}
결과 출력은 다음과 같습니다.
{
"instance" : "i-0123456789",
"state": "RUNNING",
"pipeArn" : "arn:aws:pipe:us-east-1:123456789012:pipe/example",
"pipeName" : "example",
"originalEvent" : {
... // commented for brevity
}
}
암시적 본문 데이터 구문 분석
수신 페이로드의 다음 필드는 JSON으로 이스케이프 처리되거나(예: Amazon SQS body
객체) base64로 인코딩될 수 있습니다(예: Kinesis data
객체). 필터링과 입력 변환 모두에서 EventBridge는 이러한 필드를 유효한 JSON으로 변환하므로 하위 값을 직접 참조할 수 있습니다. 예를 들어, Kinesis의 경우 <$.data.someKey>
입니다.
추가 메타데이터 없이 대상이 원본 페이로드를 수신하도록 하려면 소스별 본문 데이터와 함께 입력 변환기를 사용하세요. Amazon SQS의 경우 <$.body>
, Kinesis의 경우 <$.data>
를 예로 들 수 있습니다. 원본 페이로드가 유효한 JSON 문자열(예: {"key": "value"}
)인 경우 소스별 본문 데이터와 함께 입력 변환기를 사용하면 원본 소스 페이로드 내의 따옴표가 제거됩니다. 예를 들어, {"key": "value"}
는 대상에 전달되면 "{key: value}"
가 됩니다. 대상에 유효한 JSON 페이로드(예: EventBridge Lambda 또는 Step Functions)가 필요한 경우 전송이 실패합니다. 잘못된 JSON을 생성하지 않고 대상이 원본 소스 데이터를 수신하도록 하려면 소스 본문 데이터 입력 변환기를 JSON으로 래핑하세요. 예: {"data": <$.data>}
.
암시적 본문 구문 분석을 사용하여 대부분의 파이프 대상 또는 보강 파라미터의 값을 동적으로 채울 수도 있습니다. 자세한 내용은 동적 경로 파라미터 단원을 참조하세요.
참고
원본 페이로드가 유효한 JSON인 경우 이 필드에는 이스케이프 처리되지 않고 base64로 인코딩되지 않은 JSON이 포함됩니다. 하지만 페이로드가 유효한 JSON이 아닌 경우, EventBridge는 Amazon SQS를 제외하고 아래 나열된 필드를 base64로 인코딩합니다.
Active MQ –
data
Kinesis –
data
Amazon MSK –
key
및value
Rabbit MQ –
data
자체 관리형 Apache Kafka; –
key
및value
Amazon SQS –
body
입력 변환과 관련된 일반적인 문제
다음은 EventBridge 파이프에서 입력을 변환할 때 발생하는 몇 가지 일반적인 문제입니다.
-
문자열의 경우 따옴표가 필요합니다.
-
템플릿에 대한 JSON 경로를 만들 때 검증이 수행되지 않습니다.
-
변수를 지정하여 이벤트에 존재하지 않는 JSON 경로를 일치시키는 경우 변수가 생성되지 않기 때문에 출력에 나타나지 않습니다.
-
aws.pipes.event.json
과 같은 JSON 속성은 JSON 필드의 값으로만 사용할 수 있으며 다른 문자열에서는 인라인으로 사용할 수 없습니다. -
EventBridge는 대상에 대한 입력 템플릿을 채울 때 입력 경로에서 추출된 값을 이스케이프하지 않습니다.
-
JSON 경로가 JSON 객체 또는 배열을 참조하지만 변수가 문자열에서 참조되는 경우, EventBridge는 문자열이 유효하도록 모든 내부 따옴표를 제거합니다. 예를 들어 "Body is <$.body>"를 입력하면 EventBridge가 객체에서 따옴표를 제거하게 됩니다.
따라서 단일 JSON 경로 변수를 기반으로 JSON 객체를 출력하려면 해당 변수를 키로 배치해야 합니다. 이 예에서는
{"body": <$.body>}
입니다. -
문자열을 나타내는 변수에는 따옴표가 필요하지 않습니다. 따옴표가 허용되지만 EventBridge 파이프는 변환 중에 문자열 변수 값에 자동으로 따옴표를 추가하여 변환 출력이 유효한 JSON인지 확인합니다. EventBridge 파이프는 JSON 객체 또는 배열을 나타내는 변수에 따옴표를 추가하지 않습니다. JSON 객체 또는 배열을 나타내는 변수에 따옴표를 추가하지 마세요.
예를 들어 다음 입력 템플릿에는 문자열과 JSON 객체를 모두 나타내는 변수가 포함되어 있습니다.
{ "pipeArn" : <aws.pipes.pipe-arn>, "pipeName" : <aws.pipes.pipe-name>, "originalEvent" : <aws.pipes.event.json> }
올바른 따옴표를 사용하여 유효한 JSON을 생성합니다.
{ "pipeArn" : "arn:aws:events:us-east-2:123456789012:pipe/example", "pipeName" : "example", "originalEvent" : { ... // commented for brevity } }
-
Lambda 또는 Step Functions 보강 또는 대상의 경우 배치 크기가 1이더라도 배치는 JSON 배열로 대상에 전달됩니다. 하지만 입력 변환기는 여전히 배열 전체가 아닌 JSON 배열의 개별 레코드에 적용됩니다. 자세한 내용은 Amazon EventBridge 파이프 일괄 처리 및 동시성 단원을 참조하십시오.