Eventbridge Input Transformer example doesnt work

0

I am trying to setup an eventbridge input transformer, and am following the example instructions on this page: https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html

I need to use reserved variables, so I am testing by trying to use the input template with the description:

Including reserved variables in JSON

Here is my Input Template:

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

According to the docs, Generate Output is supposed to result in:

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

but instead I am getting:

{
  "instance" : i-0123456789,
  "state": RUNNING,
  "ruleArn" : <aws.events.rule-arn>,
  "ruleName" : <aws.events.rule-name>,
  "originalEvent" : <aws.events.event>
}

Is this broken, or am I missing something?

I also need to transform the input before being sent to an EventBridge event bus in another account as a Target, but when I select that as the target, the ability to configure the target input as an Input Transformer disappears from the Additional Settings section.

Is this not supported? It is obviously a critical use case to be able to filter data before it crosses account boundaries.

Ethan
질문됨 2년 전3753회 조회
1개 답변
0

Hi Ethan, thanks for reaching out!

When setting up an Input Transformer in the console, the reserved variables won't populate in the Input Transformer set-up window when clicking Generate Output to test a Transformer. However, these variables will populate after creating the Transformer, saving the rule, and passing an event that triggers the rule. For example, here's the output of an event using the same Input Transformer from the documentation utilizing the reserved variables:

{
	"instance": "i-68b59f5e3e8m74d47",
	"state": "stopped",
	"ruleArn": "arn:aws:events:us-west-1:123456789012:rule/InputTransformerTest",
	"ruleName": "InputTransformerTest",
	"originalEvent": {
		"id": "79bb5757-adab-984d-crr1-71af1f67d7894",
		"account": "123456789012",
		"detailType": "EC2 Instance State-change Notification",
		"time": 1652796616000,
		"source": "aws.ec2",
		"region": "us-west-1",
		"resources": ["arn:aws:ec2:us-west-1:123456789012:instance/i-68b59f5e3e8m74d47"],
		"version": "0"
	}
}

As for utilizing Input Transformers when sending events to another event bus, you are correct that this is not supported. When sending events to another event bus, the entire event must be passed as is. As workarounds, you can either:

  1. Send the full event to the target event bus as is, and place the desired Input Transfomer on a rule in the target event bus.

  2. Send the event data to a Lambda function target, and have the Lambda function parse and format the event, and perform the PutEvents API to send the transformed event data to the target event bus.

AWS
지원 엔지니어
답변함 2년 전
  • Neither of these workarounds resolves my use case, which is that i need to add a parameter to the event based on the rule that is passing it to the target event bus. This is easily done with apiDestinations by adding a header, but no obvious way to do it for an eventbus destination. I see that it could possibly be done via lambda in the origin account, but that is not a possibility in my use case (I dont have the option to deploy lambdas in the origin account). Any ideas?

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인