Skip to content

AppConfig

Advanced feature flags utility

Usage Documentation

Feature Flags

CLASS DESCRIPTION
AppConfigStore

AppConfigStore

AppConfigStore(
    environment: str,
    application: str,
    name: str,
    max_age: int = 5,
    sdk_config: Config | None = None,
    envelope: str | None = "",
    jmespath_options: dict | None = None,
    logger: logging.Logger | Logger | None = None,
    boto_config: Config | None = None,
    boto3_session: boto3.session.Session | None = None,
    boto3_client: AppConfigDataClient | None = None,
)

Bases: StoreProvider

PARAMETER DESCRIPTION
environment

Appconfig environment, e.g. 'dev/test' etc.

TYPE: str

application

AppConfig application name, e.g. 'powertools'

TYPE: str

name

AppConfig configuration name e.g. my_conf

TYPE: str

max_age

cache expiration time in seconds, or how often to call AppConfig to fetch latest configuration

TYPE: int DEFAULT: 5

sdk_config

Botocore Config object to pass during client initialization

TYPE: Config | None DEFAULT: None

envelope

JMESPath expression to pluck feature flags data from config

TYPE: str | None DEFAULT: ''

jmespath_options

Alternative JMESPath options to be included when filtering expr

TYPE: dict | None DEFAULT: None

logger

Used to log messages. If None is supplied, one will be created.

TYPE: Logger | Logger | None DEFAULT: None

boto_config

Botocore configuration to pass during client initialization

TYPE: Config | None DEFAULT: None

boto3_session

Boto3 session to use for AWS API communication

TYPE: Session DEFAULT: None

boto3_client

Boto3 AppConfigDataClient Client to use, boto3_session and boto_config will be ignored if both are provided

TYPE: AppConfigDataClient DEFAULT: None

METHOD DESCRIPTION
get_configuration

Fetch feature schema configuration from AWS AppConfig

ATTRIBUTE DESCRIPTION
get_raw_configuration

Fetch feature schema configuration from AWS AppConfig

TYPE: dict[str, Any]

Source code in aws_lambda_powertools/utilities/feature_flags/appconfig.py
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
def __init__(
    self,
    environment: str,
    application: str,
    name: str,
    max_age: int = 5,
    sdk_config: Config | None = None,
    envelope: str | None = "",
    jmespath_options: dict | None = None,
    logger: logging.Logger | Logger | None = None,
    boto_config: Config | None = None,
    boto3_session: boto3.session.Session | None = None,
    boto3_client: AppConfigDataClient | None = None,
):
    """This class fetches JSON schemas from AWS AppConfig

    Parameters
    ----------
    environment: str
        Appconfig environment, e.g. 'dev/test' etc.
    application: str
        AppConfig application name, e.g. 'powertools'
    name: str
        AppConfig configuration name e.g. `my_conf`
    max_age: int
        cache expiration time in seconds, or how often to call AppConfig to fetch latest configuration
    sdk_config: Config | None
        Botocore Config object to pass during client initialization
    envelope : str | None
        JMESPath expression to pluck feature flags data from config
    jmespath_options : dict | None
        Alternative JMESPath options to be included when filtering expr
    logger: A logging object
        Used to log messages. If None is supplied, one will be created.
    boto_config: botocore.config.Config, optional
        Botocore configuration to pass during client initialization
    boto3_session : boto3.Session, optional
        Boto3 session to use for AWS API communication
    boto3_client : AppConfigDataClient, optional
        Boto3 AppConfigDataClient Client to use, boto3_session and boto_config will be ignored if both are provided
    """
    super().__init__()
    self.logger = logger or logging.getLogger(__name__)
    self.environment = environment
    self.application = application
    self.name = name
    self.cache_seconds = max_age
    self.config = sdk_config or boto_config
    self.envelope = envelope
    self.jmespath_options = jmespath_options
    self._conf_store = AppConfigProvider(
        environment=environment,
        application=application,
        config=sdk_config or boto_config,
        boto3_client=boto3_client,
        boto3_session=boto3_session,
    )

get_raw_configuration property

get_raw_configuration: dict[str, Any]

Fetch feature schema configuration from AWS AppConfig

get_configuration

get_configuration() -> dict[str, Any]

Fetch feature schema configuration from AWS AppConfig

If envelope is set, it'll extract and return feature flags from configuration, otherwise it'll return the entire configuration fetched from AWS AppConfig.

RAISES DESCRIPTION
ConfigurationStoreError

Any validation error or AppConfig error that can occur

RETURNS DESCRIPTION
dict[str, Any]

parsed JSON dictionary

Source code in aws_lambda_powertools/utilities/feature_flags/appconfig.py
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
def get_configuration(self) -> dict[str, Any]:
    """Fetch feature schema configuration from AWS AppConfig

    If envelope is set, it'll extract and return feature flags from configuration,
    otherwise it'll return the entire configuration fetched from AWS AppConfig.

    Raises
    ------
    ConfigurationStoreError
        Any validation error or AppConfig error that can occur

    Returns
    -------
    dict[str, Any]
        parsed JSON dictionary
    """
    config = self.get_raw_configuration

    if self.envelope:
        self.logger.debug("Envelope enabled; extracting data from config", extra={"envelope": self.envelope})
        config = jmespath_utils.query(
            data=config,
            envelope=self.envelope,
            jmespath_options=self.jmespath_options,
        )

    return config