or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

appconfig.mdbase.mddynamodb.mdindex.mdsecrets.mdssm.md
tile.json

appconfig.mddocs/

AppConfig

Retrieves configuration profiles from AWS AppConfig with session management, automatic caching, and value transformation.

← Back to Overview

Note: getMultiple not supported for AppConfig.

API Reference

function getAppConfig<T>(name: string, options: GetAppConfigOptions): Promise<T | undefined>;

class AppConfigProvider extends BaseProvider {
  constructor(config: AppConfigProviderOptions);
  get<T>(name: string, options?: AppConfigGetOptions): Promise<T | undefined>;
}

interface GetAppConfigOptions {
  application?: string;  // Required (or set POWERTOOLS_SERVICE_NAME env var)
  environment: string;   // Required
  maxAge?: number;
  forceFetch?: boolean;
  transform?: 'json' | 'binary';
  sdkOptions?: Omit<Partial<StartConfigurationSessionCommandInput>, 'ApplicationIdentifier' | 'EnvironmentIdentifier' | 'ConfigurationProfileIdentifier'>;
}

interface AppConfigProviderOptions {
  environment: string;
  application?: string;  // Defaults to POWERTOOLS_SERVICE_NAME env var
  clientConfig?: AppConfigDataClientConfig;
  awsSdkV3Client?: AppConfigDataClient;
}

interface AppConfigGetOptions {
  maxAge?: number;
  forceFetch?: boolean;
  transform?: 'json' | 'binary';
  sdkOptions?: Omit<Partial<StartConfigurationSessionCommandInput>, 'ApplicationIdentifier' | 'EnvironmentIdentifier' | 'ConfigurationProfileIdentifier'>;
}

Usage Patterns

Basic Retrieval

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

// Retrieve config (returns Uint8Array by default)
const config = await getAppConfig('my-config', {
  application: 'my-app',
  environment: 'prod'
});

// Parse JSON
interface AppConfig { featureFlags: Record<string, boolean>; apiEndpoints: string[]; }
const appConfig = await getAppConfig<AppConfig>('feature-config', {
  application: 'my-app',
  environment: 'prod',
  transform: 'json'
});

// Decode binary
const binaryConfig = await getAppConfig('binary-config', {
  application: 'my-app',
  environment: 'prod',
  transform: 'binary'
});

// Use POWERTOOLS_SERVICE_NAME env var for application
const config2 = await getAppConfig('my-config', {
  environment: 'prod'  // application defaults to env var
});

// Custom cache
const cached = await getAppConfig('my-config', {
  application: 'my-app',
  environment: 'prod',
  maxAge: 300,
  forceFetch: true
});

Provider Class

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

// Explicit application and environment
const provider = new AppConfigProvider({
  application: 'my-app',
  environment: 'production'
});

// Use POWERTOOLS_SERVICE_NAME for application
const providerEnv = new AppConfigProvider({
  environment: 'production'
});

// Custom client config
const customProvider = new AppConfigProvider({
  application: 'my-app',
  environment: 'staging',
  clientConfig: { region: 'us-west-2', maxAttempts: 3 }
});

// Custom client instance
const client = new AppConfigDataClient({ region: 'eu-west-1' });
const providerWithClient = new AppConfigProvider({
  application: 'my-app',
  environment: 'production',
  awsSdkV3Client: client
});

// Use provider
const flags = await provider.get('feature-flags', { transform: 'json', maxAge: 600 });
const raw = await provider.get('app-config'); // Uint8Array

// Cache management
provider.clearCache(); // e.g., after config deployment

// Multiple environments
const prodProvider = new AppConfigProvider({ application: 'my-app', environment: 'production' });
const devProvider = new AppConfigProvider({ application: 'my-app', environment: 'development' });

Session Management

AppConfig uses session-based tokens:

  • Session tokens: Created on first request, reused for subsequent requests
  • Token expiration: ~24 hours (provider caches 23h 45m)
  • Automatic renewal: Provider handles token renewal
  • Change detection: Tokens track config versions; empty responses = no changes

Caching Behavior

Two-level caching:

  1. Configuration cache: TTL per maxAge (default 5s)
  2. Session token cache: 23h 45m expiration

This optimizes both API calls and retrieval performance.

Configuration Types

Freeform Configuration

const config = await getAppConfig('freeform', { application: 'app', environment: 'prod' });

JSON Configuration

const json = await getAppConfig('json-config', {
  application: 'app',
  environment: 'prod',
  transform: 'json'
});

Feature Flags

Use AppConfig feature flags API separately for type-safe feature flag access.

Deployment Strategies

AppConfig supports:

  • Instant: Immediate deployment
  • Linear: Gradual rollout over time
  • Canary: Deploy to percentage, then all

Provider retrieves currently active version based on strategy. No special code handling needed.

Environment Variables

POWERTOOLS_SERVICE_NAME: Default application name when not explicitly provided

export POWERTOOLS_SERVICE_NAME=my-app
const config = await getAppConfig('my-config', { environment: 'prod' });

IAM Permissions

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["appconfig:StartConfigurationSession", "appconfig:GetLatestConfiguration"],
      "Resource": ["arn:aws:appconfig:region:account-id:application/app-id/environment/env-id/configuration/profile-id"]
    }
  ]
}

Best Practices

  • Set maxAge based on deployment frequency (60-300s for frequent, 600-3600s for stable)
  • Use POWERTOOLS_SERVICE_NAME for consistent application naming
  • Use AppConfig deployment strategies for gradual rollouts
  • Provider handles empty responses (no changes) automatically
  • Clear cache between tests: clearCaches() or provider.clearCache()