Defining Scalambdas

After importing the plugin into your project, you can then use the scalambda function to define Lambda Functions from your project’s sources.

Example
// build.sbt

// a basic lambda function using default settings
lazy val example = project
  .enablePlugins(ScalambdaPlugin)
  .settings(
    scalambda(
      functionClasspath = ??? // example: "io.carpe.example.ExampleFunction"
    )
  )

// you can also create multiple functions that share the same source
lazy val multipleFunctions = project
  .enablePlugins(ScalambdaPlugin)
  .settings(
    // first function
    scalambda(
      functionClasspath = ??? // example: "io.carpe.example.ExampleFunction"
    )
    // second function
    scalambda(
      functionClasspath = ??? // example: "io.carpe.example.ExampleFunction"
    )
  )

The first time the scalambda function is ran within a project, sbt will automatically inject in the scalambda-core and scalambda-testing libraries. These libraries provide you with a traits and helpers to make developing and testing lambda functions quick and easy.

Settings

Once you have enabled the Scalambda plugin, you’ll be able to set some settings that are shared by all functions within the current project. That being said, the bulk of the configuration options are configured by modifying the parameters to each scalambda function invocation.

Project Settings

This is the full list of settings that are shared by all your functions.

Setting Key Type Description Default Value
s3BucketName String Prefix for S3 bucket name to store binaries in sbt.Keys.name
billingTags Seq[BillingTag] AWS Billing Tags to apply to all terraformed resources. You can also provide billing tags via a terraform variable in the generated module. See below for details. Nil
scalambdaTerraformPath File Path to where terraform should be written to sbt.Keys.target / "terraform"
scalambdaDependenciesMergeStrat MergeStrategy sbt-assembly MergeStrategy for your dependencies jar Check it out
apiName String Name for Api Gateway instance sbt.Keys.name
domainName ApiDomain Domain name for Api Gateway -

Lambda Settings

Each scalambda function accepts a wide range of parameters. Although, the only required parameter is the functionClasspath.

Parameter Type Description Default Value
functionClasspath String path to the class that contains the handler for your lambda function -
functionNaming FunctionNaming controls how your lambda function is named WorkspaceBased
iamRoleSource FunctionRoleSource controls how your lambda function receives it’s IAM role. Options are RoleFromVariable or RoleFromArn RoleFromVariable
memory Int amount of memory for your function to use (in MBs) 1536
runtime ScalambdaRuntime runtime for your function to use. Options are Java8, Java11, or GraalNative Java8
concurrencyLimit Int maximum number of concurrent instances of your Function -
warmWith WarmerConfig controls how your lambda function will be kept “warm” WarmerConfig.Cold
vpcConfig VpcConfig use this setting if you need to run your Lambda Function inside a VPC. Options are StaticVpcConfig and VpcFromTF VpcConf.withoutVpc
environmentVariables Seq[EnvironmentVariable] use this to inject ENV variables into your Lambda Function. Options are StaticVariable and VariableFromTF Nil

Note: If you use the GraalNative runtime, please make sure to read the documentation page for additional information (and a list of disclaimers a mile long).

Terraform Module Settings

When/if you run scalambdaTerraform, several variables will be generated in the outputted module.

Parameter Type Description Default Value
your_function_name_billing_tags map Billing tags for the function. These will be merged with the billing tags provided via the plugin billingTags setting. {}
s3_billing_tags map Billing tags for the S3 bucket. These will be merged with the billing tags provided via the plugin billingTags setting. {}
enable_xray boolean If enabled, the Api Gateway stage in this module will create traces in AWS X-Ray for each request. false
access_log_cloudwatch_arn string The arn of a Cloudwatch Log Group that you’d like the Api Gateway stage to send access logs to. Make sure that you have set up a proper role for ApiGateway to use to log before using this setting. -
access_log_format string The format for the Api Gateway stage’s access logs. Check the docs to see how to customize this. -

Tasks

The following tasks are also available to each project that has enabled the plugin.

Setting Key Description
scalambdaTerraform Produces a Terraform module from the project’s scalambda configuration
scalambdaPackage Create jar (without dependencies) for your Lambda Function(s)
scalambdaPackageDependencies Create a jar containing all the dependencies for your Lambda Function(s)