-
Notifications
You must be signed in to change notification settings - Fork 567
Open
Labels
bugtype/eventsissue or feature request related to the events packageissue or feature request related to the events package
Description
Is your feature request related to a problem? Please describe.
Triggering a lambda with EventBridge CodePipeline events, i.e.:
{
"detail-type": [
"CodePipeline Pipeline Execution State Change",
"CodePipeline Stage Execution State Change",
"CodePipeline Action Execution State Change"
],
"source": [
"aws.codepipeline"
]
}
The Lambda in question has this structure:
func handler(_ context.Context, event *events.CodePipelineEventBridgeEvent) error {}
Upon execution, it almost immediately fails and outputs one of two errors (so far):
json: cannot unmarshal number 2.0 into Go struct field CodePipelineEventDetail.detail.version of type int64
json: cannot unmarshal string into Go struct field CodePipelineEventDetailType.detail.type.version of type int64
Describe the solution you'd like
I'm fairly certain I'm using the correct event type here, but I could be wrong. However, I'd like a solution to the lambda not failing immediately and the type being correct for what EventBridge is passing into the lambda.
Metadata
Metadata
Assignees
Labels
bugtype/eventsissue or feature request related to the events packageissue or feature request related to the events package
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
bmoffatt commentedon Feb 24, 2024
Original PR called out a documentation inconsistency regarding these fields. https://github.com/aws/aws-lambda-go/pull/247/files
I wonder if something changed recently!
lexedwards commentedon Mar 11, 2024
I haven't been using this particular event with Go, so I can't really comment on how recent the change has been, however, after some experimenting, I've seen it reliably work with some alterations to the type declared:
https://github.com/aws/aws-lambda-go/blob/de51f6811a68226f2238b77fd74b84df29c446f4/events/codepipeline_cloudwatch.go#L79C1-L83C32
L83's
Version
type asjson.Number
- Though, I'm 99% surefloat64
would work here as well looking at the error.https://github.com/aws/aws-lambda-go/blob/de51f6811a68226f2238b77fd74b84df29c446f4/events/codepipeline_cloudwatch.go#L100C1-L109C2
L108's
Version
type asstring
I don't personally reference this value in any of my code, the change was purely to get unmarshalling to not panic, so I'm not sure if there's going to be any breaking changes for users to utilise the value.
bmoffatt commentedon Mar 23, 2024
If you haven't already, you can unblock yourself by copying the structs into your project, and deleting the fields in your copy.
I'm still following up with the service team to try and figure out what happened here.
bmoffatt commentedon Jun 5, 2024
The service team identified errors in the sample event documentation which I believe lead to the type mismatches in the original PR that introduced this struct. Documentation should be fixed by now, and guidance from the service team confirmed that correct typing would be: