Namespace Amazon.CDK.AWS.Lambda.Destinations
Amazon Lambda Destinations Library
This library provides constructs for adding destinations to a Lambda function.
Destinations can be added by specifying the onFailure
or onSuccess
props when creating a function or alias.
Destinations
The following destinations are supported
Example with a SNS topic for successful invocations:
// An sns topic for successful invocations of a lambda function
using Amazon.CDK.AWS.SNS;
var myTopic = new Topic(this, "Topic");
var myFn = new Function(this, "Fn", new FunctionProps {
Runtime = Runtime.NODEJS_LATEST,
Handler = "index.handler",
Code = Code.FromAsset(Join(__dirname, "lambda-handler")),
// sns topic for successful invocations
OnSuccess = new SnsDestination(myTopic)
});
Example with a SQS queue for unsuccessful invocations:
// An sqs queue for unsuccessful invocations of a lambda function
using Amazon.CDK.AWS.SQS;
var deadLetterQueue = new Queue(this, "DeadLetterQueue");
var myFn = new Function(this, "Fn", new FunctionProps {
Runtime = Runtime.NODEJS_LATEST,
Handler = "index.handler",
Code = Code.FromInline("// your code"),
// sqs queue for unsuccessful invocations
OnFailure = new SqsDestination(deadLetterQueue)
});
See also Configuring Destinations for Asynchronous Invocation.
Invocation record
When 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 format
Auto-extract response payload with lambda destination
The responseOnly
option of LambdaDestination
allows to auto-extract the response payload from the
invocation record:
// Auto-extract response payload with a lambda destination
Function destinationFn;
var sourceFn = new Function(this, "Source", new FunctionProps {
Runtime = Runtime.NODEJS_LATEST,
Handler = "index.handler",
Code = Code.FromAsset(Join(__dirname, "lambda-handler")),
// auto-extract on success
OnSuccess = new LambdaDestination(destinationFn, new LambdaDestinationOptions {
ResponseOnly = true
})
});
In the above example, destinationFn
will be invoked with the payload returned by sourceFn
(responsePayload
in the invocation record, not the full record).
When used with onFailure
, the destination function is invoked with the error object returned
by the source function.
Using the responseOnly
option allows to easily chain asynchronous Lambda functions without
having to deal with data extraction in the runtime code.
Classes
EventBridgeDestination | Use an Event Bridge event bus as a Lambda destination. |
LambdaDestination | Use a Lambda function as a Lambda destination. |
LambdaDestinationOptions | Options for a Lambda destination. |
SnsDestination | Use a SNS topic as a Lambda destination. |
SqsDestination | Use a SQS queue as a Lambda destination. |
Interfaces
ILambdaDestinationOptions | Options for a Lambda destination. |