-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CLI: Using the CDK programmatically #15851
Comments
Duplicate of aws/aws-cdk-rfcs#300 |
|
I have decided to reopen this issue due to continued frustration with this feature-gap, as seen here:
The frustration is significant enough for there to be published overly complex workarounds (ie. this, this, and this) I believe it is harder to get traction and gague community interest/need from the RFC alone (due to only appearing in a separate repo). |
Adding my voice here: For v1, I built a serverless application that provides templates that can populate a cdk.Stack. A lambda then uses As with some of the other requests linked above, I found there's a bit of a gap between the obvious "call Since CloudFormation can take quite a long time, it would be great if this can continue to support generating change-sets, specifying the notification arns and passing a client request token - as these three options combine to make it fairly easy to build a solution that runs asynchronously. |
This issue has received a significant amount of attention so we are automatically upgrading its priority. A member of the community will see the re-prioritization and provide an update on the issue. |
Thanks all for the feedback so far. We have now released a first iteration of this: @aws-cdk/cli-lib-alpha Please let me know what you're thinking and keep posting feature ideas. We are well aware this isn't a complete and ready solution yet (hence the experimental state), but it's an important stepping stone to gather interest and feedback. |
Related: #679 |
Hi @mrgrain, I built our own wrapper to use CDK v1 programmatically and it keeps working after 2 years. Since the "cli-lib-alpha" module is available, I built something similar w/ CDK v2 and the new lib. |
@mrgrain Ehm, the thumbs-up reaction is not so helpful 😅 Do you plan to add the bootstrap command to the library? Otherwise I'll try to patch the cli-lib-alpha module or roll back to CDK V1. |
Since the related discussion #19719 has been marked as resolved, any news on this? |
It was very late where I am. I'll look into it. cli-lib-alpha is very much open to change. PRs are also welcome 😀 |
Yes, looks great! Thank you so much! Please do let me know about any other use cases that this lib doesn't currently cover. |
@mrgrain Sure, I'll let you know if everything will work as expected :) |
The first iteration of [@aws-cdk/cli-lib-alpha](https://docs.aws.amazon.com/cdk/api/v2/docs/cli-lib-alpha-readme.html) doesn't support the bootstrap command that is mandatory to deploy a new app via CDK. This PR introduces the bootstrap command for the CLI. Related: #15851 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
Fixed and merged. Both should be released this week. I'll look into setting up proper integration tests for this. 'Cause this would have been an easy catch. |
I'm able to use CDK programmatically, but I had to build a utility that uses the AWS SDK to fetch the stack outputs once the deployment is completed (I have to deploy multiple stacks and crossRegionReferences is not an option). I think the next step is having both |
Yes, I agree. Appreciate the feedback! My current plan is:
|
Hi, I'm trying to migrate one of our lambdas that deploys a stack using
Has anybody faced it, any one has a clue on how to fix it? (I'm using v2.91.0) It seems that [UPDATE]
|
Thanks @amine-mf for the investigation. Glad you got to the bottom of this. |
We have (currently internal, but I'm hoping to open-source) https://github.com/time-loop/cdk-log-parser library. This exists specifically to parse the output of |
Hi all, this @aws-cdk/cli-lib-alpha looks really promising :), any hints or info on when this will be a bit more mature (beta, first release)? |
I would like to add my voice here. More than just programmatically calling the cdk commands, I would love to be able to just expose the CDKToolKit class and CloudAssembly classes. They have a lot of good functions that would allow for writing of helper methods and by having a package for that, I could write libraries that are not vulnerable to growing out of date due to copy-paste |
The CDK makes it really easy to deploy infrastructure as code, but using the CDK itself is limited to the command line. We should have easy access to
boostrap
,diff
,deploy
, anddestroy
functionality within code.Use Case
I'm developing a multi-tenant app with custom domains, which hits a lot of AWS quota limits, so I have to spread my user accounts across an arbitrary number of sub-accounts.
When a user signs up, I have to assign them to an account with space and deploy a customized stack with their config details. I have to retrigger deploys when those details change. I also need to update all of these stacks across all of the subaccounts when I make infrastructure updates.
Similarly, I have to monitor account usage. When a threshold is met, I have to create a new account and deploy a shared infrastructure stack for when the new users start getting assigned to it. As above, I occasionally have to update all of them at once.
It seems the best solution is to use CDK from lambdas which are either triggered on change or scheduled, depending on use case. But I find myself having to navigate around calls to the CDK, where what I really want to do is weave my
new App()
construction with calls likecdk.deploy(stack)
or some such.If the point of the CDK is to make Infrastructure-as-Code easy, then shouldn't the CDK commands be as easy to program as the infrastructure itself?
Proposed Solution
I think the ideal solution would be simply make the full functionality of the CLI command available programmatically. I hesitate to suggest specifics beyond the idea that the real ideal would be to pass your stacks as arguments directly, as well being able to entirely configure the command in code, rather than environment vars and settings files.
I've dug a little into the codebase, and it looks like the commands are in a strange in-between space. It's almost possible to call a few of them, but only with a lot of manual wiring (if at all). If I'm mistaken, and there's already an easy way to do this, I'd love to hear it. I've yet to find a good solution googling.
Thanks!
This is a 🚀 Feature Request
The text was updated successfully, but these errors were encountered: