aws-cdk icon indicating copy to clipboard operation
aws-cdk copied to clipboard

AppConfig: Get latest deployed configuration

Open 0xBradock opened this issue 1 year ago • 2 comments

Describe the feature

Add a command to AppConfig to retrieve a deployed configuration during CDK synthesize step.

Use Case

I have a CDK application that deploys stacks like this:

const clients = [/*...*/]

clients.forEach( client => new ClientShop(app, `${client.name}-shop`, { client } ) )

Problem

For now clients is an array stored in code. The clients information is managed by another team. So, every time they want to modify it, they need to open a ticket.

Goal

I want to give them the ability to edit themselves the information of client using an AWS resource. This will allow me to change the CDK application to this:

//                              👇
const clients = new GetClientsFromConfig(app, 'config')

clients.forEach( client => new ClientShop(app, `${client.name}-shop`, { client } ) )

This would separate the logic from data with a good user experience.

Proposed Solution

One option would be to implement it similar to the static method SSM fromStringParameterAttributes.

Other Information

Options I considered to deploy the clients and read from GetClientsFromConfig:

  • AppConfig: It has the best user experience and allows to validate the configuration. But, I can't find a way to read a deployed configuration in a Stack in my CDK app const config = deployment.readFromLastVersion(/*...*/) (do not exist)
  • DynamoDB: Less intuitive and still can't find method to read from within CDK
  • SSM Parameter Store: Can read from CDK, but is not so intuitive and error prone to the other team to manage its content
  • S3: Easy to setup, hard for users to configure

I am still open to other solutions, if they exist. But, as far as I gather AppConfig would be the best alternative.

Acknowledgements

  • [X] I may be able to implement this feature request
  • [ ] This feature might incur a breaking change

CDK version used

2.128.0

Environment details (OS name and version, etc.)

MacOS Apple M1 Pro

0xBradock avatar Feb 19 '24 15:02 0xBradock

I want to give them the ability to edit themselves the information of client using an AWS resource.

Where would you like the information to be stored in AWS resource? Parameter store? Traditionally such information should be stored in the git repository as plain text configs or objects in S3 buckets and you can fetch them in your CDK code and pass to your constructs so we don't have to hack that in the L2 constructs. But this deserves more discussion here with the community.

pahud avatar Feb 19 '24 20:02 pahud

Yes, using S3 would be easy. But, what I need is to provide an easy interface with validation to non-technical colleagues to configure a CDK application with free-form or feature flags. AppConfig provides exactly that, but for running applications. I need that same functionality during CDK synthesize step.

0xBradock avatar Feb 20 '24 20:02 0xBradock