All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awscdk.services.lambda.destinations.package-info Maven / Gradle / Ivy

There is a newer version: 1.204.0
Show newest version
/**
 * 

Amazon Lambda Destinations Library

*

* --- *

* cdk-constructs: Stable *

*


*

* *

* 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 *

*

    *
  • Lambda function
  • *
  • SQS queue - Only standard SQS queues are supported for failure destinations, FIFO queues are not supported.
  • *
  • SNS topic
  • *
  • EventBridge event bus
  • *
*

* Example with a SNS topic for successful invocations: *

*

 * // An sns topic for successful invocations of a lambda function
 * import software.amazon.awscdk.services.sns.*;
 * 
 * 
 * Topic myTopic = new Topic(this, "Topic");
 * 
 * Function myFn = Function.Builder.create(this, "Fn")
 *         .runtime(Runtime.NODEJS_14_X)
 *         .handler("index.handler")
 *         .code(Code.fromAsset(join(__dirname, "lambda-handler")))
 *         // sns topic for successful invocations
 *         .onSuccess(new SnsDestination(myTopic))
 *         .build();
 * 
*

* Example with a SQS queue for unsuccessful invocations: *

*

 * // An sqs queue for unsuccessful invocations of a lambda function
 * import software.amazon.awscdk.services.sqs.*;
 * 
 * 
 * Queue deadLetterQueue = new Queue(this, "DeadLetterQueue");
 * 
 * Function myFn = Function.Builder.create(this, "Fn")
 *         .runtime(Runtime.NODEJS_14_X)
 *         .handler("index.handler")
 *         .code(Code.fromInline("// your code"))
 *         // sqs queue for unsuccessful invocations
 *         .onFailure(new SqsDestination(deadLetterQueue))
 *         .build();
 * 
*

* 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

*

*

    *
  • For SNS/SQS (SnsDestionation/SqsDestination), the invocation record JSON is passed as the Message to 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 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.
  • *
*

*

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;
 * 
 * 
 * Function sourceFn = Function.Builder.create(this, "Source")
 *         .runtime(Runtime.NODEJS_14_X)
 *         .handler("index.handler")
 *         .code(Code.fromAsset(join(__dirname, "lambda-handler")))
 *         // auto-extract on success
 *         .onSuccess(LambdaDestination.Builder.create(destinationFn)
 *                 .responseOnly(true)
 *                 .build())
 *         .build();
 * 
*

* 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. */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) package software.amazon.awscdk.services.lambda.destinations;





© 2015 - 2024 Weber Informatics LLC | Privacy Policy