Intro

The Parameters utility provides an AppConfigProvider that allows to retrieve configuration profiles from AWS AppConfig.

Getting started

This utility supports AWS SDK v3 for JavaScript only (@aws-sdk/client-appconfigdata). 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

Example

import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';

const configProvider = new AppConfigProvider({
application: 'my-app',
environment: 'prod',
});

export const handler = async (): Promise<void> => {
// Retrieve a configuration profile
const encodedConfig = await configProvider.get('my-config');
const config = new TextDecoder('utf-8').decode(encodedConfig);
};

If you want to retrieve configs without customizing the provider, you can use the getAppConfig 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 { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';

const configProvider = new AppConfigProvider({
application: 'my-app',
environment: 'prod',
});

export const handler = async (): Promise<void> => {
// Retrieve a configuration profile and cache it for 10 seconds
const encodedConfig = await configProvider.get('my-config', { maxAge: 10 });
const config = new TextDecoder('utf-8').decode(encodedConfig);
};

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 { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';

const configProvider = new AppConfigProvider({
application: 'my-app',
environment: 'prod',
});

export const handler = async (): Promise<void> => {
// Retrieve a config and always fetch the latest value
const config = await configProvider.get('my-config', { forceFetch: true });
const config = new TextDecoder('utf-8').decode(encodedConfig);
};

Transformations

For configurations stored as freeform JSON, Freature Flag, you can use the transform argument for deserialization. This will return a JavaScript object instead of a string.

Example

import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';

const configProvider = new AppConfigProvider({
application: 'my-app',
environment: 'prod',
});

export const handler = async (): Promise<void> => {
// Retrieve a JSON config or Feature Flag and parse it as JSON
const config = await configProvider.get('my-config', { transform: 'json' });
};

For configurations 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 { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';

const configProvider = new AppConfigProvider({
application: 'my-app',
environment: 'prod',
});

export const handler = async (): Promise<void> => {
// Retrieve a base64-encoded string and decode it
const config = await configProvider.get('my-config', { transform: 'binary' });
};

Extra SDK options

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

Example

import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';

const configProvider = new AppConfigProvider({
application: 'my-app',
environment: 'prod',
});

export const handler = async (): Promise<void> => {
// Retrieve a config and pass extra options to the AWS SDK v3 for JavaScript client
const config = await configProvider.get('my-config', {
sdkOptions: {
RequiredMinimumPollIntervalInSeconds: 60,
},
});
const config = new TextDecoder('utf-8').decode(encodedConfig);
};

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

Customize AWS SDK v3 for JavaScript client

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

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

Example

import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';

const configProvider = new AppConfigProvider({
application: 'my-app',
environment: 'prod',
clientConfig: { region: 'eu-west-1' },
});

This object accepts the same options as the AWS SDK v3 for JavaScript AppConfig Data client.

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

Example

import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';
import { AppConfigDataClient } from '@aws-sdk/client-appconfigdata';

const client = new AppConfigDataClient({ region: 'eu-west-1' });
const configProvider = new AppConfigProvider({
application: 'my-app',
environment: 'prod',
awsSdkV3Client: client,
});

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

For more usage examples, see our documentation.

Hierarchy

Constructors

Properties

client: AppConfigDataClient
configurationTokenStore: Map<string, string> = ...
envVarsService: EnvironmentVariablesService
store: Map<string, ExpirableValue>
valueStore: Map<string, Uint8Array> = ...

Methods

  • Retrieve a configuration from AWS AppConfig.

    Parameters

    • name: string

      Name of the configuration or its ID

    • Optional options: AppConfigGetOptions

      SDK options to propagate to StartConfigurationSession API call

    Returns Promise<undefined | Uint8Array>

  • Retrieving multiple configurations is not supported by AWS AppConfig.

    Parameters

    • _path: string
    • Optional _sdkOptions: unknown

    Returns Promise<void>

    Throws

    Not Implemented Error.

  • 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 a configuration profile from AWS AppConfig.

    Type Parameters

    Parameters

    • name: string

      The name of the configuration profile or its ID

    • Optional options: Object

      Options to configure the provider

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

    Example

    import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig';

    const configProvider = new AppConfigProvider({
    application: 'my-app',
    environment: 'prod',
    });

    export const handler = async (): Promise<void> => {
    // Retrieve a configuration profile
    const encodedConfig = await configProvider.get('my-config');
    const config = new TextDecoder('utf-8').decode(encodedConfig);
    };

    You can customize the retrieval of the configuration profile 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

    For usage examples check AppConfigProvider.

    See

    https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parameters/

  • 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

Generated using TypeDoc