Intro

The Parameters utility provides a SSMProvider that allows to retrieve parameters from AWS Systems Manager.

Getting started

This utility supports AWS SDK v3 for JavaScript only. This allows the utility to be modular, and you to install only the SDK packages you need and keep your bundle size small.

To use the provider, you must install the Parameters utility and the AWS SDK v3 for JavaScript for AppConfig:

npm install @aws-lambda-powertools/parameters @aws-sdk/client-ssm

Basic usage

Retrieve a parameter from SSM:

Example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve a parameter from SSM
const parameter = await parametersProvider.get('/my-parameter');
};

If you want to retrieve a parameter without customizing the provider, you can use the getParameter function instead.

You can also retrieve parameters at once. If you want to get multiple parameters under the same path, you can use the getMultiple method.

Example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve multiple parameters by path from SSM
const parameters = await parametersProvider.getMultiple('/my-parameters-path');
};

If you don't need to customize the provider, you can also use the {@link getParameters} function instead.

If instead you want to retrieve multiple parameters by name, you can use the `getParametersByName` method.

@example
```typescript
import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve multiple parameters by name from SSM
const parameters = await parametersProvider.getParametersByName({
'/my-parameter-1': {}, // Use default options
'/my-parameter-2': { transform: 'json' }, // Parse the value as JSON
});
};

If you don't need to customize the provider, you can also use the {@link getParametersByName} function instead.

Advanced usage

Caching

By default, the provider will cache parameters retrieved in-memory for 5 seconds. You can adjust how long values should be kept in cache by using the maxAge parameter.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve a parameter and cache it for 10 seconds
const parameter = await parametersProvider.get('/my-parameter', { maxAge: 10 });
// Retrieve multiple parameters by path and cache them for 20 seconds
const parameters = await parametersProvider.getMultiple('/my-parameters-path', { maxAge: 20 });
};

When using the getParametersByName method, you can set a different maxAge for each parameter or set a default maxAge for all parameters.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve multiple parameters by name and cache them individually
const parameters = await parametersProvider.getParametersByName({
'/my-parameter-1': { maxAge: 10 }, // Cache for 10 seconds
'/my-parameter-2': { maxAge: 20 }, // Cache for 20 seconds
});
// Retrieve multiple parameters by name and cache them all for 20 seconds
const parameters = await parametersProvider.getParametersByName({
'/my-parameter-1': {},
'/my-parameter-2': {},
}, { maxAge: 20 });
};

If instead you'd like to always ensure you fetch the latest parameter from the store regardless if already available in cache, use the forceFetch parameter.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve a parameter and skip cache
const parameter = await parametersProvider.get('/my-parameter', { forceFetch: true });
// Retrieve multiple parameters and skip cache
const parameters = await parametersProvider.getMultiple('/my-parameters-path', { forceFetch: true });
};

Likewise, you can use the forceFetch parameter with the getParametersByName method both for individual parameters and for all parameters.

Decryption

If you want to retrieve a parameter that is encrypted, you can use the decrypt parameter. This parameter is compatible with get, getMultiple and getParametersByName.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve a parameter and decrypt it
const parameter = await parametersProvider.get('/my-parameter', { decrypt: true });
// Retrieve multiple parameters and decrypt them
const parameters = await parametersProvider.getMultiple('/my-parameters-path', { decrypt: true });
};

Transformations

For parameters stored as JSON you can use the transform argument for deserialization. This will return a JavaScript object instead of a string.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve a parameter and parse it as JSON
const parameter = await parametersProvider.get('/my-parameter', { transform: 'json' });
// Retrieve multiple parameters and parse them as JSON
const parameters = await parametersProvider.getMultiple('/my-parameters-path', { transform: 'json' });
};

For parameters that are instead stored as base64-encoded binary data, you can use the transform argument set to binary for decoding. This will return a decoded string.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve a base64-encoded string and decode it
const parameter = await parametersProvider.get('/my-parameter', { transform: 'binary' });
// Retrieve multiple base64-encoded strings and decode them
const parameters = await parametersProvider.getMultiple('/my-parameters-path', { transform: 'binary' });
};

Both type of transformations are compatible also with the getParametersByName method.

Extra SDK options

When retrieving parameters, you can pass extra options to the AWS SDK v3 for JavaScript client by using the sdkOptions parameter.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider();

export const handler = async (): Promise<void> => {
// Retrieve a parameter and pass extra options to the AWS SDK v3 for JavaScript client
const parameter = await parametersProvider.get('/my-parameter', {
sdkOptions: {
WithDecryption: true,
},
});
};

The objects accept the same options as respectively the AWS SDK v3 for JavaScript GetParameter command and the AWS SDK v3 for JavaScript GetParametersByPath command.

Customize AWS SDK v3 for JavaScript client

By default, the provider will create a new SSM client using the default configuration.

You can customize the client by passing a custom configuration object to the provider.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

const parametersProvider = new SSMProvider({
clientConfig: { region: 'eu-west-1' },
});

This object accepts the same options as the AWS SDK v3 for JavaScript SSM client constructor.

Otherwise, if you want to use a custom client altogether, you can pass it to the provider.

@example

import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';
import { SSMClient } from '@aws-sdk/client-ssm';

const client = new SSMClient({ region: 'eu-west-1' });
const parametersProvider = new SSMProvider({
awsSdkV3Client: client,
});

This object must be an instance of the AWS SDK v3 for JavaScript SSM client.

For more usage examples, see our documentation.

Hierarchy

Constructors

Properties

client: SSMClient
errorsKey: string = '_errors'
maxGetParametersItems: number = 10
store: Map<string, ExpirableValue>

Methods

  • Add a value to the cache.

    Parameters

    • key: string

      Key of the cached value

    • value: string | Uint8Array | Record<string, unknown>

      Value to be cached

    • maxAge: number

      Maximum age in seconds for the value to be cached

    Returns void

  • Retrieve a value from AWS Systems Manager.

    Example

    import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

    const parametersProvider = new SSMProvider();

    export const handler = async (): Promise<void> => {
    // Retrieve a parameter from SSM
    const parameter = await parametersProvider.get('/my-parameter');
    };

    You can customize the retrieval of the value by passing options to the function:

    • maxAge - The maximum age of the value in cache before fetching a new one (in seconds) (default: 5)
    • forceFetch - Whether to always fetch a new value from the store regardless if already available in cache
    • transform - Whether to transform the value before returning it. Supported values: json, binary
    • sdkOptions - Extra options to pass to the AWS SDK v3 for JavaScript client
    • decrypt - Whether to decrypt the value before returning it.

    For usage examples check SSMProvider.

    See

    https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/

    Parameters

    • name: string

      The name of the value to retrieve (i.e. the partition key)

    • Optional options: SSMGetOptionsInterface

      Options to configure the provider

    Returns Promise<undefined | string | Record<string, unknown>>

  • Retrieve multiple values from AWS Systems Manager.

    Example

    import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

    const parametersProvider = new SSMProvider();

    export const handler = async (): Promise<void> => {
    // Retrieve multiple parameters from SSM
    const parameters = await parametersProvider.getMultiple('/my-parameters-path');
    };

    You can customize the retrieval of the values by passing options to the function:

    • maxAge - The maximum age of the value in cache before fetching a new one (in seconds) (default: 5)
    • forceFetch - Whether to always fetch a new value from the store regardless if already available in cache
    • transform - Whether to transform the value before returning it. Supported values: json, binary
    • sdkOptions - Extra options to pass to the AWS SDK v3 for JavaScript client
    • throwOnTransformError - Whether to throw an error if the transform fails (default: true)
    • decrypt - Whether to decrypt the value before returning it.
    • recursive - Whether to recursively retrieve all parameters under the given path (default: false)

    For usage examples check SSMProvider.

    See

    https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/

    Parameters

    Returns Promise<undefined | Record<string, unknown>>

  • Retrieve multiple parameters by name from AWS Systems Manager.

    Example

    import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm';

    const parametersProvider = new SSMProvider();

    export const handler = async (): Promise<void> => {
    // Retrieve multiple parameters by name from SSM
    const parameters = await parametersProvider.getParametersByName({
    '/my-parameter-1': {}, // Use default options
    '/my-parameter-2': { transform: 'json' }, // Parse the value as JSON
    });
    };

    You can customize the retrieval of the values by passing options to both the function and the parameter:

    • maxAge - The maximum age of the value in cache before fetching a new one (in seconds) (default: 5)
    • forceFetch - Whether to always fetch a new value from the store regardless if already available in cache
    • transform - Whether to transform the value before returning it. Supported values: json, binary
    • sdkOptions - Extra options to pass to the AWS SDK v3 for JavaScript client
    • throwOnTransformError - Whether to throw an error if the transform fails (default: true)
    • decrypt - Whether to decrypt the value before returning it

    throwOnError decides whether to throw an error if a parameter is not found:

    • A) Default fail-fast behavior: Throws a GetParameterError error upon any failure.
    • B) Gracefully aggregate all parameters that failed under "_errors" key.

    It transparently uses GetParameter and/or GetParameters depending on decryption requirements.

                                   ┌────────────────────────┐
    ┌───▶ Decrypt entire batch │─────┐
    │ └────────────────────────┘ │ ┌────────────────────┐
    │ ├─────▶ GetParameters API │
    ┌──────────────────┐ │ ┌────────────────────────┐ │ └────────────────────┘
    │ Split batch │─── ┼──▶│ No decryption required │─────┘
    └──────────────────┘ │ └────────────────────────┘
    │ ┌────────────────────┐
    │ ┌────────────────────────┐ │ GetParameter API │
    └──▶│Decrypt some but not all│───────────▶────────────────────┤
    └────────────────────────┘ │ GetParameters API │
    └────────────────────┘

    See

    https://awslabs.github.io/aws-lambda-powertools-typescript/latest/utilities/parameters/

    Parameters

    Returns Promise<Record<string, unknown>>

  • Check whether a key has expired in the cache or not.

    It returns true if the key is expired or not present in the cache.

    Parameters

    • key: string

      Stringified representation of the key to retrieve

    Returns boolean

  • Transform and cache the response from GetParameters API call

    Parameters

    • response: GetParametersCommandOutput

      The response from the GetParameters API call

    • parameters: Record<string, SSMGetParametersByNameOptionsInterface>

      An object of parameter names and their options

    • throwOnError: boolean

      Whether to throw an error if any of the parameters' retrieval throws an error or handle them gracefully

    Returns Record<string, unknown>

  • Handle any invalid parameters returned by GetParameters API GetParameters is non-atomic. Failures don't always reflect in exceptions so we need to collect.

    Parameters

    • result: GetParametersCommandOutput

      The result of the GetParameters API call

    • throwOnError: boolean

      Whether to throw an error if any of the parameters' retrieval throws an error or handle them gracefully

    Returns string[]

  • Throw a GetParameterError if fail-fast is disabled and _errors key is in parameters list.

    Parameters

    • parameters: Record<string, unknown>
    • reservedParameter: string
    • throwOnError: boolean

    Returns void

Generated using TypeDoc