아마존 EventBridge 파이프 입력 변환 - 아마존 EventBridge

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

아마존 EventBridge 파이프 입력 변환

Amazon EventBridge Pipes는 데이터를 보강 및 대상으로 전달할 때 선택적 입력 변환기를 지원합니다. 입력 변환기를 사용하여 강화 또는 대상 서비스의 요구 사항에 맞게 JSON 이벤트 입력 페이로드를 재구성할 수 있습니다. Amazon API Gateway 및 API 목적지의 경우 다음과 같이 입력 이벤트를 RESTful 모델에 맞게 구성합니다API. 입력 변환기는 InputTemplate 파라미터로 모델링됩니다. 자유 텍스트, 이벤트 페이로드 JSON 경로 또는 이벤트 페이로드의 인라인 JSON 경로를 포함하는 JSON 객체일 수 있습니다. 보강을 위해 이벤트 페이로드는 소스에서 가져옵니다. 대상의 경우 파이프에 구성된 경우 보강에서 반환되는 것이 이벤트 페이로드입니다. 이벤트 페이로드의 서비스별 데이터 외에도 InputTemplate예약 변수를 사용하여 파이프의 데이터를 참조할 수 있습니다.

배열의 항목에 액세스하려면 대괄호 표기법을 사용하세요.

참고

EventBridge 모든 JSON Path 구문을 지원하지는 않으며 런타임에 이를 평가합니다. 지원되는 구문은 다음과 같습니다.

  • 점 표기법(예: $.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> – 입력 변환기가 이벤트를 수신한 시간입니다. ISO8601 타임스탬프입니다. 이 시간은 보강이 이벤트 처리를 완료한 시기에 따라 보강 입력 변환기와 대상 입력 변환기의 시간이 다릅니다.

  • <aws.pipes.event> – 입력 변환기가 수신한 이벤트입니다.

    보강 입력 변환기의 경우 이는 소스에서 발생한 이벤트입니다. 여기에는 소스의 원본 페이로드와 추가적인 서비스별 메타데이터가 포함됩니다. 서비스 관련 예제는 아마존 EventBridge 파이프 소스 섹션을 참조하세요.

    대상 입력 변환기의 경우 추가 메타데이터 없이 보강(구성된 경우)에서 반환되는 이벤트입니다. 따라서 인리치먼트가 반환한 페이로드는 non--일 수 있습니다. JSON 파이프에 보강이 구성되어 있지 않은 경우 메타데이터가 있는 소스에서 발생한 이벤트입니다.

  • <aws.pipes.event.json>— 와 aws.pipes.event 같지만 소스에서 가져온 원본 페이로드 또는 보강을 통해 반환된 원래 페이로드가 다음과 같은 경우에만 변수에 값이 있습니다. JSON 파이프에 Amazon SQS body 필드 또는 data Kinesis와 같은 인코딩된 필드가 있는 경우 해당 필드는 디코딩되어 유효한 것으로 바뀝니다. JSON 이스케이프되지 않기 때문에 변수는 필드 값으로만 사용할 수 있습니다. JSON 자세한 내용은 암시적 본문 데이터 구문 분석 단원을 참조하십시오.

입력 변환 예제

다음은 샘플 EC2 이벤트로 사용할 수 있는 예제 Amazon 이벤트입니다.

{ "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 } }

암시적 본문 데이터 구문 분석

수신 페이로드의 다음 필드는 Amazon SQS body 객체와 같이 JSON -이스케이프 처리되거나 Kinesis 객체와 같이 base64로 인코딩될 수 있습니다. data 필터링과 입력 변환 모두에서 하위 값을 직접 참조할 수 있도록 이러한 필드를 유효한 필드로 EventBridge 변환합니다. JSON 예를 들어, Kinesis의 경우 <$.data.someKey>입니다.

추가 메타데이터 없이 대상이 원본 페이로드를 수신하도록 하려면 소스별 본문 데이터와 함께 입력 변환기를 사용하세요. 아마존이나 <$.body> <$.data> Kinesis의 SQS 경우를 예로 들 수 있습니다. 원본 페이로드가 유효한 JSON 문자열인 경우 (예:{"key": "value"}) 소스별 본문 데이터와 함께 입력 변환기를 사용하면 원본 소스 페이로드 내의 따옴표가 제거됩니다. 예를 들어, {"key": "value"}는 대상에 전달되면 "{key: value}"가 됩니다. 대상에 유효한 JSON 페이로드 (예: EventBridge Lambda 또는 Step Functions) 가 필요한 경우 전송이 실패합니다. 잘못된 데이터를 생성하지 JSON 않고 대상이 원본 소스 데이터를 수신하도록 하려면 소스 본체 데이터 입력 변환기를 래핑하십시오. JSON 예: {"data": <$.data>}.

암시적 본문 구문 분석을 사용하여 대부분의 파이프 대상 또는 보강 파라미터의 값을 동적으로 채울 수도 있습니다. 자세한 내용은 동적 경로 파라미터 단원을 참조하세요.

참고

원본 페이로드가 유효한 JSON 경우 이 필드에는 이스케이프 처리되지 않고 base64로 인코딩되지 않은 내용이 포함됩니다. JSON 그러나 페이로드가 유효하지 않은 경우 JSON Amazon을 제외하고 아래 나열된 필드를 EventBridge base64로 인코딩합니다. SQS

  • Active MQdata

  • Kinesisdata

  • 아마존 MSKkey 그리고 value

  • Rabbit MQdata

  • 자체 관리형 Apache Kafka;keyvalue

  • 아마존 SQSbody

입력 변환과 관련된 일반적인 문제

EventBridge 파이프의 입력을 변환할 때 흔히 발생하는 몇 가지 문제는 다음과 같습니다.

  • 문자열의 경우 따옴표가 필요합니다.

  • 템플릿 JSON 경로를 생성할 때는 검증이 되지 않습니다.

  • 이벤트에 존재하지 않는 JSON 경로와 일치하도록 변수를 지정하는 경우 해당 변수는 생성되지 않고 출력에 표시되지 않습니다.

  • JSON와 같은 속성은 JSON 필드 값으로만 사용할 aws.pipes.event.json 수 있으며 다른 문자열에서는 인라인으로 사용할 수 없습니다.

  • EventBridge 대상의 입력 템플릿을 채울 때 입력 경로에서 추출한 값을 이스케이프하지 않습니다.

  • JSON경로가 JSON 개체 또는 배열을 참조하지만 변수가 문자열에서 참조되는 경우 내부 따옴표를 EventBridge 제거하여 문자열이 유효한지 확인합니다. 예를 들어 “Body is is <$.body>”를 지정하면 객체에서 EventBridge 따옴표가 제거됩니다.

    따라서 단일 JSON 경로 변수를 기반으로 JSON 객체를 출력하려면 객체를 키로 배치해야 합니다. 이 예에서는 {"body": <$.body>}입니다.

  • 문자열을 나타내는 변수에는 따옴표가 필요하지 않습니다. 허용되지만 EventBridge Pipes는 변환 중에 문자열 변수 값에 따옴표를 자동으로 추가하여 변환 출력이 JSON 유효한지 확인합니다. EventBridge Pipes는 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 Pipes 일괄 처리 및 동시성 단원을 참조하십시오.