sbt-aws-lambda

by saksdirect

saksdirect / sbt-aws-lambda

sbt plugin to deploy code to AWS Lambda

125 Stars 43 Forks Last release: Not found Apache License 2.0 177 Commits 23 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

sbt-aws-lambda

sbt plugin to deploy code to AWS Lambda

Join the chat at https://gitter.im/saksdirect/sbt-aws-lambda Maven Central

This plugin is available for both sbt 1.x and 0.13.x. The latest version (0.7.0) was released on 22/Feb/2019.

Installation

Add the following to your

project/plugins.sbt
file:
addSbtPlugin("com.gilt.sbt" % "sbt-aws-lambda" % "0.7.0")

Add the

AwsLambdaPlugin
auto-plugin to your build.sbt:
enablePlugins(AwsLambdaPlugin)

Usage

sbt configureLambda
Creates a new AWS Lambda if it doesn't exist yet, or updates the Lambda configuration, if it has changed.

sbt deployLambda
Packages and deploys the current project to an existing AWS Lambda.

Deprecated Usage

The plugin also has the following deprecated tasks:

sbt createLambda
creates a new AWS Lambda function from the current project.

sbt updateLambda
updates an existing AWS Lambda function with the current project.

Configuration

sbt-aws-lambda can be configured using sbt settings, environment variables or by reading user input at deploy time

| sbt setting | Environment variable | Description | |:----------|:----------|:---------------| | s3Bucket | AWSLAMBDABUCKETID | The name of an S3 bucket where the lambda code will be stored | | s3KeyPrefix | AWSLAMBDAS3KEYPREFIX | The prefix to the S3 key where the jar will be uploaded | | lambdaName | AWSLAMBDANAME | The name to use for this AWS Lambda function. Defaults to the project name | | handlerName | AWSLAMBDAHANDLERNAME | Java class name and method to be executed, e.g.

com.gilt.example.Lambda::myMethod
| | roleArn | AWSLAMBDAIAMROLEARN |The ARN of an IAM role to use when creating a new Lambda | | region | AWSREGION | The name of the AWS region to connect to. Defaults to
us-east-1
| | awsLambdaTimeout | AWS
LAMBDATIMEOUT | The Lambda timeout in seconds (1-900). Defaults to AWS default. | | awsLambdaMemory | AWSLAMBDAMEMORY | The amount of memory in MB for the Lambda function (128-1536, multiple of 64). Defaults to AWS default. | | lambdaHandlers | | Sequence of Lambda names to handler functions (for multiple lambda methods per project). Overrides
lambdaName
and
handlerName
if present. | | deployMethod | AWS
LAMBDADEPLOYMETHOD | The preferred method for uploading the jar, either
S3
for uploading to AWS S3 or
DIRECT
for direct upload to AWS Lambda | | deadLetterArn | AWSLAMBDADEADLETTERARN | The ARN of the Lambda function's dead letter SQS queue or SNS topic, to receive unprocessed messages | | vpcConfigSubnetIds | AWSLAMBDAVPCCONFIGSUBNETIDS | Comma separated list of subnet IDs for the VPC | | vpcConfigSecurityGroupIds | AWSLAMBDAVPCCONFIGSECURITYGROUP_IDS | Comma separated list of security group IDs for the VPC | | environment | | Seq[(String, String)] of environment variables to set in the lambda function |

An example configuration might look like this:

retrieveManaged := true

enablePlugins(AwsLambdaPlugin)

lambdaHandlers := Seq( "function1" -> "com.gilt.example.Lambda::handleRequest1", "function2" -> "com.gilt.example.Lambda::handleRequest2", "function3" -> "com.gilt.example.OtherLambda::handleRequest3" )

// or, instead of the above, for just one function/handler // // lambdaName := Some("function1") // // handlerName := Some("com.gilt.example.Lambda::handleRequest1")

s3Bucket := Some("lambda-jars")

awsLambdaMemory := Some(192)

awsLambdaTimeout := Some(30)

roleArn := Some("arn:aws:iam::123456789000:role/lambda_basic_execution")

(note that you will need to use a real ARN for your role rather than copying this one).

Customizing the packaging step

By default, sbt-aws-lambda uses sbt-assembly to package a fat jar that includes your project and all its dependencies. In some cases you may want to override this and provide a different task that sbt-aws-lambda should call to package the jar. To do this, override the

packageLambda
task key with a different task that produces an package file, like sbt-native-package or the built-in
packageBin
task:
// Use sbt-native-packager
packageLambda := (packageBin in Universal).value

// Use project jar only
packageLambda := (packageBin in Compile).value

Publishing new versions of this plugin

This plugin uses sbt-sonatype to publish to Gilt's account on maven central

sbt publishSigned sonatypeRelease

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.