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

This utility supports AWS SDK v3 for JavaScript only (@aws-sdk/client-ssm). This allows the utility to be modular, and you to install only the SDK packages you need and keep your bundle size small.

Retrieve a parameter from SSM:

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.

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 getParameters function instead.

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

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 getParametersByName function instead.

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.

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.

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.

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.

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.

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 });
};

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

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.

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.

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

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.

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.

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.

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 (View Summary)

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: unknown

      Value to be cached

    • maxAge: number

      Maximum age in seconds for the value to be cached

    Returns void

  • Retrieve multiple values from AWS Systems Manager.

    Type Parameters

    Parameters

    • path: string

      The path of the parameters to retrieve

    • Optionaloptions: InferredFromOptionsType & SSMGetMultipleOptions

      Options to configure the retrieval

    Returns Promise<
        | undefined
        | SSMGetMultipleOutput<ExplicitUserProvidedType, InferredFromOptionsType>,
    >

    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.

  • Retrieve multiple parameters by name from AWS Systems Manager.

    Type Parameters

    • ExplicitUserProvidedType = undefined

    Parameters

    Returns Promise<SSMGetParametersByNameOutput<ExplicitUserProvidedType>>

    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
    └────────────────────┘
  • Sets a parameter in AWS Systems Manager (SSM).

    Type Parameters

    Parameters

    Returns Promise<number>

    The version of the parameter

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

    const parametersProvider = new SSMProvider();

    export const handler = async (): Promise<void> => {
    // Set a parameter in SSM
    const version = await parametersProvider.set('/my-parameter', { value: 'my-value' });
    console.log(`Parameter version: ${version}`);
    };

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

    • value - The value of the parameter, which is a mandatory option.
    • overwrite - Whether to overwrite the value if it already exists (default: false)
    • description - The description of the parameter
    • parameterType - The type of the parameter, can be one of String, StringList, or SecureString (default: String)
    • tier - The parameter tier to use, can be one of Standard, Advanced, and Intelligent-Tiering (default: Standard)
    • kmsKeyId - The KMS key id to use to encrypt the parameter
    • sdkOptions - Extra options to pass to the AWS SDK v3 for JavaScript client
  • Transform and cache the response from GetParameters API call

    Parameters

    • response: GetParametersCommandOutput

      The response from the GetParameters API call

    • parameters: Record<string, SSMGetParametersByNameOptions>

      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