6 types
This library provides constructs for adding destinations to a Lambda function.
Destinations can be added by specifying the on_failure or on_success props when creating a function or alias.
The following destinations are supported
Example with a SNS topic for successful invocations:
# An sns topic for successful invocations of a lambda function
require 'aws-cdk-lib'
my_topic = AWSCDK::SNS::Topic.new(self, "Topic")
my_fn = AWSCDK::Lambda::Function.new(self, "Fn", {
runtime: AWSCDK::Lambda::Runtime.NODEJS_LATEST,
handler: "index.handler",
code: AWSCDK::Lambda::Code.from_asset(path.join(__dirname, "lambda-handler")),
# sns topic for successful invocations
on_success: AWSCDK::LambdaDestinations::SNSDestination.new(my_topic),
})
Example with a SQS queue for unsuccessful invocations:
# An sqs queue for unsuccessful invocations of a lambda function
require 'aws-cdk-lib'
dead_letter_queue = AWSCDK::SQS::Queue.new(self, "DeadLetterQueue")
my_fn = AWSCDK::Lambda::Function.new(self, "Fn", {
runtime: AWSCDK::Lambda::Runtime.NODEJS_LATEST,
handler: "index.handler",
code: AWSCDK::Lambda::Code.from_inline("// your code"),
# sqs queue for unsuccessful invocations
on_failure: AWSCDK::LambdaDestinations::SQSDestination.new(dead_letter_queue),
})
See also Configuring Destinations for Asynchronous Invocation.
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)" ]
}
}
SnsDestionation/SqsDestination), the invocation record JSON is passed as the Message to the destination.LambdaDestination), the invocation record JSON is passed as the payload to the function.EventBridgeDestination), the invocation record JSON is passed as the detail in the PutEvents call.
The value for the event field source is lambda, and the value for the event field detail-type
is either 'Lambda Function Invocation Result - Success' or 'Lambda Function Invocation Result – Failure',
depending on whether the lambda function invocation succeeded or failed. The event field resource
contains the function and destination ARNs. See AWS Events
for the different event fields.S3Destination), the invocation record json is stored as a File in the destination bucket. The path of a destination
payload file in the configured bucket is aws/lambda/async/<function-name>/YYYY/MM/DD/YYYY-MM-DDTHH.MM.SS-<Random UUID>.The response_only option of LambdaDestination allows to auto-extract the response payload from the
invocation record:
# Auto-extract response payload with a lambda destination
destination_fn = nil # AWSCDK::Lambda::Function
source_fn = AWSCDK::Lambda::Function.new(self, "Source", {
runtime: AWSCDK::Lambda::Runtime.NODEJS_LATEST,
handler: "index.handler",
code: AWSCDK::Lambda::Code.from_asset(path.join(__dirname, "lambda-handler")),
# auto-extract on success
on_success: AWSCDK::LambdaDestinations::LambdaDestination.new(destination_fn, {
response_only: true,
}),
})
In the above example, destination_fn will be invoked with the payload returned by source_fn
(response_payload in the invocation record, not the full record).
When used with on_failure, the destination function is invoked with the error object returned
by the source function.
Using the response_only option allows to easily chain asynchronous Lambda functions without
having to deal with data extraction in the runtime code.