> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# AppConfig

> AWS AppConfig. Distributes application configuration and feature flags to running applications, rolling changes out gradually and rolling back on a CloudWatch alarm.

**On this page**

* [Coverage by target cloud](#coverage-by-target-cloud)
* [How the targets compare](#how-the-targets-compare)
  * [Infrastructure-only adaptation](#infrastructure-only-adaptation)
* [On Google Cloud, OCI, and Private Kubernetes](#on-google-cloud-oci-and-private-kubernetes)
* [On Azure](#on-azure)

## Coverage by target cloud

| Target             | Available |
| ------------------ | --------- |
| Google Cloud       | ✓         |
| Azure              | ✓         |
| OCI                | ✓         |
| Private Kubernetes | ✓         |

## How the targets compare

Each row compares a capability of AppConfig with its adaptation on each target.
A dash means this row is not stated for that target.

### Infrastructure-only adaptation

| Capability                                            | AppConfig                  | Google Cloud, OCI, and Private Kubernetes                                                                                 | Azure                                                                                                                                                           |
| ----------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Feature-flag evaluation (enabled state + typed value) | Yes                        | Yes - Flagsmith evaluates a flag's enabled state and value through its SDK / REST API                                     | Yes - App Configuration evaluates native feature flags through its SDK                                                                                          |
| Dynamic / free-form configuration                     | Yes                        | Partial - served as Flagsmith remote-config values; the AWS.AppConfig.FeatureFlags typed-attribute schema is not enforced | Yes - served as App Configuration key-values in the same store                                                                                                  |
| Per-environment targeting                             | Yes                        | Yes - native Flagsmith environments under a Flagsmith project                                                             | Partial - App Configuration labels hold the environment dimension; the AppConfig application and configuration-profile hierarchy is not recreated               |
| Progressive rollout (bake / growth / final-bake)      | Yes                        | No - this mapping publishes an environment's flag values together; implement a staged schedule in the release pipeline    | No - App Configuration serves the current value with no managed ramp; a staged rollout becomes a CI / pipeline responsibility                                   |
| Monitored, rollback-capable deployment                | Yes                        | No - no managed deployment object; a rollback is republishing the prior value (a CI / pipeline responsibility)            | No - no managed deployment object; a rollback is republishing the prior value (a CI / pipeline responsibility), aided by the store's key-value revision history |
| Automatic rollback on a CloudWatch alarm              | Yes                        | No - no alarm-driven auto-revert; monitoring and revert move to CI / pipeline                                             | No - no alarm-driven auto-revert; monitoring and revert move to CI / pipeline                                                                                   |
| Config validators (JSON-Schema / Lambda)              | Yes                        | No - run the required AppConfig JSON-Schema or Lambda validation in the release pipeline                                  | No - run the required AppConfig JSON-Schema or Lambda validation in the release pipeline                                                                        |
| Runs outside AWS                                      | No - AppConfig is AWS-only | Yes - Flagsmith runs on the appliance's Kubernetes cluster                                                                | -                                                                                                                                                               |
| API coverage                                          | full                       | partial                                                                                                                   | partial                                                                                                                                                         |
| Runs off AWS (native Azure managed service)           | No - AppConfig is AWS-only | -                                                                                                                         | Yes - Azure App Configuration is a native Azure managed service                                                                                                 |

## On Google Cloud, OCI, and Private Kubernetes

| Operation                              | Area                | Support      | Depth        | Notes                                                                                                                                    |
| -------------------------------------- | ------------------- | ------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| GetLatestConfiguration                 | Config reads        | Supported    | Common       | polls the current flag set and values; served as a Flagsmith SDK flag fetch against the in-cluster server                                |
| StartConfigurationSession              | Config reads        | Supported    | Common       | the application opens a flag / config read session; served by the Flagsmith SDK client instead of the AppConfig agent                    |
| CreateDeploymentStrategy               | Deployment controls | Out of scope | Full surface | the staged bake / growth / final-bake ramp has no Flagsmith analog; the rollout schedule is a CI / pipeline responsibility               |
| Deployment validators + alarm rollback | Deployment controls | Out of scope | Full surface | JSON-Schema / Lambda validators and CloudWatch-alarm automatic rollback have no counterpart; validation and revert move to CI / pipeline |
| StartDeployment / StopDeployment       | Deployment controls | Out of scope | Full surface | no monitored deployment object; a rollback is republishing the prior flag value                                                          |
| Feature flag enabled state             | Feature flags       | Supported    | Common       | a flag's on/off state reads back through the Flagsmith SDK                                                                               |
| Feature flag typed value               | Feature flags       | Partial      | Most usage   | the value lands as a Flagsmith remote-config value; the AWS.AppConfig.FeatureFlags attribute schema is not enforced                      |
| CreateApplication / CreateEnvironment  | Provisioning        | Supported    | Most usage   | the application and environment become a Flagsmith project and environment at deploy time                                                |
| CreateConfigurationProfile             | Provisioning        | Partial      | Most usage   | a feature-flag profile becomes Flagsmith flags; a free-form profile becomes remote-config values                                         |
| CreateHostedConfigurationVersion       | Provisioning        | Supported    | Most usage   | the configuration document is the source the flags are provisioned from                                                                  |

#### How it works

This target replaces the AppConfig agent with Flagsmith, an open-source feature-flag and configuration server on the appliance's Kubernetes cluster. Update application reads to use the Flagsmith SDK or REST API for each flag's enabled state and value.

At deployment, Tensor9 creates flags and remote-configuration values from the `AWS.AppConfig.FeatureFlags` JSON document. AppConfig's staged rollout, deployment monitoring and automatic rollback are unsupported; implement those release controls in your deployment process.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24gcmVhZHMgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQXBwQ29uZmlnIGFnZW50LCB3aGljaCBmZXRjaGVzIHRoZW0gZnJvbSBBV1MgQXBwQ29uZmlnLiBBZnRlcjogaW4gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBhcHBsaWNhdGlvbiByZWFkcyB0aGUgc2FtZSBmbGFncyB0aHJvdWdoIHRoZSBGbGFnc21pdGggU0RLIGZyb20gYSBzZWxmLWhvc3RlZCBGbGFnc21pdGggc2VydmVyIHJ1bm5pbmcgb24gdGhlIGFwcGxpYW5jZSdzIGNsdXN0ZXIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJmcy1haDEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODAiIHdpZHRoPSIxMjgiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5NCIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5NCIgeT0iMTI2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QXBwQ29uZmlnIGFnZW50PC90ZXh0Pgo8bGluZSB4MT0iMTU4IiB5MT0iMTEzIiB4Mj0iMjE0IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNmcy1haDEpIi8+Cjx0ZXh0IHg9IjE4NiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjhweCI+cG9sbCBmbGFnczwvdGV4dD4KPHJlY3QgeD0iMjE4IiB5PSI4MCIgd2lkdGg9IjE0NCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI5MCIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExLjVweCI+QVdTIEFwcENvbmZpZzwvdGV4dD4KPHRleHQgeD0iMjkwIiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5BV1MtbWFuYWdlZDwvdGV4dD4KPGxpbmUgeDE9IjQxOCIgeTE9IjQwIiB4Mj0iNDE4IiB5Mj0iMTYwIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojNGEyNDk3Ij5PTiBUSEUgVEFSR0VUIENMT1VEPC90ZXh0Pgo8cmVjdCB4PSI0NzQiIHk9IjgwIiB3aWR0aD0iOTYiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MjIiIHk9IjEwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iNTIyIiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY2MzNDQyI+RmxhZ3NtaXRoIFNESzwvdGV4dD4KPGxpbmUgeDE9IjU3MCIgeTE9IjExMyIgeDI9IjU5NiIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZnMtYWgxKSIvPgo8cmVjdCB4PSI2MDAiIHk9Ijc2IiB3aWR0aD0iMjI0IiBoZWlnaHQ9Ijc0IiByeD0iMTEiIGZpbGw9IiNmMmVjZmIiIHN0cm9rZT0iIzY2MzNDQyIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNzEyIiB5PSIxMDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNGEyNDk3OyBmb250LXNpemU6MTJweCI+RmxhZ3NtaXRoIHNlcnZlcjwvdGV4dD4KPHRleHQgeD0iNzEyIiB5PSIxMTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM0YTI0OTciPnNlbGYtaG9zdGVkIG9uIHRoZSB0YXJnZXQgY2x1c3RlcjwvdGV4dD4KPHRleHQgeD0iNzEyIiB5PSIxMzMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM0YTI0OTciPlNESyAvIFJFU1QgwrcgcG9ydCA4MDAwPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS the application reads flags and configuration from the AppConfig agent, which fetches them from AWS AppConfig. After: in the target cloud the same application reads the same flags through the Flagsmith SDK from a self-hosted Flagsmith server running on the appliance's cluster." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24gcmVhZHMgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQXBwQ29uZmlnIGFnZW50LCB3aGljaCBmZXRjaGVzIHRoZW0gZnJvbSBBV1MgQXBwQ29uZmlnLiBBZnRlcjogaW4gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBhcHBsaWNhdGlvbiByZWFkcyB0aGUgc2FtZSBmbGFncyB0aHJvdWdoIHRoZSBGbGFnc21pdGggU0RLIGZyb20gYSBzZWxmLWhvc3RlZCBGbGFnc21pdGggc2VydmVyIHJ1bm5pbmcgb24gdGhlIGFwcGxpYW5jZSdzIGNsdXN0ZXIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJmcy1haDEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjgwIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTQiIHk9IjEwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTQiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFwcENvbmZpZyBhZ2VudDwvdGV4dD4KPGxpbmUgeDE9IjE1OCIgeTE9IjExMyIgeDI9IjIxNCIgeTI9IjExMyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZnMtYWgxKSIvPgo8dGV4dCB4PSIxODYiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4cHgiPnBvbGwgZmxhZ3M8L3RleHQ+CjxyZWN0IHg9IjIxOCIgeT0iODAiIHdpZHRoPSIxNDQiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyOTAiIHk9IjEwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMS41cHgiPkFXUyBBcHBDb25maWc8L3RleHQ+Cjx0ZXh0IHg9IjI5MCIgeT0iMTI2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+QVdTLW1hbmFnZWQ8L3RleHQ+CjxsaW5lIHgxPSI0MTgiIHkxPSI0MCIgeDI9IjQxOCIgeTI9IjE2MCIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI0NjIiIHk9IjQ2IiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICNhYTkwZGUiPk9OIFRIRSBUQVJHRVQgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjQ3NCIgeT0iODAiIHdpZHRoPSI5NiIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyMiIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjIiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYWE5MGRlIj5GbGFnc21pdGggU0RLPC90ZXh0Pgo8bGluZSB4MT0iNTcwIiB5MT0iMTEzIiB4Mj0iNTk2IiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNmcy1haDEpIi8+CjxyZWN0IHg9IjYwMCIgeT0iNzYiIHdpZHRoPSIyMjQiIGhlaWdodD0iNzQiIHJ4PSIxMSIgZmlsbD0iIzIzMWEzMSIgc3Ryb2tlPSIjNjYzM0NDIiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI3MTIiIHk9IjEwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNhYTkwZGU7IGZvbnQtc2l6ZToxMnB4Ij5GbGFnc21pdGggc2VydmVyPC90ZXh0Pgo8dGV4dCB4PSI3MTIiIHk9IjExOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2FhOTBkZSI+c2VsZi1ob3N0ZWQgb24gdGhlIHRhcmdldCBjbHVzdGVyPC90ZXh0Pgo8dGV4dCB4PSI3MTIiIHk9IjEzMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2FhOTBkZSI+U0RLIC8gUkVTVCDCtyBwb3J0IDgwMDA8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS the application reads flags and configuration from the AppConfig agent, which fetches them from AWS AppConfig. After: in the target cloud the same application reads the same flags through the Flagsmith SDK from a self-hosted Flagsmith server running on the appliance's cluster." />
</div>

<p className="t9-caption">The application reads flag state and values through the Flagsmith SDK or REST API. Flagsmith runs on the appliance cluster.</p>

#### Architecture

Terraform creates a Flagsmith Kubernetes Deployment on port 8000 and a PostgreSQL StatefulSet with a persistent volume. A ClusterIP Service exposes Flagsmith to the application; a headless Service exposes PostgreSQL to Flagsmith. PostgreSQL stores flag state and values, which Flagsmith evaluates when the SDK refreshes its data.

A provisioning step reads the AppConfig document and creates flags through the Flagsmith administration API before the application starts reading them. After provisioning, the application reads the running Flagsmith service. Your platform team operates Flagsmith and PostgreSQL, including availability, capacity, backups and upgrades.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUwIiB2aWV3Qm94PSIwIDAgODM2IDI1MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IG9uIHRoZSBhcHBsaWFuY2UgY2x1c3RlciB0aGUgYXBwbGljYXRpb24gcmVhZHMgZmxhZ3MgZnJvbSBhIEZsYWdzbWl0aCBzZXJ2ZXIgRGVwbG95bWVudCwgd2hpY2ggc3RvcmVzIGl0cyBzdGF0ZSBpbiBhbiBpbi1jbHVzdGVyIFBvc3RncmVzIFN0YXRlZnVsU2V0LiBBdCBkZXBsb3kgdGltZSBhIHByb3Zpc2lvbmluZyBzdGVwIHJlYWRzIHRoZSBBcHBDb25maWcgY29uZmlndXJhdGlvbiBkb2N1bWVudCBhbmQgY3JlYXRlcyB0aGUgZmxhZ3MgaW4gRmxhZ3NtaXRoIHRocm91Z2ggaXRzIGFkbWluIEFQSS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImZzLWFyIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPG1hcmtlciBpZD0iZnMtYXJ2IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM2NjMzQ0MiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzNCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIyMDgiIHJ4PSIxNiIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzRhMjQ5NyI+QVBQTElBTkNFIENMVVNURVI8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSIxMDQiIHdpZHRoPSIxMjAiIGhlaWdodD0iOTIiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI4NiIgeT0iMTQ2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9Ijg2IiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5GbGFnc21pdGggU0RLPC90ZXh0Pgo8dGV4dCB4PSI4NiIgeT0iMTgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NjMzQ0MiPmZsYWcgc3RhdGUgYW5kIHZhbHVlczwvdGV4dD4KPGxpbmUgeDE9IjE0NiIgeTE9IjE1MCIgeDI9IjE5NiIgeTI9IjE1MCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZnMtYXIpIi8+Cjx0ZXh0IHg9IjE3MSIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjhweCI+U0RLIC8gUkVTVDwvdGV4dD4KPHJlY3QgeD0iMjAwIiB5PSIxMTYiIHdpZHRoPSIxNzIiIGhlaWdodD0iNjgiIHJ4PSIxMiIgZmlsbD0iI2YyZWNmYiIgc3Ryb2tlPSIjNjYzM0NDIiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSIyODYiIHk9IjE0NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM0YTI0OTc7IGZvbnQtc2l6ZToxMi41cHgiPkZsYWdzbWl0aCBzZXJ2ZXI8L3RleHQ+Cjx0ZXh0IHg9IjI4NiIgeT0iMTYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNGEyNDk3Ij5EZXBsb3ltZW50IMK3IHBvcnQgODAwMDwvdGV4dD4KPGxpbmUgeDE9IjI4NiIgeTE9IjE4NCIgeDI9IjI4NiIgeTI9IjIwOCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZnMtYXIpIi8+CjxyZWN0IHg9IjIwMCIgeT0iMjA4IiB3aWR0aD0iMTcyIiBoZWlnaHQ9IjI2IiByeD0iOCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSIyODYiIHk9IjIyNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZvbnQtc2l6ZToxMHB4Ij5Qb3N0Z3JlcyDCtyBTdGF0ZWZ1bFNldDwvdGV4dD4KPHJlY3QgeD0iNDQwIiB5PSI1OCIgd2lkdGg9IjM3MiIgaGVpZ2h0PSIxNzYiIHJ4PSIxMyIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSI2MjYiIHk9IjgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkRlcGxveSB0aW1lIMK3IG9uZS10aW1lIHByb3Zpc2lvbmluZzwvdGV4dD4KPHJlY3QgeD0iNDU2IiB5PSI5NiIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI2MCIgcng9IjEwIiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjUzMSIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNGEyNDk3OyBmb250LXdlaWdodDo3MDA7ZmlsbDojNDc1NTY5Ij5BcHBDb25maWc8L3RleHQ+Cjx0ZXh0IHg9IjUzMSIgeT0iMTM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNGEyNDk3OyBmb250LXdlaWdodDo3MDA7ZmlsbDojNDc1NTY5Ij5jb25maWcgZG9jdW1lbnQ8L3RleHQ+CjxsaW5lIHgxPSI2MDYiIHkxPSIxMjYiIHgyPSI2NDgiIHkyPSIxMjYiIHN0cm9rZT0iIzY2MzNDQyIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2ZzLWFydikiLz4KPHRleHQgeD0iNjI3IiB5PSIxMTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM0YTI0OTc7IGZvbnQtd2VpZ2h0OjcwMCI+c2VlZDwvdGV4dD4KPHJlY3QgeD0iNjUyIiB5PSI5NiIgd2lkdGg9IjE0NCIgaGVpZ2h0PSI2MCIgcng9IjEwIiBmaWxsPSIjZjJlY2ZiIiBzdHJva2U9IiM2NjMzQ0MiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjcyNCIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNGEyNDk3OyBmb250LXdlaWdodDo3MDAiPkZsYWdzbWl0aCBmbGFnczwvdGV4dD4KPHRleHQgeD0iNzI0IiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj52aWEgYWRtaW4gQVBJPC90ZXh0Pgo8dGV4dCB4PSI2MjYiIHk9IjE4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZToxMC41cHgiPnJ1bnMgb25jZSwgYmVmb3JlIHRoZSBhcHAncyBmaXJzdCByZWFkPC90ZXh0Pgo8dGV4dCB4PSI2MjYiIHk9IjIwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZToxMC41cHgiPnRoZSBhcHAgdGhlbiByZWFkcyBmcm9tIHRoZSBGbGFnc21pdGggc2VydmVyLCBub3QgdGhpcyBzdGVwPC90ZXh0Pgo8L3N2Zz4=" alt="Architecture: on the appliance cluster the application reads flags from a Flagsmith server Deployment, which stores its state in an in-cluster Postgres StatefulSet. At deploy time a provisioning step reads the AppConfig configuration document and creates the flags in Flagsmith through its admin API." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUwIiB2aWV3Qm94PSIwIDAgODM2IDI1MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IG9uIHRoZSBhcHBsaWFuY2UgY2x1c3RlciB0aGUgYXBwbGljYXRpb24gcmVhZHMgZmxhZ3MgZnJvbSBhIEZsYWdzbWl0aCBzZXJ2ZXIgRGVwbG95bWVudCwgd2hpY2ggc3RvcmVzIGl0cyBzdGF0ZSBpbiBhbiBpbi1jbHVzdGVyIFBvc3RncmVzIFN0YXRlZnVsU2V0LiBBdCBkZXBsb3kgdGltZSBhIHByb3Zpc2lvbmluZyBzdGVwIHJlYWRzIHRoZSBBcHBDb25maWcgY29uZmlndXJhdGlvbiBkb2N1bWVudCBhbmQgY3JlYXRlcyB0aGUgZmxhZ3MgaW4gRmxhZ3NtaXRoIHRocm91Z2ggaXRzIGFkbWluIEFQSS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImZzLWFyIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPG1hcmtlciBpZD0iZnMtYXJ2IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM2NjMzQ0MiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzNCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIyMDgiIHJ4PSIxNiIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICNhYTkwZGUiPkFQUExJQU5DRSBDTFVTVEVSPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iMTA0IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjkyIiByeD0iMTIiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iODYiIHk9IjE0NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI4NiIgeT0iMTY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+RmxhZ3NtaXRoIFNESzwvdGV4dD4KPHRleHQgeD0iODYiIHk9IjE4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYWE5MGRlIj5mbGFnIHN0YXRlIGFuZCB2YWx1ZXM8L3RleHQ+CjxsaW5lIHgxPSIxNDYiIHkxPSIxNTAiIHgyPSIxOTYiIHkyPSIxNTAiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2ZzLWFyKSIvPgo8dGV4dCB4PSIxNzEiIHk9IjE0MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4cHgiPlNESyAvIFJFU1Q8L3RleHQ+CjxyZWN0IHg9IjIwMCIgeT0iMTE2IiB3aWR0aD0iMTcyIiBoZWlnaHQ9IjY4IiByeD0iMTIiIGZpbGw9IiMyMzFhMzEiIHN0cm9rZT0iIzY2MzNDQyIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMjg2IiB5PSIxNDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYWE5MGRlOyBmb250LXNpemU6MTIuNXB4Ij5GbGFnc21pdGggc2VydmVyPC90ZXh0Pgo8dGV4dCB4PSIyODYiIHk9IjE2MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2FhOTBkZSI+RGVwbG95bWVudCDCtyBwb3J0IDgwMDA8L3RleHQ+CjxsaW5lIHgxPSIyODYiIHkxPSIxODQiIHgyPSIyODYiIHkyPSIyMDgiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2ZzLWFyKSIvPgo8cmVjdCB4PSIyMDAiIHk9IjIwOCIgd2lkdGg9IjE3MiIgaGVpZ2h0PSIyNiIgcng9IjgiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iMjg2IiB5PSIyMjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6MTBweCI+UG9zdGdyZXMgwrcgU3RhdGVmdWxTZXQ8L3RleHQ+CjxyZWN0IHg9IjQ0MCIgeT0iNTgiIHdpZHRoPSIzNzIiIGhlaWdodD0iMTc2IiByeD0iMTMiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHRleHQgeD0iNjI2IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5EZXBsb3kgdGltZSDCtyBvbmUtdGltZSBwcm92aXNpb25pbmc8L3RleHQ+CjxyZWN0IHg9IjQ1NiIgeT0iOTYiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjAiIHJ4PSIxMCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI1MzEiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2FhOTBkZTsgZm9udC13ZWlnaHQ6NzAwO2ZpbGw6ICNjOWNmZDgiPkFwcENvbmZpZzwvdGV4dD4KPHRleHQgeD0iNTMxIiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNhYTkwZGU7IGZvbnQtd2VpZ2h0OjcwMDtmaWxsOiAjYzljZmQ4Ij5jb25maWcgZG9jdW1lbnQ8L3RleHQ+CjxsaW5lIHgxPSI2MDYiIHkxPSIxMjYiIHgyPSI2NDgiIHkyPSIxMjYiIHN0cm9rZT0iIzY2MzNDQyIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2ZzLWFydikiLz4KPHRleHQgeD0iNjI3IiB5PSIxMTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNhYTkwZGU7IGZvbnQtd2VpZ2h0OjcwMCI+c2VlZDwvdGV4dD4KPHJlY3QgeD0iNjUyIiB5PSI5NiIgd2lkdGg9IjE0NCIgaGVpZ2h0PSI2MCIgcng9IjEwIiBmaWxsPSIjMjMxYTMxIiBzdHJva2U9IiM2NjMzQ0MiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjcyNCIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYWE5MGRlOyBmb250LXdlaWdodDo3MDAiPkZsYWdzbWl0aCBmbGFnczwvdGV4dD4KPHRleHQgeD0iNzI0IiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij52aWEgYWRtaW4gQVBJPC90ZXh0Pgo8dGV4dCB4PSI2MjYiIHk9IjE4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZToxMC41cHgiPnJ1bnMgb25jZSwgYmVmb3JlIHRoZSBhcHAncyBmaXJzdCByZWFkPC90ZXh0Pgo8dGV4dCB4PSI2MjYiIHk9IjIwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZToxMC41cHgiPnRoZSBhcHAgdGhlbiByZWFkcyBmcm9tIHRoZSBGbGFnc21pdGggc2VydmVyLCBub3QgdGhpcyBzdGVwPC90ZXh0Pgo8L3N2Zz4=" alt="Architecture: on the appliance cluster the application reads flags from a Flagsmith server Deployment, which stores its state in an in-cluster Postgres StatefulSet. At deploy time a provisioning step reads the AppConfig configuration document and creates the flags in Flagsmith through its admin API." />
</div>

<p className="t9-caption">The Flagsmith server and its Postgres run on the appliance cluster; a one-time provisioning step at deploy creates the flags from the AppConfig configuration document, and the application reads from the server after that.</p>

#### Creating flags from the configuration document

An `AWS.AppConfig.FeatureFlags` profile has a top-level `values` map, one entry per flag, each with an `enabled` boolean and optional typed attributes. The provisioning step walks that map and creates one Flagsmith flag per entry: the flag's on/off state maps to Flagsmith's enabled state, and a flag's attributes become its remote-config value. A configuration profile that holds free-form JSON rather than feature flags becomes remote-config values on the same Flagsmith environment.

AppConfig validates feature-flag attributes against declared types and constraints. Flagsmith stores the translated values but does not apply that schema. Validate content before provisioning or editing flags so future values meet your application's expectations.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBbiBBV1MuQXBwQ29uZmlnLkZlYXR1cmVGbGFncyBkb2N1bWVudCBoYXMgYSB2YWx1ZXMgbWFwLCBvbmUgZW50cnkgcGVyIGZsYWcgd2l0aCBhbiBlbmFibGVkIGJvb2xlYW4gYW5kIHR5cGVkIGF0dHJpYnV0ZXMuIEVhY2ggZW50cnkgYmVjb21lcyBhIEZsYWdzbWl0aCBmbGFnIHRoYXQga2VlcHMgaXRzIGVuYWJsZWQgc3RhdGUgYW5kIHZhbHVlOyB0aGUgdHlwZWQtYXR0cmlidXRlIHNjaGVtYSBpcyBub3QgZW5mb3JjZWQgYnkgRmxhZ3NtaXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJmcy1hMyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjNjYzM0NDIi8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMzAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM2NDc0OGIiPkFQUENPTkZJRyBDT05GSUdVUkFUSU9OIERPQ1VNRU5UPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iNDIiIHdpZHRoPSIzMzAiIGhlaWdodD0iMTc2IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNDQiIHk9IjcwIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojMzM0MTU1Ij4mIzEyMzsgImZsYWdzIjogJiMxMjM7ICJjaGVja291dF92MiI6ICYjMTIzOyYjMTI1OyAmIzEyNTssPC90ZXh0Pgo8dGV4dCB4PSI0NCIgeT0iOTIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMzMzQxNTUiPiAgInZhbHVlcyI6ICYjMTIzOzwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjExNCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzRhMjQ5NyI+ICAgICJjaGVja291dF92MiI6ICYjMTIzOzwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjEzNCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzRhMjQ5NyI+ICAgICAgImVuYWJsZWQiOiB0cnVlLDwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjE1NCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6I2I0NTMwOSI+ICAgICAgInJvbGxvdXRfcGN0IjogMjU8L3RleHQ+Cjx0ZXh0IHg9IjYwIiB5PSIxNzQiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiM0YTI0OTciPiAgICAmIzEyNTsgJiMxMjU7ICYjMTI1OzwvdGV4dD4KPHRleHQgeD0iNDQiIHk9IjIwNCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6I2I0NTMwOSI+dHlwZWQgYXR0cmlidXRlcyBhcnJpdmUgYXMgdmFsdWVzLCBub3QgYXMgYSBzY2hlbWE8L3RleHQ+CjxsaW5lIHgxPSIzNjQiIHkxPSIxMjgiIHgyPSI0MTYiIHkyPSIxMjgiIHN0cm9rZT0iIzY2MzNDQyIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2ZzLWEzKSIvPgo8dGV4dCB4PSIzOTAiIHk9IjExOSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzRhMjQ5NzsgZm9udC13ZWlnaHQ6NzAwIj5zZWVkPC90ZXh0Pgo8dGV4dCB4PSI0MjYiIHk9IjMwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojNGEyNDk3Ij5GTEFHU01JVEg8L3RleHQ+CjxyZWN0IHg9IjQyNiIgeT0iNDIiIHdpZHRoPSIzODQiIGhlaWdodD0iMTc2IiByeD0iMTIiIGZpbGw9IiNmMmVjZmIiIHN0cm9rZT0iIzY2MzNDQyIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHJlY3QgeD0iNDQ0IiB5PSI2MiIgd2lkdGg9IjM0OCIgaGVpZ2h0PSI0NCIgcng9IjkiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2Q2YzdmMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDYyIiB5PSI4MCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzMzNDE1NSI+ZmxhZzogY2hlY2tvdXRfdjI8L3RleHQ+Cjx0ZXh0IHg9IjQ2MiIgeT0iOTgiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiM0YTI0OTciPmVuYWJsZWQgPSB0cnVlPC90ZXh0Pgo8cmVjdCB4PSI0NDQiIHk9IjExNiIgd2lkdGg9IjM0OCIgaGVpZ2h0PSI0NCIgcng9IjkiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2Q2YzdmMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDYyIiB5PSIxMzQiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMzMzQxNTUiPnJlbW90ZSBjb25maWc6IHJvbGxvdXRfcGN0PC90ZXh0Pgo8dGV4dCB4PSI0NjIiIHk9IjE1MiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzRhMjQ5NyI+dmFsdWUgPSAiMjUiPC90ZXh0Pgo8dGV4dCB4PSI0NDQiIHk9IjE4OCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6IzQ3NTU2OSI+b25lIEZsYWdzbWl0aCBmbGFnIHBlciBBcHBDb25maWcgZmxhZzsgZnJlZS1mb3JtIGtleXMgYmVjb21lPC90ZXh0Pgo8dGV4dCB4PSI0NDQiIHk9IjIwNCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6IzQ3NTU2OSI+cmVtb3RlLWNvbmZpZyB2YWx1ZXMgb24gdGhlIHNhbWUgZW52aXJvbm1lbnQ8L3RleHQ+Cjwvc3ZnPg==" alt="An AWS.AppConfig.FeatureFlags document has a values map, one entry per flag with an enabled boolean and typed attributes. Each entry becomes a Flagsmith flag that keeps its enabled state and value; the typed-attribute schema is not enforced by Flagsmith." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBbiBBV1MuQXBwQ29uZmlnLkZlYXR1cmVGbGFncyBkb2N1bWVudCBoYXMgYSB2YWx1ZXMgbWFwLCBvbmUgZW50cnkgcGVyIGZsYWcgd2l0aCBhbiBlbmFibGVkIGJvb2xlYW4gYW5kIHR5cGVkIGF0dHJpYnV0ZXMuIEVhY2ggZW50cnkgYmVjb21lcyBhIEZsYWdzbWl0aCBmbGFnIHRoYXQga2VlcHMgaXRzIGVuYWJsZWQgc3RhdGUgYW5kIHZhbHVlOyB0aGUgdHlwZWQtYXR0cmlidXRlIHNjaGVtYSBpcyBub3QgZW5mb3JjZWQgYnkgRmxhZ3NtaXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJmcy1hMyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjNjYzM0NDIi8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMzAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjYzljZmQ4Ij5BUFBDT05GSUcgQ09ORklHVVJBVElPTiBET0NVTUVOVDwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjQyIiB3aWR0aD0iMzMwIiBoZWlnaHQ9IjE3NiIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjQ0IiB5PSI3MCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPiYjMTIzOyAiZmxhZ3MiOiAmIzEyMzsgImNoZWNrb3V0X3YyIjogJiMxMjM7JiMxMjU7ICYjMTI1Oyw8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSI5MiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPiAgInZhbHVlcyI6ICYjMTIzOzwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjExNCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNhYTkwZGUiPiAgICAiY2hlY2tvdXRfdjIiOiAmIzEyMzs8L3RleHQ+Cjx0ZXh0IHg9IjYwIiB5PSIxMzQiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYWE5MGRlIj4gICAgICAiZW5hYmxlZCI6IHRydWUsPC90ZXh0Pgo8dGV4dCB4PSI2MCIgeT0iMTU0IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2RlYjI5MCI+ICAgICAgInJvbGxvdXRfcGN0IjogMjU8L3RleHQ+Cjx0ZXh0IHg9IjYwIiB5PSIxNzQiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYWE5MGRlIj4gICAgJiMxMjU7ICYjMTI1OyAmIzEyNTs8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIyMDQiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj50eXBlZCBhdHRyaWJ1dGVzIGFycml2ZSBhcyB2YWx1ZXMsIG5vdCBhcyBhIHNjaGVtYTwvdGV4dD4KPGxpbmUgeDE9IjM2NCIgeTE9IjEyOCIgeDI9IjQxNiIgeTI9IjEyOCIgc3Ryb2tlPSIjNjYzM0NDIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZnMtYTMpIi8+Cjx0ZXh0IHg9IjM5MCIgeT0iMTE5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYWE5MGRlOyBmb250LXdlaWdodDo3MDAiPnNlZWQ8L3RleHQ+Cjx0ZXh0IHg9IjQyNiIgeT0iMzAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjYWE5MGRlIj5GTEFHU01JVEg8L3RleHQ+CjxyZWN0IHg9IjQyNiIgeT0iNDIiIHdpZHRoPSIzODQiIGhlaWdodD0iMTc2IiByeD0iMTIiIGZpbGw9IiMyMzFhMzEiIHN0cm9rZT0iIzY2MzNDQyIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHJlY3QgeD0iNDQ0IiB5PSI2MiIgd2lkdGg9IjM0OCIgaGVpZ2h0PSI0NCIgcng9IjkiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzRjM2Q2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDYyIiB5PSI4MCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPmZsYWc6IGNoZWNrb3V0X3YyPC90ZXh0Pgo8dGV4dCB4PSI0NjIiIHk9Ijk4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2FhOTBkZSI+ZW5hYmxlZCA9IHRydWU8L3RleHQ+CjxyZWN0IHg9IjQ0NCIgeT0iMTE2IiB3aWR0aD0iMzQ4IiBoZWlnaHQ9IjQ0IiByeD0iOSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjNGMzZDY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0NjIiIHk9IjEzNCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPnJlbW90ZSBjb25maWc6IHJvbGxvdXRfcGN0PC90ZXh0Pgo8dGV4dCB4PSI0NjIiIHk9IjE1MiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNhYTkwZGUiPnZhbHVlID0gIjI1IjwvdGV4dD4KPHRleHQgeD0iNDQ0IiB5PSIxODgiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5vbmUgRmxhZ3NtaXRoIGZsYWcgcGVyIEFwcENvbmZpZyBmbGFnOyBmcmVlLWZvcm0ga2V5cyBiZWNvbWU8L3RleHQ+Cjx0ZXh0IHg9IjQ0NCIgeT0iMjA0IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2M5Y2ZkOCI+cmVtb3RlLWNvbmZpZyB2YWx1ZXMgb24gdGhlIHNhbWUgZW52aXJvbm1lbnQ8L3RleHQ+Cjwvc3ZnPg==" alt="An AWS.AppConfig.FeatureFlags document has a values map, one entry per flag with an enabled boolean and typed attributes. Each entry becomes a Flagsmith flag that keeps its enabled state and value; the typed-attribute schema is not enforced by Flagsmith." />
</div>

<p className="t9-caption">Each AWS.AppConfig.FeatureFlags entry becomes a Flagsmith flag; its enabled state and typed value come with it, and free-form configuration becomes remote-config values.</p>

#### Reading flag state and values

Flagsmith returns a flag's enabled state and its associated configuration value, such as a rollout percentage, variant name or tuning constant. Update application integration to the Flagsmith SDK while preserving how the application uses those values.

#### Per-environment targeting

An AppConfig application maps to a Flagsmith project, and each AppConfig environment maps to a Flagsmith environment. Environments such as staging and production keep independent states and values for the project's flags.

AppConfig configuration profiles, profile versions and deployment history are not recreated. The target contains the provisioned flag state. Keep the source document and change history in the system that provisions Flagsmith.

#### Reading at runtime

Replace reads from the AppConfig agent's loopback address with the Flagsmith SDK or REST API for the in-cluster server. The SDK caches the environment's flags and refreshes periodically; reads against that cache do not require a request per flag.

Configure the Flagsmith SDK with the server URL and the appropriate environment key. The native SDK uses that key; cluster workload identity does not replace Flagsmith authentication. Size Flagsmith and PostgreSQL for refresh traffic. Choose cache settings based on how long the application can tolerate stale flags during a server interruption.

#### Replacing rollout and rollback controls

This target provisions current flag values but does not recreate AppConfig deployment strategies, deployment monitoring or validators. Add the following controls to your release process where your application requires them.

* **Staged rollout.** An AppConfig deployment strategy ramps a new value to a growing fraction of the fleet over a bake window (a growth factor, a growth type, a final bake time). Flagsmith flips a flag for the whole environment at once. To stage a Flagsmith rollout, drive it from the percentage-split value the application reads, changed on a schedule by the provisioning process.
* **Monitored, rollback-capable deployment.** An AppConfig deployment is an object with a lifecycle that can be halted and rolled back. Flagsmith has no deployment object; a rollback is republishing the prior flag value. Keep the prior value recoverable in the provisioning pipeline so a revert is one step.
* **Automatic rollback on an alarm.** AppConfig reverts a deployment automatically when a bound CloudWatch alarm fires during the bake. Flagsmith does not watch a metric. Reproduce this as a pipeline that watches the signal and republishes the prior value on a bad reading.
* **Pre-deploy validators.** AppConfig can block a new version on a JSON-Schema or Lambda validator before it ships. Flagsmith enforces no validator on a flag change. Run that validation in CI, on the flag content, before it is provisioned.

#### Other considerations

* **Provision the final AppConfig state.** Flagsmith is initialized from the configuration document at deployment. If AppConfig changes during cutover, update that document before provisioning so the target receives the intended final values.
* **Operate Flagsmith and its database.** The appliance hosts the server, PostgreSQL and their Kubernetes Services. Your team manages cluster capacity and patching, Flagsmith upgrades and database backups.

## On Azure

| Operation                              | Area                | Support      | Depth        | Notes                                                                                                                                               |
| -------------------------------------- | ------------------- | ------------ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| GetLatestConfiguration                 | Config reads        | Supported    | Common       | polls the current flags and values; served as an App Configuration SDK read of the store's keys and feature flags for the workload's label          |
| StartConfigurationSession              | Config reads        | Supported    | Common       | the application opens a flag / config read session; served by the Azure App Configuration SDK client instead of the AppConfig agent                 |
| CreateDeploymentStrategy               | Deployment controls | Out of scope | Full surface | the staged bake / growth / final-bake ramp has no App Configuration analog; the rollout schedule is a CI / pipeline responsibility                  |
| Deployment validators + alarm rollback | Deployment controls | Out of scope | Full surface | JSON-Schema / Lambda validators and CloudWatch-alarm automatic rollback have no counterpart; validation and revert move to CI / pipeline            |
| StartDeployment / StopDeployment       | Deployment controls | Out of scope | Full surface | no managed deployment object; the store's key-value revision history keeps the prior value recoverable, but the revert is a manual or pipeline step |
| Feature flag enabled state             | Feature flags       | Supported    | Common       | a flag's on/off state reads back through the native App Configuration feature-flag SDK                                                              |
| Feature flag typed value               | Feature flags       | Supported    | Most usage   | the value is kept on the native feature flag; App Configuration does not enforce the AWS.AppConfig.FeatureFlags attribute schema                    |
| CreateApplication / CreateEnvironment  | Provisioning        | Partial      | Most usage   | the environment dimension maps to App Configuration labels; the AppConfig application and configuration-profile hierarchy is not recreated          |
| CreateConfigurationProfile             | Provisioning        | Supported    | Most usage   | a feature-flag profile becomes native feature flags; a free-form profile becomes key-values                                                         |
| CreateHostedConfigurationVersion       | Provisioning        | Supported    | Most usage   | the configuration document is the source Terraform provisions the store's entries from                                                              |

#### How it works

Azure App Configuration replaces the AppConfig agent as the source of feature flags and dynamic configuration. Update application reads to use the Azure App Configuration SDK against the managed store in the customer's subscription.

Terraform provisions feature flags and key-values from the `AWS.AppConfig.FeatureFlags` document. AppConfig's staged rollout, deployment monitoring and automatic rollback are not recreated; implement those controls in the process that publishes configuration changes.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24gcmVhZHMgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQXBwQ29uZmlnIGFnZW50LCB3aGljaCBmZXRjaGVzIHRoZW0gZnJvbSBBV1MgQXBwQ29uZmlnLiBBZnRlcjogaW4gQXp1cmUgc3Vic2NyaXB0aW9uIHRoZSBzYW1lIGFwcGxpY2F0aW9uIHJlYWRzIHRoZSBzYW1lIGZsYWdzIHRocm91Z2ggdGhlIEF6dXJlIEFwcCBDb25maWd1cmF0aW9uIFNESyBmcm9tIGEgbmF0aXZlLCBNaWNyb3NvZnQtbWFuYWdlZCBBcHAgQ29uZmlndXJhdGlvbiBzdG9yZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImF6LWFoMSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ2IiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4MCIgd2lkdGg9IjEyOCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijk0IiB5PSIxMDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9Ijk0IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5BcHBDb25maWcgYWdlbnQ8L3RleHQ+CjxsaW5lIHgxPSIxNTgiIHkxPSIxMTMiIHgyPSIyMTQiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2F6LWFoMSkiLz4KPHRleHQgeD0iMTg2IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OHB4Ij5wb2xsIGZsYWdzPC90ZXh0Pgo8cmVjdCB4PSIyMTgiIHk9IjgwIiB3aWR0aD0iMTQ0IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjkwIiB5PSIxMDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTEuNXB4Ij5BV1MgQXBwQ29uZmlnPC90ZXh0Pgo8dGV4dCB4PSIyOTAiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNDE4IiB5MT0iNDAiIHgyPSI0MTgiIHkyPSIxNjAiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDYyIiB5PSI0NiIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwMDVhOWUiPk9OIFRIRSBUQVJHRVQgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjQ3NCIgeT0iODAiIHdpZHRoPSIxMDQiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MjYiIHk9IjEwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iNTI2IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzAwNzhENDsgZm9udC1zaXplOjEwcHgiPkFwcCBDb25maWcgU0RLPC90ZXh0Pgo8bGluZSB4MT0iNTc4IiB5MT0iMTEzIiB4Mj0iNjA0IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhei1haDEpIi8+CjxyZWN0IHg9IjYwOCIgeT0iNzYiIHdpZHRoPSIyMTYiIGhlaWdodD0iNzQiIHJ4PSIxMSIgZmlsbD0iI2VhZjRmYyIgc3Ryb2tlPSIjMDA3OEQ0IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI3MTYiIHk9IjEwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwMDVhOWU7IGZvbnQtc2l6ZToxMnB4Ij5BenVyZSBBcHAgQ29uZmlndXJhdGlvbjwvdGV4dD4KPHRleHQgeD0iNzE2IiB5PSIxMTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwMDVhOWUiPk1pY3Jvc29mdC1tYW5hZ2VkIHN0b3JlPC90ZXh0Pgo8dGV4dCB4PSI3MTYiIHk9IjEzMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzAwNWE5ZSI+bmF0aXZlIGZlYXR1cmUgZmxhZ3M8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS the application reads flags and configuration from the AppConfig agent, which fetches them from AWS AppConfig. After: in Azure subscription the same application reads the same flags through the Azure App Configuration SDK from a native, Microsoft-managed App Configuration store." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24gcmVhZHMgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQXBwQ29uZmlnIGFnZW50LCB3aGljaCBmZXRjaGVzIHRoZW0gZnJvbSBBV1MgQXBwQ29uZmlnLiBBZnRlcjogaW4gQXp1cmUgc3Vic2NyaXB0aW9uIHRoZSBzYW1lIGFwcGxpY2F0aW9uIHJlYWRzIHRoZSBzYW1lIGZsYWdzIHRocm91Z2ggdGhlIEF6dXJlIEFwcCBDb25maWd1cmF0aW9uIFNESyBmcm9tIGEgbmF0aXZlLCBNaWNyb3NvZnQtbWFuYWdlZCBBcHAgQ29uZmlndXJhdGlvbiBzdG9yZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImF6LWFoMSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ2IiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODAiIHdpZHRoPSIxMjgiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5NCIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5NCIgeT0iMTI2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+QXBwQ29uZmlnIGFnZW50PC90ZXh0Pgo8bGluZSB4MT0iMTU4IiB5MT0iMTEzIiB4Mj0iMjE0IiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhei1haDEpIi8+Cjx0ZXh0IHg9IjE4NiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjhweCI+cG9sbCBmbGFnczwvdGV4dD4KPHJlY3QgeD0iMjE4IiB5PSI4MCIgd2lkdGg9IjE0NCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI5MCIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+QVdTIEFwcENvbmZpZzwvdGV4dD4KPHRleHQgeD0iMjkwIiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5BV1MtbWFuYWdlZDwvdGV4dD4KPGxpbmUgeDE9IjQxOCIgeTE9IjQwIiB4Mj0iNDE4IiB5Mj0iMTYwIiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwYmRkZSI+T04gVEhFIFRBUkdFVCBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iNDc0IiB5PSI4MCIgd2lkdGg9IjEwNCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyNiIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjYiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBiY2RlOyBmb250LXNpemU6MTBweCI+QXBwIENvbmZpZyBTREs8L3RleHQ+CjxsaW5lIHgxPSI1NzgiIHkxPSIxMTMiIHgyPSI2MDQiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2F6LWFoMSkiLz4KPHJlY3QgeD0iNjA4IiB5PSI3NiIgd2lkdGg9IjIxNiIgaGVpZ2h0PSI3NCIgcng9IjExIiBmaWxsPSIjMWEyNzMxIiBzdHJva2U9IiMwMDc4RDQiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjcxNiIgeT0iMTAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwYmRkZTsgZm9udC1zaXplOjEycHgiPkF6dXJlIEFwcCBDb25maWd1cmF0aW9uPC90ZXh0Pgo8dGV4dCB4PSI3MTYiIHk9IjExOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwYmRkZSI+TWljcm9zb2Z0LW1hbmFnZWQgc3RvcmU8L3RleHQ+Cjx0ZXh0IHg9IjcxNiIgeT0iMTMzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBiZGRlIj5uYXRpdmUgZmVhdHVyZSBmbGFnczwvdGV4dD4KPC9zdmc+" alt="Before: on AWS the application reads flags and configuration from the AppConfig agent, which fetches them from AWS AppConfig. After: in Azure subscription the same application reads the same flags through the Azure App Configuration SDK from a native, Microsoft-managed App Configuration store." />
</div>

<p className="t9-caption">The application reads flag state and values through the Azure App Configuration SDK. Microsoft operates the configuration store.</p>

#### Architecture

The compiler emits an `azurerm_app_configuration` store in the target subscription, one `azurerm_app_configuration_feature` for each AppConfig feature flag, and one `azurerm_app_configuration_key` for each free-form configuration key. Terraform provisions all of them from the AppConfig configuration document at apply time. The store is a managed Azure service: Microsoft runs its storage, replication, and availability, and the flags and values live in the customer's own store.

The application connects directly to Azure App Configuration using its SDK and the workload's Azure identity. Terraform provisions configuration, so there is no Tensor9 adapter in the read path.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IGluIEF6dXJlIHN1YnNjcmlwdGlvbiB0aGUgYXBwbGljYXRpb24gcmVhZHMgZnJvbSBhIE1pY3Jvc29mdC1tYW5hZ2VkIEFwcCBDb25maWd1cmF0aW9uIHN0b3JlIHRocm91Z2ggdGhlIEFwcCBDb25maWd1cmF0aW9uIFNESy4gVGVycmFmb3JtIHByb3Zpc2lvbnMgdGhlIHN0b3JlLCBvbmUgbmF0aXZlIGZlYXR1cmUgZmxhZyBwZXIgQXBwQ29uZmlnIGZsYWcsIGFuZCBvbmUga2V5LXZhbHVlIHBlciBmcmVlLWZvcm0ga2V5LCBmcm9tIHRoZSBBcHBDb25maWcgY29uZmlndXJhdGlvbiBkb2N1bWVudC4gTm8gcnVudGltZSBjb21wb25lbnQgc2l0cyBpbiB0aGUgcmVhZCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0iYXotYXIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8bWFya2VyIGlkPSJhei1hcmIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzAwNzhENCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjM0IiB3aWR0aD0iODIwIiBoZWlnaHQ9IjE5NCIgcng9IjE2IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjU0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDA1YTllIj5DVVNUT01FUidTIEFaVVJFIFNVQlNDUklQVElPTjwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9Ijk4IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjkyIiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iODYiIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI4NiIgeT0iMTU4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QXBwIENvbmZpZyBTREs8L3RleHQ+Cjx0ZXh0IHg9Ijg2IiB5PSIxNzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzAwNzhENCI+ZmxhZyBzdGF0ZSBhbmQgdmFsdWVzPC90ZXh0Pgo8bGluZSB4MT0iMTQ2IiB5MT0iMTQ0IiB4Mj0iMTk2IiB5Mj0iMTQ0IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhei1hcikiLz4KPHRleHQgeD0iMTcxIiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OHB4Ij5TREs8L3RleHQ+CjxyZWN0IHg9IjIwMCIgeT0iODgiIHdpZHRoPSIzNjAiIGhlaWdodD0iMTIwIiByeD0iMTMiIGZpbGw9IiNlYWY0ZmMiIHN0cm9rZT0iIzAwNzhENCIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMzgwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDA1YTllOyBmb250LXNpemU6MTIuNXB4Ij5BenVyZSBBcHAgQ29uZmlndXJhdGlvbiBzdG9yZTwvdGV4dD4KPHRleHQgeD0iMzgwIiB5PSIxMjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwMDVhOWUiPk1pY3Jvc29mdC1tYW5hZ2VkIMK3IHNrdSBzdGFuZGFyZDwvdGV4dD4KPHJlY3QgeD0iMjE2IiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMjYiIHJ4PSI3IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNiY2RjZjUiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjI5NiIgeT0iMTU1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZm9udC1zaXplOjkuNXB4Ij5mZWF0dXJlIGZsYWcgwrcgY2hlY2tvdXRfdjI8L3RleHQ+CjxyZWN0IHg9IjIxNiIgeT0iMTcwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjI2IiByeD0iNyIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYmNkY2Y1IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIyOTYiIHk9IjE4NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZvbnQtc2l6ZTo5LjVweCI+ZmVhdHVyZSBmbGFnIMK3IHByaWNpbmdfdjM8L3RleHQ+CjxyZWN0IHg9IjM4NiIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjI2IiByeD0iNyIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYmNkY2Y1IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0NjYiIHk9IjE1NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZvbnQtc2l6ZTo5LjVweCI+a2V5LXZhbHVlIMK3IHRpbWVvdXRfbXM8L3RleHQ+CjxyZWN0IHg9IjM4NiIgeT0iMTcwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjI2IiByeD0iNyIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYmNkY2Y1IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0NjYiIHk9IjE4NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZvbnQtc2l6ZTo5LjVweCI+a2V5LXZhbHVlIMK3IHJlZ2lvbl9tYXA8L3RleHQ+CjxyZWN0IHg9IjYwMiIgeT0iOTgiIHdpZHRoPSIxOTYiIGhlaWdodD0iOTIiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3MDAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMS41cHgiPlRlcnJhZm9ybTwvdGV4dD4KPHRleHQgeD0iNzAwIiB5PSIxNDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5wcm92aXNpb25zIHRoZSBzdG9yZTwvdGV4dD4KPHRleHQgeD0iNzAwIiB5PSIxNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5hbmQgaXRzIGVudHJpZXMgZnJvbSB0aGU8L3RleHQ+Cjx0ZXh0IHg9IjcwMCIgeT0iMTc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QXBwQ29uZmlnIGRvY3VtZW50PC90ZXh0Pgo8bGluZSB4MT0iNjAyIiB5MT0iMTQ0IiB4Mj0iNTYyIiB5Mj0iMTQ0IiBzdHJva2U9IiMwMDc4RDQiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhei1hcmIpIi8+Cjwvc3ZnPg==" alt="Architecture: in Azure subscription the application reads from a Microsoft-managed App Configuration store through the App Configuration SDK. Terraform provisions the store, one native feature flag per AppConfig flag, and one key-value per free-form key, from the AppConfig configuration document. No runtime component sits in the read path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IGluIEF6dXJlIHN1YnNjcmlwdGlvbiB0aGUgYXBwbGljYXRpb24gcmVhZHMgZnJvbSBhIE1pY3Jvc29mdC1tYW5hZ2VkIEFwcCBDb25maWd1cmF0aW9uIHN0b3JlIHRocm91Z2ggdGhlIEFwcCBDb25maWd1cmF0aW9uIFNESy4gVGVycmFmb3JtIHByb3Zpc2lvbnMgdGhlIHN0b3JlLCBvbmUgbmF0aXZlIGZlYXR1cmUgZmxhZyBwZXIgQXBwQ29uZmlnIGZsYWcsIGFuZCBvbmUga2V5LXZhbHVlIHBlciBmcmVlLWZvcm0ga2V5LCBmcm9tIHRoZSBBcHBDb25maWcgY29uZmlndXJhdGlvbiBkb2N1bWVudC4gTm8gcnVudGltZSBjb21wb25lbnQgc2l0cyBpbiB0aGUgcmVhZCBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0iYXotYXIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8bWFya2VyIGlkPSJhei1hcmIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzAwNzhENCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjM0IiB3aWR0aD0iODIwIiBoZWlnaHQ9IjE5NCIgcng9IjE2IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjU0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwYmRkZSI+Q1VTVE9NRVInUyBBWlVSRSBTVUJTQ1JJUFRJT048L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSI5OCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI5MiIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijg2IiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iODYiIHk9IjE1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFwcCBDb25maWcgU0RLPC90ZXh0Pgo8dGV4dCB4PSI4NiIgeT0iMTc0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGJjZGUiPmZsYWcgc3RhdGUgYW5kIHZhbHVlczwvdGV4dD4KPGxpbmUgeDE9IjE0NiIgeTE9IjE0NCIgeDI9IjE5NiIgeTI9IjE0NCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYXotYXIpIi8+Cjx0ZXh0IHg9IjE3MSIgeT0iMTM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjhweCI+U0RLPC90ZXh0Pgo8cmVjdCB4PSIyMDAiIHk9Ijg4IiB3aWR0aD0iMzYwIiBoZWlnaHQ9IjEyMCIgcng9IjEzIiBmaWxsPSIjMWEyNzMxIiBzdHJva2U9IiMwMDc4RDQiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjM4MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwYmRkZTsgZm9udC1zaXplOjEyLjVweCI+QXp1cmUgQXBwIENvbmZpZ3VyYXRpb24gc3RvcmU8L3RleHQ+Cjx0ZXh0IHg9IjM4MCIgeT0iMTI1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBiZGRlIj5NaWNyb3NvZnQtbWFuYWdlZCDCtyBza3Ugc3RhbmRhcmQ8L3RleHQ+CjxyZWN0IHg9IjIxNiIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjI2IiByeD0iNyIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q1NDY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIyOTYiIHk9IjE1NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo5LjVweCI+ZmVhdHVyZSBmbGFnIMK3IGNoZWNrb3V0X3YyPC90ZXh0Pgo8cmVjdCB4PSIyMTYiIHk9IjE3MCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIyNiIgcng9IjciIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNTQ2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMjk2IiB5PSIxODciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6OS41cHgiPmZlYXR1cmUgZmxhZyDCtyBwcmljaW5nX3YzPC90ZXh0Pgo8cmVjdCB4PSIzODYiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIyNiIgcng9IjciIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNTQ2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDY2IiB5PSIxNTUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6OS41cHgiPmtleS12YWx1ZSDCtyB0aW1lb3V0X21zPC90ZXh0Pgo8cmVjdCB4PSIzODYiIHk9IjE3MCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIyNiIgcng9IjciIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNTQ2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDY2IiB5PSIxODciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6OS41cHgiPmtleS12YWx1ZSDCtyByZWdpb25fbWFwPC90ZXh0Pgo8cmVjdCB4PSI2MDIiIHk9Ijk4IiB3aWR0aD0iMTk2IiBoZWlnaHQ9IjkyIiByeD0iMTIiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzAwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTEuNXB4Ij5UZXJyYWZvcm08L3RleHQ+Cjx0ZXh0IHg9IjcwMCIgeT0iMTQ2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cHJvdmlzaW9ucyB0aGUgc3RvcmU8L3RleHQ+Cjx0ZXh0IHg9IjcwMCIgeT0iMTYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YW5kIGl0cyBlbnRyaWVzIGZyb20gdGhlPC90ZXh0Pgo8dGV4dCB4PSI3MDAiIHk9IjE3OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFwcENvbmZpZyBkb2N1bWVudDwvdGV4dD4KPGxpbmUgeDE9IjYwMiIgeTE9IjE0NCIgeDI9IjU2MiIgeTI9IjE0NCIgc3Ryb2tlPSIjMDA3OEQ0IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYXotYXJiKSIvPgo8L3N2Zz4=" alt="Architecture: in Azure subscription the application reads from a Microsoft-managed App Configuration store through the App Configuration SDK. Terraform provisions the store, one native feature flag per AppConfig flag, and one key-value per free-form key, from the AppConfig configuration document. No runtime component sits in the read path." />
</div>

<p className="t9-caption">Terraform provisions the App Configuration store, one native feature flag per AppConfig flag, and one key-value per free-form key; the application reads through the SDK, and no runtime component sits in the path.</p>

#### Creating flags and configuration keys

An `AWS.AppConfig.FeatureFlags` profile has a top-level `values` map, one entry per flag, each with an `enabled` boolean and optional typed attributes. Terraform walks that map and provisions one native App Configuration feature flag per entry: the flag's on/off state maps to the feature flag's enabled state, and its attributes supply the flag's value. A configuration profile that holds free-form JSON rather than feature flags is provisioned as key-values in the same store, one per top-level key.

Azure App Configuration stores translated values but does not apply AppConfig's declared attribute types and constraints. Validate new content before provisioning it so future edits remain compatible with the application.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBbiBBV1MuQXBwQ29uZmlnLkZlYXR1cmVGbGFncyBkb2N1bWVudCBoYXMgYSB2YWx1ZXMgbWFwLCBvbmUgZW50cnkgcGVyIGZsYWcgd2l0aCBhbiBlbmFibGVkIGJvb2xlYW4gYW5kIHR5cGVkIGF0dHJpYnV0ZXMuIEVhY2ggZW50cnkgYmVjb21lcyBhIG5hdGl2ZSBBcHAgQ29uZmlndXJhdGlvbiBmZWF0dXJlIGZsYWcgd2hvc2UgZW5hYmxlZCBzdGF0ZSBhbmQgdmFsdWUgYm90aCBzdXJ2aXZlOyBmcmVlLWZvcm0gSlNPTiBrZXlzIGJlY29tZSBrZXktdmFsdWVzLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJhei1hMyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDA3OEQ0Ii8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMzAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM2NDc0OGIiPkFQUENPTkZJRyBDT05GSUdVUkFUSU9OIERPQ1VNRU5UPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iNDIiIHdpZHRoPSIzMzAiIGhlaWdodD0iMTc2IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNDQiIHk9IjcwIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojMzM0MTU1Ij4mIzEyMzsgImZsYWdzIjogJiMxMjM7ICJjaGVja291dF92MiI6ICYjMTIzOyYjMTI1OyAmIzEyNTssPC90ZXh0Pgo8dGV4dCB4PSI0NCIgeT0iOTIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMzMzQxNTUiPiAgInZhbHVlcyI6ICYjMTIzOzwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjExNCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzAwNWE5ZSI+ICAgICJjaGVja291dF92MiI6ICYjMTIzOzwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjEzNCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzAwNWE5ZSI+ICAgICAgImVuYWJsZWQiOiB0cnVlLDwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjE1NCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6I2I0NTMwOSI+ICAgICAgInJvbGxvdXRfcGN0IjogMjU8L3RleHQ+Cjx0ZXh0IHg9IjYwIiB5PSIxNzQiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMwMDVhOWUiPiAgICAmIzEyNTsgJiMxMjU7ICYjMTI1OzwvdGV4dD4KPHRleHQgeD0iNDQiIHk9IjIwNCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6I2I0NTMwOSI+dHlwZWQgYXR0cmlidXRlcyBiZWNvbWUgdGhlIGZsYWcncyB2YWx1ZTwvdGV4dD4KPGxpbmUgeDE9IjM2NCIgeTE9IjEyOCIgeDI9IjQxNiIgeTI9IjEyOCIgc3Ryb2tlPSIjMDA3OEQ0IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYXotYTMpIi8+Cjx0ZXh0IHg9IjM5MCIgeT0iMTE5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDA1YTllOyBmb250LXdlaWdodDo3MDAiPnByb3Zpc2lvbjwvdGV4dD4KPHRleHQgeD0iNDI2IiB5PSIzMCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzAwNWE5ZSI+QVpVUkUgQVBQIENPTkZJR1VSQVRJT048L3RleHQ+CjxyZWN0IHg9IjQyNiIgeT0iNDIiIHdpZHRoPSIzODQiIGhlaWdodD0iMTc2IiByeD0iMTIiIGZpbGw9IiNlYWY0ZmMiIHN0cm9rZT0iIzAwNzhENCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHJlY3QgeD0iNDQ0IiB5PSI2MiIgd2lkdGg9IjM0OCIgaGVpZ2h0PSI0NCIgcng9IjkiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2JjZGNmNSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDYyIiB5PSI4MCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzMzNDE1NSI+ZmVhdHVyZSBmbGFnOiBjaGVja291dF92MjwvdGV4dD4KPHRleHQgeD0iNDYyIiB5PSI5OCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzAwNWE5ZSI+ZW5hYmxlZCA9IHRydWU8L3RleHQ+CjxyZWN0IHg9IjQ0NCIgeT0iMTE2IiB3aWR0aD0iMzQ4IiBoZWlnaHQ9IjQ0IiByeD0iOSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYmNkY2Y1IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0NjIiIHk9IjEzNCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzMzNDE1NSI+YXR0cmlidXRlOiByb2xsb3V0X3BjdDwvdGV4dD4KPHRleHQgeD0iNDYyIiB5PSIxNTIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMwMDVhOWUiPnZhbHVlID0gIjI1IjwvdGV4dD4KPHRleHQgeD0iNDQ0IiB5PSIxODgiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM0NzU1NjkiPm9uZSBuYXRpdmUgZmVhdHVyZSBmbGFnIHBlciBBcHBDb25maWcgZmxhZzsgZnJlZS1mb3JtIGtleXM8L3RleHQ+Cjx0ZXh0IHg9IjQ0NCIgeT0iMjA0IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojNDc1NTY5Ij5iZWNvbWUga2V5LXZhbHVlcyBpbiB0aGUgc2FtZSBzdG9yZTwvdGV4dD4KPC9zdmc+" alt="An AWS.AppConfig.FeatureFlags document has a values map, one entry per flag with an enabled boolean and typed attributes. Each entry becomes a native App Configuration feature flag whose enabled state and value both survive; free-form JSON keys become key-values." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBbiBBV1MuQXBwQ29uZmlnLkZlYXR1cmVGbGFncyBkb2N1bWVudCBoYXMgYSB2YWx1ZXMgbWFwLCBvbmUgZW50cnkgcGVyIGZsYWcgd2l0aCBhbiBlbmFibGVkIGJvb2xlYW4gYW5kIHR5cGVkIGF0dHJpYnV0ZXMuIEVhY2ggZW50cnkgYmVjb21lcyBhIG5hdGl2ZSBBcHAgQ29uZmlndXJhdGlvbiBmZWF0dXJlIGZsYWcgd2hvc2UgZW5hYmxlZCBzdGF0ZSBhbmQgdmFsdWUgYm90aCBzdXJ2aXZlOyBmcmVlLWZvcm0gSlNPTiBrZXlzIGJlY29tZSBrZXktdmFsdWVzLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJhei1hMyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDA3OEQ0Ii8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMzAiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjYzljZmQ4Ij5BUFBDT05GSUcgQ09ORklHVVJBVElPTiBET0NVTUVOVDwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjQyIiB3aWR0aD0iMzMwIiBoZWlnaHQ9IjE3NiIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjQ0IiB5PSI3MCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPiYjMTIzOyAiZmxhZ3MiOiAmIzEyMzsgImNoZWNrb3V0X3YyIjogJiMxMjM7JiMxMjU7ICYjMTI1Oyw8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSI5MiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPiAgInZhbHVlcyI6ICYjMTIzOzwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjExNCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5MGJkZGUiPiAgICAiY2hlY2tvdXRfdjIiOiAmIzEyMzs8L3RleHQ+Cjx0ZXh0IHg9IjYwIiB5PSIxMzQiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBiZGRlIj4gICAgICAiZW5hYmxlZCI6IHRydWUsPC90ZXh0Pgo8dGV4dCB4PSI2MCIgeT0iMTU0IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2RlYjI5MCI+ICAgICAgInJvbGxvdXRfcGN0IjogMjU8L3RleHQ+Cjx0ZXh0IHg9IjYwIiB5PSIxNzQiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBiZGRlIj4gICAgJiMxMjU7ICYjMTI1OyAmIzEyNTs8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIyMDQiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj50eXBlZCBhdHRyaWJ1dGVzIGJlY29tZSB0aGUgZmxhZydzIHZhbHVlPC90ZXh0Pgo8bGluZSB4MT0iMzY0IiB5MT0iMTI4IiB4Mj0iNDE2IiB5Mj0iMTI4IiBzdHJva2U9IiMwMDc4RDQiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhei1hMykiLz4KPHRleHQgeD0iMzkwIiB5PSIxMTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGJkZGU7IGZvbnQtd2VpZ2h0OjcwMCI+cHJvdmlzaW9uPC90ZXh0Pgo8dGV4dCB4PSI0MjYiIHk9IjMwIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwYmRkZSI+QVpVUkUgQVBQIENPTkZJR1VSQVRJT048L3RleHQ+CjxyZWN0IHg9IjQyNiIgeT0iNDIiIHdpZHRoPSIzODQiIGhlaWdodD0iMTc2IiByeD0iMTIiIGZpbGw9IiMxYTI3MzEiIHN0cm9rZT0iIzAwNzhENCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHJlY3QgeD0iNDQ0IiB5PSI2MiIgd2lkdGg9IjM0OCIgaGVpZ2h0PSI0NCIgcng9IjkiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNTQ2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDYyIiB5PSI4MCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPmZlYXR1cmUgZmxhZzogY2hlY2tvdXRfdjI8L3RleHQ+Cjx0ZXh0IHg9IjQ2MiIgeT0iOTgiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBiZGRlIj5lbmFibGVkID0gdHJ1ZTwvdGV4dD4KPHJlY3QgeD0iNDQ0IiB5PSIxMTYiIHdpZHRoPSIzNDgiIGhlaWdodD0iNDQiIHJ4PSI5IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDU0NjYiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjQ2MiIgeT0iMTM0IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2M5Y2ZkOCI+YXR0cmlidXRlOiByb2xsb3V0X3BjdDwvdGV4dD4KPHRleHQgeD0iNDYyIiB5PSIxNTIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBiZGRlIj52YWx1ZSA9ICIyNSI8L3RleHQ+Cjx0ZXh0IHg9IjQ0NCIgeT0iMTg4IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2M5Y2ZkOCI+b25lIG5hdGl2ZSBmZWF0dXJlIGZsYWcgcGVyIEFwcENvbmZpZyBmbGFnOyBmcmVlLWZvcm0ga2V5czwvdGV4dD4KPHRleHQgeD0iNDQ0IiB5PSIyMDQiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5iZWNvbWUga2V5LXZhbHVlcyBpbiB0aGUgc2FtZSBzdG9yZTwvdGV4dD4KPC9zdmc+" alt="An AWS.AppConfig.FeatureFlags document has a values map, one entry per flag with an enabled boolean and typed attributes. Each entry becomes a native App Configuration feature flag whose enabled state and value both survive; free-form JSON keys become key-values." />
</div>

<p className="t9-caption">Each AWS.AppConfig.FeatureFlags entry becomes a native App Configuration feature flag; it retains its enabled state and typed value, and free-form configuration becomes key-values.</p>

#### Reading feature flags and configuration

Feature flags use App Configuration's feature-flag key convention and content type. The Azure SDK and Feature Management libraries read their enabled state and any associated value. Free-form configuration uses regular key-values.

* **Enabled state.** The SDK reads the flag's boolean state, corresponding to the AppConfig enabled field.
* **Typed values are preserved.** AppConfig's typed attributes become the feature flag's value. The application reads the value; App Configuration does not enforce the attribute type or its constraints, so that discipline lives wherever the flag content is authored.
* **Free-form config shares the store.** A non-flag configuration profile is provisioned as key-values in the same store, so a workload that mixes feature flags with dynamic configuration reads both from one place through one SDK.
* **SSM configuration can use the same store.** SSM Parameter Store maps to Azure App Configuration key-values. AppConfig feature flags use feature-flag entries, allowing the SDK to distinguish them from ordinary configuration values.

#### Per-environment targeting

AppConfig scopes configuration by application and environment: the same flag can be on in one environment and off in another. App Configuration expresses the environment dimension with labels. A key or feature flag can hold a different value per label, and the SDK selects a label at read time, so one store serves several environments and the application reads the value for its own. The AppConfig environment maps onto the label the workload reads.

AppConfig profile versions and deployment history are not imported. The target stores current values by label and maintains its own key-value revision history. Keep the AppConfig source history in the system that provisions the store.

#### Reading at runtime

Replace reads from the AppConfig agent's loopback address with Azure App Configuration SDK reads for the workload's environment label. The SDK caches keys and flags and refreshes on an interval or change signal; reads against that cache do not require a network request per value.

The SDK authenticates with the workload's Azure identity, without a separate credential for this path. Microsoft operates store availability, replication and patching. Your team selects the store tier, access policy and client cache settings.

#### Replacing rollout and rollback controls

This target provisions current configuration but does not recreate AppConfig deployment strategies, monitored deployment objects or validators. Add the following controls to your release process where required.

* **Staged rollout.** An AppConfig deployment strategy ramps a new value to a growing fraction of the fleet over a bake window (a growth factor, a growth type, a final bake time). App Configuration serves the current value of a key or flag with no managed ramp. To stage a rollout, drive it from a percentage value the application reads, changed on a schedule by whatever provisions the store.
* **Monitored, rollback-capable deployment.** An AppConfig deployment is an object with a lifecycle that can be halted and rolled back. App Configuration has no deployment object; a rollback is republishing the prior value (its key-value revision history makes the prior value recoverable, but the revert is a manual or pipeline step, not an automatic one).
* **Automatic rollback on an alarm.** AppConfig reverts a deployment automatically when a bound CloudWatch alarm fires during the bake. App Configuration does not watch a metric. Reproduce this as a pipeline that watches the signal and republishes the prior value on a bad reading.
* **Pre-deploy validators.** AppConfig can block a new version on a JSON-Schema or Lambda validator before it ships. App Configuration enforces no validator on a value change. Run that validation in CI, on the flag content, before it is provisioned.

Run validation, staged updates and monitoring-driven reverts in the process that provisions the store. Include these controls in the migration plan alongside the SDK change.

#### Other considerations

* **Provision the final AppConfig state.** Terraform creates flags and key-values from the configuration document. If AppConfig changes during cutover, update the document before applying Terraform.
* **Operations and ownership.** App Configuration is a managed Azure service, so its storage, replication, and availability are Microsoft's to run; there is no self-hosted server and no Tensor9 runtime component to operate. What remains operational is the surrounding platform: the Azure subscription, the store's SKU and access policy, and the identity the workload reads with.

[Service Catalog](/service-adapters/catalog).
