Lambda Configuration
µServerless supports three methods to get configuration values: environment variables, SSM Parameter Store, and Noop
By default the lambda handlers require you to implement the methods defined in the LambdaConfiguration
trait.
You can satisfy this requirement by simply extending your function with one of the provided traits:
SsmLambdaConfig
EnvLambdaConfig
NoopLambdaConfig
Usage
Functions can retrieve configuration values using the following methods:
Get Values
getValue(name: String): Option[String]
Name is the fully qualified name and includes the hierarchy of the parameter path and name. For the env vars a value like /database/password
will be converted to DATABASE_PASSWORD
Get Paths
getValues(path: String): Map[String, String]
Here the path is a partial path. This will return a map of values containing key -> values for all the elements in the hierarchy. For name like /database
the method may return all the database related values such as /database/username
, /database/password
, etc.
EnvLambdaConfig
This trait comes bundled with µServerless and can be used by extending the EnvLambdaConfiguration
trait like such
class TestFunction(snsClientMock: AmazonSNSAsync) extends LambdaHandler with EnvLambdaConfiguration {
val foo: Option[String] = getValue("/foo")
val barHierarchy: Map[String, String] = getValues("/bar/")
}
SsmLambdaConfig
This configuration gets values from the AWS SSM parameter store. Encrypted values will be automatically decrypted.
Unique values across stages
SSM Parameter Store could do a lookup of value names prepending a "stage name" e.g. prod, staging, dev.
This is use to be able to create parameters with unique names and reference
them in the function using a consistent name. For example the value /database/username
for the stage name prod
will
result in a lookup of the parameter /prod/database/username
.
The environment name is set via the environment variable STAGE_NAME
.
Installation
SSM Parameter store configuration must be installed using the userverless-ssm-config
package:
libraryDependencies += "io.onema" %% "userverless-ssm-config" % "<LATEST_VERSION>"
To use the SSM environment variable in your function simply extend from the SsmLambdaConfiguration
trait like such
class TestFunction(snsClientMock: AmazonSNSAsync) extends LambdaHandler with SsmLambdaConfiguration {
val foo: Option[String] = getValue("/foo")
val barHierarchy: Map[String, String] = getValues("/bar/")
}
NoopLambdaConfig
This trait always returns None
for getValue
and Seq()
for getValues
.
Custom implementations
You may create your own custom implementations by extending the LambdaConfiguration
trait and implementing getValue
and getValues
.