API Reference
    Preparing search index...

    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.

    Basic usage

    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.

    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.

    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.

    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.

    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.

    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.

    Extra SDK options

    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.

    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.

    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)

    Index

    Constructors

    Properties

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

    Methods

    • Retrieve a parameter from AWS Systems Manager.

      Parameters

      • name: string

        Name of the parameter to retrieve

      • Optionaloptions: NonNullable<SSMGetOptions>

        Options to customize the retrieval

        • sdkOptions

          Extra options to pass to the AWS SDK v3 for JavaScript client

        • decrypt

          Whether to decrypt the value before returning it.

        • transform

          Whether to transform the value before returning it. Supported values: json, binary, or auto (default: undefined)

      Returns Promise<string | undefined>

    • Retrieve multiple items from AWS Systems Manager.

      Parameters

      • path: string

        The path of the parameters to retrieve

      • Optionaloptions: NonNullable<SSMGetMultipleOptions>

        Options to configure the provider

        • 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)

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

    • 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: NonNullable<(InferredFromOptionsType & SSMGetMultipleOptions)>

        Optional options to configure the retrieval

        • maxAge

          Optional maximum age of the value in the cache, in seconds (default: 5)

        • forceFetch

          Optional flag to always fetch a new value from the store regardless if already available in cache (default: false)

        • transform

          Optional transform to be applied, can be json or binary

        • sdkOptions

          Optional additional options to pass to the AWS SDK v3 client, supports all options from GetParametersByPathCommandInput | GetParametersByPathCommandInput except Path

        • throwOnTransformError

          Optional flag to throw an error if the transform fails (default: true)

        • decrypt

          Optional flag to decrypt the value before returning it (default: false)

        • recursive

          Optional flag to recursively retrieve all parameters under the given path (default: false)

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

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

      For usage examples check SSMProvider.

    • Retrieve multiple parameters by name from AWS Systems Manager.

      Type Parameters

      • ExplicitUserProvidedType = undefined

      Parameters

      • parameters: Record<string, SSMGetParametersByNameOptions>

        Object containing parameter names and any optional overrides

      • Optionaloptions: SSMGetParametersByNameOptions

        Options to configure the retrieval

        Options for the SSMProvider getParametersByName method.

        • Optionaldecrypt?: boolean

          If true, the parameter will be decrypted.

        • OptionalmaxAge?: number

          Maximum age of the value in the cache, in seconds.

        • OptionalthrowOnError?: boolean

          If true, the method will throw an error if one of the parameters cannot be fetched. Otherwise it will aggregate the errors under an _errors key in the response.

        • Optionaltransform?: "json" | "binary"

          Transform to be applied, can be 'json' or 'binary'.

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

      The throwOnError option 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

      • name: string

        The name of the parameter

      • options: InferredFromOptionsType & SSMSetOptions

        Options to configure the parameter

        • Optionaldescription?: string

          The description of the parameter

        • OptionalkmsKeyId?: string

          The KMS key id to use to encrypt the parameter

        • Optionaloverwrite?: boolean

          If the parameter value should be overwritten

          false
          
        • OptionalparameterType?: ParameterType

          Type of the parameter, can be one of String, StringList, or SecureString

          String

        • OptionalsdkOptions?: Partial<PutParameterCommandInput>

          Additional options to pass to the AWS SDK v3 client

        • Optionaltier?: ParameterTier

          The parameter tier to use, can be one of Standard, Advanced, and Intelligent-Tiering

          Standard

        • value: string

          The parameter value

      Returns Promise<number>

      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}`);
      };
    • Transform and cache the response from GetParameters API call

      Parameters

      • response: Partial<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: Partial<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>

        An object of parameter names and their options

      • reservedParameter: string

        The reserved parameter name that cannot be used when fail-fast is disabled

      • throwOnError: boolean

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

      Returns void