Security News
The Unpaid Backbone of Open Source: Solo Maintainers Face Increasing Security Demands
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.
@aws-cdk/aws-lambda
Advanced tools
@aws-cdk/aws-lambda is an AWS Cloud Development Kit (CDK) module that allows you to define AWS Lambda functions and manage their configurations using code. It provides a high-level, object-oriented abstraction to define and deploy Lambda functions, making it easier to integrate with other AWS services and manage infrastructure as code.
Define a Lambda Function
This code defines a simple AWS Lambda function using the AWS CDK. The function uses Node.js 14.x runtime, specifies the handler, and points to the code directory.
const lambda = require('@aws-cdk/aws-lambda');
const cdk = require('@aws-cdk/core');
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
}
}
const app = new cdk.App();
new MyStack(app, 'MyStack');
Add Environment Variables
This code demonstrates how to add environment variables to an AWS Lambda function using the AWS CDK.
const lambda = require('@aws-cdk/aws-lambda');
const cdk = require('@aws-cdk/core');
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
environment: {
KEY: 'value',
},
});
}
}
const app = new cdk.App();
new MyStack(app, 'MyStack');
Add Permissions to Lambda Function
This code shows how to add permissions to an AWS Lambda function using the AWS CDK. In this example, the Lambda function is granted permission to get objects from an S3 bucket.
const lambda = require('@aws-cdk/aws-lambda');
const cdk = require('@aws-cdk/core');
const iam = require('@aws-cdk/aws-iam');
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
const myFunction = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
myFunction.addToRolePolicy(new iam.PolicyStatement({
actions: ['s3:GetObject'],
resources: ['arn:aws:s3:::my-bucket/*'],
}));
}
}
const app = new cdk.App();
new MyStack(app, 'MyStack');
The Serverless Framework is a popular open-source framework for building and deploying serverless applications. It supports multiple cloud providers, including AWS, and provides a rich set of features for managing serverless functions, APIs, and events. Compared to @aws-cdk/aws-lambda, Serverless Framework offers a more provider-agnostic approach and a higher-level abstraction for defining serverless applications.
The AWS SDK for JavaScript provides a set of tools for interacting with AWS services, including Lambda. While it is not specifically designed for infrastructure as code, it allows developers to programmatically manage AWS resources. Compared to @aws-cdk/aws-lambda, the AWS SDK is more low-level and requires more manual setup and configuration.
Claudia.js is a tool for deploying Node.js projects to AWS Lambda and API Gateway. It simplifies the process of setting up and managing serverless applications. Compared to @aws-cdk/aws-lambda, Claudia.js is more focused on Node.js and provides a simpler, more streamlined deployment process.
This construct library allows you to define AWS Lambda Functions.
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NodeJS810,
handler: 'index.handler',
code: lambda.Code.asset('./lambda-handler'),
});
The lambda.Code
class includes static convenience methods for various types of
runtime code.
lambda.Code.bucket(bucket, key[, objectVersion])
- specify an S3 object
that contains the archive of your runtime code.lambda.Code.inline(code)
- inline the handle code as a string. This is
limited to 4KB.lambda.Code.asset(path)
- specify a directory or a .zip file in the local
filesystem which will be zipped and uploaded to S3 before deployment.The following example shows how to define a Python function and deploy the code
from the local directory my-lambda-handler
to it:
Example of Lambda Code from Local Assets
When deploying a stack that contains this code, the directory will be zip archived and then uploaded to an S3 bucket, then the exact location of the S3 objects will be passed when the stack is deployed.
The lambda.LayerVersion
class can be used to define Lambda layers and manage
granting permissions to other AWS accounts or organizations.
AWS Lambda supports a variety of event sources.
In most cases, it is possible to trigger a function as a result of an event by
using one of the onXxx
methods on the source construct. For example, the s3.Bucket
construct has an onEvent
method which can be used to trigger a Lambda when an event,
such as PutObject occurs on an S3 bucket.
An alternative way to add event sources to a function is to use function.addEventSource(source)
.
This method accepts an IEventSource
object. The module @aws-cdk/aws-lambda-event-sources
includes classes for the various event sources supported by AWS Lambda.
For example, the following code adds an SQS queue as an event source for a function:
import { SqsEventSource } from '@aws-cdk/aws-lambda-event-sources';
fn.addEventSource(new SqsEventSource(queue));
The following code adds an S3 bucket notification as an event source:
import { S3EventSource } from '@aws-cdk/aws-lambda-event-sources';
fn.addEventSource(new S3EventSource(bucket, {
events: [ s3.EventType.ObjectCreated, s3.EventType.ObjectDeleted ],
filters: [ { prefix: 'subdir/' } ] // optional
}));
See the documentation for the @aws-cdk/aws-lambda-event-sources module for more details.
This module also contains an Action that allows you to invoke a Lambda function from CodePipeline:
import codepipeline = require('@aws-cdk/aws-codepipeline');
const pipeline = new codepipeline.Pipeline(this, 'MyPipeline');
const lambdaStage = pipeline.addStage('Lambda');
new lambda.PipelineInvokeAction(this, 'Lambda', {
stage: lambdaStage,
lambda: fn,
});
You can also add the Lambda to the Pipeline directly:
// equivalent to the code above:
fn.addToPipeline(lambdaStage, 'Lambda');
The Lambda Action can have up to 5 inputs, and up to 5 outputs:
const lambdaAction = fn.addToPipeline(lambdaStage, 'Lambda', {
inputArtifacts: [
sourceAction.outputArtifact,
buildAction.outputArtifact,
],
outputArtifactNames: [
'Out1',
'Out2',
],
});
lambdaAction.outputArtifacts(); // returns the list of output Artifacts
lambdaAction.outputArtifact('Out2'); // returns the named output Artifact, or throws an exception if not found
See the AWS documentation on how to write a Lambda function invoked from CodePipeline.
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NodeJS810,
handler: 'index.handler',
code: lambda.Code.inline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
deadLetterQueueEnabled: true
});
See the AWS documentation to learn more about AWS Lambdas and DLQs.
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NodeJS810,
handler: 'index.handler',
code: lambda.Code.inline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
tracing: lambda.Tracing.Active
});
See the AWS documentation to learn more about AWS Lambda's X-Ray support.
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NodeJS810,
handler: 'index.handler',
code: lambda.Code.inline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
reservedConcurrentExecutions: 100
});
See the AWS documentation managing concurrency.
0.23.0 (2019-02-04)
selectionPattern
to integrationResponses
(#1636) (7cdbcec), closes #1608roleName
available on IRole
(#1589) (9128390)role
property in the CloudFormation Actions has been renamed to deploymentRole
.role
property in the app-delivery
package has been renamed to deploymentRole
.FAQs
The CDK Construct Library for AWS::Lambda
The npm package @aws-cdk/aws-lambda receives a total of 94,129 weekly downloads. As such, @aws-cdk/aws-lambda popularity was classified as popular.
We found that @aws-cdk/aws-lambda demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.
Security News
License exceptions modify the terms of open source licenses, impacting how software can be used, modified, and distributed. Developers should be aware of the legal implications of these exceptions.
Security News
A developer is accusing Tencent of violating the GPL by modifying a Python utility and changing its license to BSD, highlighting the importance of copyleft compliance.