아마존 EventBridge 인풋 트랜스포메이션 - 아마존 EventBridge

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

아마존 EventBridge 인풋 트랜스포메이션

정보를 규칙 대상으로 EventBridge 전달하기 전에 이벤트의 텍스트를 사용자 정의할 수 있습니다. 콘솔 또는 API의 입력 변환기를 통해 JSON 경로를 사용하여 원래 이벤트 소스의 값을 참조하는 변수를 정의합니다. 변환된 이벤트는 원래 이벤트 대신 대상으로 전송됩니다. 그러나 동적 경로 파라미터는 변환된 이벤트가 아닌 원래 이벤트를 참조해야 합니다. 입력에서 각 값을 할당하여 최대 100개의 변수를 정의할 수 있습니다. 그런 다음, <variable-name>으로 입력 템플릿 내에서 이러한 변수를 사용할 수 있습니다.

입력 변환기 사용에 대한 자습서는 자습서: 입력 변환기를 사용하여 이벤트 대상으로 EventBridge 전달되는 내용을 사용자 지정하십시오. 섹션을 참조하세요.

참고

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

  • 점 표기법(예: $.detail)

  • 대시

  • 밑줄

  • 영숫자

  • 배열 인덱스

  • 와일드카드(*)

미리 정의된 변수

JSON 경로를 정의하지 않고 사용할 수 있는 미리 정의된 변수가 있습니다. 이러한 변수는 예약되어 있으며 이러한 이름으로 변수를 만들 수 없습니다.

  • aws.events.rule-arn— 규칙의 Amazon 리소스 이름 (ARN). EventBridge

  • aws.events.rule-name— EventBridge 규칙의 이름.

  • aws.events.event.ingestion-time— 이벤트가 수신된 시간 EventBridge. 이는 ISO 8601 타임스탬프입니다. 이 변수는 에서 EventBridge 생성되며 덮어쓸 수 없습니다.

  • aws.events.event — JSON 형식의 원본 이벤트 페이로드입니다(detail 필드 제외). 내용이 이스케이프되지 않으므로 JSON 필드의 값으로만 사용할 수 있습니다.

  • aws.events.event.json — JSON 형식의 전체 원본 이벤트 페이로드입니다(detail 필드 포함). 내용이 이스케이프되지 않으므로 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 경로를 사용하여 이벤트의 항목을 참조하고 해당 값을 변수에 저장합니다. 예를 들어 첫 번째 텍스트 상자에 다음을 입력하여 이벤트 예제의 값을 참조하는 입력 경로를 만들 수 있습니다. 대괄호와 인덱스를 사용해 배열에서 항목을 가져올 수도 있습니다.

참고

EventBridge 유효한 JSON 출력을 보장하기 위해 런타임 시 입력 변환기를 대체합니다. 따라서 JSON 경로 파라미터를 참조하는 변수는 따옴표로 묶고 JSON 객체 또는 배열을 참조하는 변수는 따옴표로 묶지 마세요.

{ "timestamp" : "$.time", "instance" : "$.detail.instance-id", "state" : "$.detail.state", "resource" : "$.resources[0]" }

이는 <timestamp>, <instance>, <state><resource>라는 4가지 변수를 정의합니다. 입력 템플릿을 만들 때 이러한 변수를 참조할 수 있습니다.

입력 템플릿은 대상에 전달하려는 정보에 대한 템플릿입니다. 문자열이나 JSON을 대상에 전달하는 템플릿을 만들 수 있습니다. 다음 입력 템플릿 예는 이전 이벤트 및 입력 경로를 사용하여 이벤트를 대상으로 라우팅하기 전에 예제 출력으로 변환합니다.

설명 Template 출력
단순 문자열
"instance <instance> is in <state>"
"instance i-0123456789 is in RUNNING"

이스케이프된 따옴표가 있는 문자열

"instance \"<instance>\" is in <state>"
"instance \"i-0123456789\" is in RUNNING"

이 동작은 콘솔에서의 동작이라는 점에 유의하세요. EventBridge AWS CLI 는 슬래시 문자를 이스케이프하고 결과는 "instance "i-0123456789" is in RUNNING"입니다.

단순 JSON

{ "instance" : <instance>, "state": <state> }
{ "instance" : "i-0123456789", "state": "RUNNING" }

문자열과 변수가 포함된 JSON

{ "instance" : <instance>, "state": "<state>", "instanceStatus": "instance \"<instance>\" is in <state>" }
{ "instance" : "i-0123456789", "state": "RUNNING", "instanceStatus": "instance \"i-0123456789\" is in RUNNING" }

변수와 정적 정보가 혼합된 JSON

{ "instance" : <instance>, "state": [ 9, <state>, true ], "Transformed" : "Yes" }
{ "instance" : "i-0123456789", "state": [ 9, "RUNNING", true ], "Transformed" : "Yes" }

JSON에 예약된 변수 포함

{ "instance" : <instance>, "state": <state>, "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }
{ "instance" : "i-0123456789", "state": "RUNNING", "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }

문자열에 예약된 변수 포함

"<aws.events.rule-name> triggered"
"example triggered"

아마존 CloudWatch 로그 그룹

{ "timestamp" : <timestamp>, "message": "instance \"<instance>\" is in <state>" }
{ "timestamp" : 2015-11-11T21:29:54Z, "message": "instance "i-0123456789" is in RUNNING }

API를 사용하여 입력을 변환합니다. EventBridge

EventBridge API를 사용하여 입력을 변환하는 방법에 대한 자세한 내용은 입력 변환기를 사용하여 이벤트에서 데이터를 추출하고 해당 데이터를 대상에 입력하기 항목을 참조하십시오.

를 사용하여 입력을 변환합니다. AWS CloudFormation

입력을 변환하는 AWS CloudFormation 데 사용하는 방법에 대한 자세한 내용은 을 참조하십시오 AWS::Events::Rule InputTransformer.

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

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

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

  • 템플릿에 대한 JSON 경로를 만들 때 검증이 수행되지 않습니다.

  • 변수를 지정하여 이벤트에 존재하지 않는 JSON 경로를 일치시키는 경우 변수가 생성되지 않기 때문에 출력에 나타나지 않습니다.

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

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

  • JSON 경로가 JSON 개체 또는 배열을 참조하지만 변수가 문자열에서 참조되는 경우 유효한 문자열이 되도록 내부 따옴표를 EventBridge 제거합니다. 예를 들어$.detail, “Detail is”를 <detail> 가리키는 변수의 경우 <detail>객체에서 따옴표가 EventBridge 제거됩니다.

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

  • 문자열을 나타내는 변수에는 따옴표가 필요하지 않습니다. 허용되지만 변환 출력이 유효한 JSON인지 확인하기 위해 변환 중에 문자열 변수 값에 EventBridge 자동으로 따옴표를 추가합니다. EventBridge JSON 개체 또는 배열을 나타내는 변수에는 따옴표를 추가하지 않습니다. JSON 객체 또는 배열을 나타내는 변수에 따옴표를 추가하지 마세요.

    예를 들어 다음 입력 템플릿에는 문자열과 JSON 객체를 모두 나타내는 변수가 포함되어 있습니다.

    { "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }

    올바른 따옴표를 사용하여 유효한 JSON을 생성합니다.

    { "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }
  • 여러 줄 문자열로 출력되는 (JSON이 아닌) 텍스트의 경우 입력 템플릿의 각 줄을 큰 따옴표로 묶으십시오.

    예를 들어, 다음 이벤트 패턴에 대해 Amazon Inspector Finding EVENTS를 일치시키는 경우를 예로 들어 보겠습니다.

    { "detail": { "severity": ["HIGH"], "status": ["ACTIVE"] }, "detail-type": ["Inspector2 Finding"], "source": ["inspector2"] }

    그리고 다음 입력 경로를 사용하세요.

    { "account": "$.detail.awsAccountId", "ami": "$.detail.resources[0].details.awsEc2Instance.imageId", "arn": "$.detail.findingArn", "description": "$.detail.description", "instance": "$.detail.resources[0].id", "platform": "$.detail.resources[0].details.awsEc2Instance.platform", "region": "$.detail.resources[0].region", "severity": "$.detail.severity", "time": "$.time", "title": "$.detail.title", "type": "$.detail.type" }

    아래 입력 템플릿을 사용하여 여러 줄 문자열 출력을 생성할 수 있습니다.

    "<severity> severity finding <title>" "Description: <description>" "ARN: \"<arn>\"" "Type: <type>" "AWS Account: <account>" "Region: <region>" "EC2 Instance: <instance>" "Platform: <platform>" "AMI: <ami>"