AppConfig is a service offering from AWS that helps you to efficiently create, manage and deploy your application configurations without altering your application code.
In a nut shell, AppConfig helps you to dynamically change values without redeploying your application. Thereby eliminating downtime or service disruptions.
AppConfig seamlessly integrates with applications running on EC2 instances, Lambda, Containers, Mobile apps and IOT devices.
Feature Flags: Feature flags are a concept in software development that allows you to enable or disable features in your application without modifying source code or redeploying your application. A feature of an application can be delivered to production in an inactive form by hiding it behind a feature flag. With AWS AppConfig, we can turn these features on at any specified time, making them available to either a selected group of users or to all users.
Application tuning: With AWS AppConfig, you can change the behavior of your application on the fly. You can for instance, save timeout settings in your configuration data and alter them when needed, without needing to change your source code or restarting the application. Similarly, a DevOps engineer can increase or reduce the verbosity of the application logs without needing to redeploy the application.
Whitelisting or Blacklisting: AppConfig enables you to expose certain features of your application to a select group of users, using a dynamic allow-list. You can conversely block a group of users from viewing your application by creating a deny-list. This is useful if you want some features of your application to only be available to paying customers.
AppConfig enables controlled deployment of configurations to applications, allowing you to swiftly and safely manage configurations. You can simply turn features on or off without having to redeploy or restart your application.
AppConig can protect you against costly configuration mistakes that can cause application downtime.With built-in validation checks, you can ensure your configurations are always syntactically valid and devoid of any errosr.
AppConfig gives you the ability to safely deploy changes using progressive rollouts and rollback alarmas. By integrating with CloudWatch alarms, AppConfig will monitor the application to see that deployment is successful. If errors are encountered and alarms go off, it will automatically rollback any configuration changes.
AppConfig enables auditablity by providing a change log where you can view your update history.
To effectively use AppConfig, there are three steps you need to go through.
Setup AppConfig: This step involves properly configuring the service to suit your needs. This can either be done via the AWS console, CLI or CDKs.
Integrate Application: This is where you integate your application with AppConfig. This can either be done through APIs or AWS Lambda AppConfig extension.
Deployment: This is where you deploy your configuration changes. It involves updating your values, choosing a deployment strategy and applying your deployment.
In order to be comfortable working with AppConfig, there are some basic terminologies that you must understand.
Environment: These are logical deployment groups that you can use to deploy your configuration. It is basically a collection of AWS resources - EC2 instances, ECS tasks, Lambda functions, etc. For example, you can have a dev environment and a prod environment. You can change the configurations for dev and prod separately.
Application: This is a logical unit of deployment.
Configuration Profile: This is where your configuration resides. A configuration profile is a collection of configurations for an application, associated with a specific environment. Configuration profiles can either be Freeform or Feature flags.
Deployment Strategies: These are a variety of methods or sets of rules specifying how to roll out configuration updates to an environment.
In summary, AWS AppConfig is a great service for building feature flags, performing operations tuning on your application and changing your application behavior without ever needing to alter source code, redeploy or restart the application.