-
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
API Gateway: Too Many Requests on API creation #15573
Comments
As far as I'm aware, the CDK does not invoke the API Gateway endpoint as part of its standard operation. Please update the issue with details following this guidelines - http://sscce.org/ |
@nija-at I'm pretty sure what @tuanardouin is reporting is not that CDK invokes the API Gateway endpoint directly but that when the CloudFormation template is deployed, the service-to-service communication between CloudFormation and API Gateway gets rate-limited and the CloudFormation deploy fails (and reflects that rate-limit error). It's unclear to the user that this is the source of the error they see. If I'm correct about the source of this error (and it's not possible for the user to get any more information), this is actually an upstream bug in CloudFormation (since CDK can't control the behavior of CloudFormation), and I imagine it would be SUPER-HELPFUL if the CDK team could bubble this bug up to the CloudFormation team. It's not the first time they've heard about this long-standing bug https://forums.aws.amazon.com/thread.jspa?threadID=100414, and they don't appear to have taken any steps to solve it. |
This will depend on the number of stacks being deployed in parallel for that account/region, number of API Gateway resources in each stack, custom resources that may be making calls directly to API gateway, etc. If you have a specific CDK stack or CloudFormation resource that replicates this error consistently, I'll be happy to forward it to the relevant teams. Otherwise, I would recommend contacting the AWS APIGateway team via AWS support for this issue. |
@nija-at Oh, we definitely have example stacks where this happens consistently. We are a pretty small team, so there's usually max 1 stack being deployed at any time, and we don't have any custom resources on the stacks where this happens -- as you suggest, it is all about the number of API Gateway resources. But like I said, when we use CloudFormation to work with these resources, we have no ability to adapt to API Gateway rate limits for resources that CloudFormation is managing.
This would be really helpful. I would be happy to work with the team (I think it would be CloudFormation) to help isolate this issue. Please let me know what you need from me. You can reach me by email at my GH username at gmail. |
As mentioned, provide the simplest full CDK app that consistently replicates this issue. |
@danmactough have you provided the requested information? Ping me if you'd like to reopen this issue. |
|
Hello @peterwoodworth @nija-at I've created this: repository, that consistently replicates the issue, please feel free to check it out. The code creates a REST API with a large number of endpoints and methods, all created in multiple nested stacks. I could temporarily avoid this problem by decreasing the number of resources in each nested stack and making them depend on each other during deployment so they don't get deployed in parallel, but it's much slower and inefficient. |
Like someone already said, the problem is the rate limit of the API Gateway's own APIs. The CreateResource is limited to 5 per second per account. We're facing the same problem with the Serveless Framework. Nobody solved it properly. AWS premium support suggests introducing DependsOn, but it's not a definitive solution for sure. The 2nd link below shows AWS published a private resource type Community::CloudFormation::Delay, which also doesn't feel like a definitive solution alone. We thought of using WaitCondition, but it's about the same. This issue is related to: |
I encounter this problem only for the first deployment of a Stack, after that, it's not an issue anymore, unless I end up deploying a huge change. So, the dependsOn ended up solving the issue for me. It's not a perfect solution nor does it excuse the origin of the problem, but at least it's not slowing down our deployments. |
This type of issue will likely have to be fixed by either CloudFormation or ApiGateway to handle. I'm not a fan of any solutions like the potential new Delay construct to be used as a permanent solution, which is probably going to lie on ApiGateway to handle this correctly. I would recommend opening an issue in the CloudFormation coverage roadmap repo so that they are aware of this specific issue, or opening an issue with premium support if you have it |
@peterwoodworth they're aware. My previous comment contains a link to the CloudFormation roadmap issue (see here). And the Premium Support has an article How do I prevent "Rate exceeded" errors in CloudFormation? in their Knowledge Center. |
Hi @peterwoodworth any specific Idea on how to resolve this problem temporary ? |
@oanhhuynhpositive A coworker wrote this plugin for Serverless v2/v3 that uses a simple graph algorithm to solve the dependency tree. Does not generate the most performant tree, but works fine. Here is is if you want to give it a try: https://github.com/AlexsandroBezerra/serverless-custom-depends-on |
@jweyrich Thanks, actually i'm looking for a solution when I use cdk to deploy stack resources. |
@oanhhuynhpositive oh, my bad. I mixed both repos (cdk and serverless) as we've been dealing with the same issue. |
@nija-at A CDK stack that reliably reproduces this issue was provided here. Is there any update on when this will be fixed in CloudFormation? If the CloudFormation deployment code were open-source, I would put in a PR myself to retry (with exponential backoff) on a 429 error. Conceptually, it seems quite straightforward. I am not sure why AWS is not really responding to this issue, as many people are facing it daily. |
@chessbyte unfortunately I no longer work for AWS so I'm unable to answer any of your questions. |
@nija-at wishing you well! |
We're not the CloudFormation team, so we cannot answer these questions. There's no action CDK can take here with our construct library - While this bug persists, it will be up to customers to configure dependencies between the resources they create to ensure they deploy sequentially rather than in parallel. See this comment for an example I've created a ticket internally to make sure the right team sees this. I'll provide updates when they become available P88246032 |
It has been more than a year - has there been any movement on this? |
@bouwerp No change and still a problem on CDK 2. Our legacy code still has this issue, but we don't deploy new CloudFormation often, so we just swept that under the rug. We started using Terraform partly because of that and didn't encounter this problem. |
Thanks for the info @tuanardouin. I have been looking for a reason to move to terraform. |
Same issue here -- but suddenly started working after about half an hour and moving to a separate api gateway instance.... |
same issue, using latest CDK 2 version |
@danielMiron are you encountering this on new deployments or for already available APIs ? |
new deployments |
@danielMiron A quick hack is to comment half your endpoints and then deploy your stack. Once it's done, you can uncomment the rest and deploy again. |
@tuanardouin This is what we ended up doing to deploy locally, but it doesn't help us much with CI |
Hello,
When creating an API that contains a lot of endpoints, we reach the API Gateway limit on resource creation and get the error
The limits :
https://docs.amazonaws.cn/en_us/batch/latest/userguide/service_limits.html
Reproduction Steps
Create a REST API with a lot of resources.
What did you expect to happen?
I expected that CDK will consider this and have a 'sleep' between calls if necessary.
Right now I'm just commenting some of the nested stack that contains my ressources and unccoment them in batch.
Linked to this I think :
aws-cloudformation/cloudformation-coverage-roadmap#589
What actually happened?
Got the 429 error
Environment
This is 🐛 Bug Report
The text was updated successfully, but these errors were encountered: