Package: aws-cdk.aws-lambda-destinations
Amazon Lambda Destinations Library---AWS CDK v1 has reached End-of-Support on 2023-06-01.
This package is no longer being updated, and users should migrate to AWS CDK v2.For more information on how to migrate, see theMigrating to AWS CDK v2guide.This library provides constructs for adding destinations to a Lambda function.
Destinations can be added by specifying theonFailureoronSuccessprops when creating a function or alias.DestinationsThe following destinations are supportedLambda functionSQS queue - Only standard SQS queues are supported for failure destinations, FIFO queues are not supported.SNS topicEventBridge event busExample with a SNS topic for successful invocations:# An sns topic for successful invocations of a lambda functionimportaws_cdk.aws_snsassnsmy_topic=sns.Topic(self,"Topic")my_fn=lambda_.Function(self,"Fn",runtime=lambda_.Runtime.NODEJS_14_X,handler="index.handler",code=lambda_.Code.from_asset(path.join(__dirname,"lambda-handler")),# sns topic for successful invocationson_success=destinations.SnsDestination(my_topic))Example with a SQS queue for unsuccessful invocations:# An sqs queue for unsuccessful invocations of a lambda functionimportaws_cdk.aws_sqsassqsdead_letter_queue=sqs.Queue(self,"DeadLetterQueue")my_fn=lambda_.Function(self,"Fn",runtime=lambda_.Runtime.NODEJS_14_X,handler="index.handler",code=lambda_.Code.from_inline("// your code"),# sqs queue for unsuccessful invocationson_failure=destinations.SqsDestination(dead_letter_queue))See alsoConfiguring Destinations for Asynchronous Invocation.Invocation recordWhen a lambda function is configured with a destination, an invocation record is created by the Lambda service
when the lambda function completes. The invocation record contains the details of the function, its context, and
the request and response payloads.The following example shows the format of the invocation record for a successful invocation:{"version":"1.0","timestamp":"2019-11-24T23:08:25.651Z","requestContext":{"requestId":"c2a6f2ae-7dbb-4d22-8782-d0485c9877e2","functionArn":"arn:aws:lambda:sa-east-1:123456789123:function:event-destinations:$LATEST","condition":"Success","approximateInvokeCount":1},"requestPayload":{"Success":true},"responseContext":{"statusCode":200,"executedVersion":"$LATEST"},"responsePayload":"<data returned by the function here>"}In case of failure, the record contains the reason and error object:{"version":"1.0","timestamp":"2019-11-24T21:52:47.333Z","requestContext":{"requestId":"8ea123e4-1db7-4aca-ad10-d9ca1234c1fd","functionArn":"arn:aws:lambda:sa-east-1:123456678912:function:event-destinations:$LATEST","condition":"RetriesExhausted","approximateInvokeCount":3},"requestPayload":{"Success":false},"responseContext":{"statusCode":200,"executedVersion":"$LATEST","functionError":"Handled"},"responsePayload":{"errorMessage":"Failure from event, Success = false, I am failing!","errorType":"Error","stackTrace":["exports.handler (/var/task/index.js:18:18)"]}}Destination-specific JSON formatFor SNS/SQS (SnsDestionation/SqsDestination), the invocation record JSON is passed as theMessageto the destination.For Lambda (LambdaDestination), the invocation record JSON is passed as the payload to the function.For EventBridge (EventBridgeDestination), the invocation record JSON is passed as thedetailin the PutEvents call.
The value for the event fieldsourceislambda, and the value for the event fielddetail-typeis either 'Lambda Function Invocation Result - Success' or 'Lambda Function Invocation Result – Failure',
depending on whether the lambda function invocation succeeded or failed. The event fieldresourcecontains the function and destination ARNs. SeeAWS Eventsfor the different event fields.Auto-extract response payload with lambda destinationTheresponseOnlyoption ofLambdaDestinationallows to auto-extract the response payload from the
invocation record:# Auto-extract response payload with a lambda destination# destination_fn: lambda.Functionsource_fn=lambda_.Function(self,"Source",runtime=lambda_.Runtime.NODEJS_14_X,handler="index.handler",code=lambda_.Code.from_asset(path.join(__dirname,"lambda-handler")),# auto-extract on successon_success=destinations.LambdaDestination(destination_fn,response_only=True))In the above example,destinationFnwill be invoked with the payload returned bysourceFn(responsePayloadin the invocation record, not the full record).When used withonFailure, the destination function is invoked with the error object returned
by the source function.Using theresponseOnlyoption allows to easily chain asynchronous Lambda functions without
having to deal with data extraction in the runtime code.