我正在使用 AWS API Gateway 和 AWS Lambda。当我尝试部署 API 时,我经常会遇到此类错误消息。错误消息显示选择部署阶段。但我仍在选择并尝试部署!但出现同样的错误!
在此 API 中,我有多种资源和多种方法。之前我用同样的方式成功部署了同样的API。但现在我无法部署它。
请任何人帮我解决它。另外:我不使用 AWS CLI 工具,仅使用 AWS Web 仪表板。
我与AWS的客户服务中心进行了交谈。问题是:
在这个API中有一个未集成的方法。假设有一个资源
image
并且我为该资源创建了一个 POST
方法。但我忘记将它集成到任何 AWS Lambda 函数或 HTTP 中。所以API无法部署。
如果该方法不需要,则删除该方法。或者您可以将其集成为
Mock
端点。您可以随时更改此端点。
注意: 对于此未集成问题,AWS 给出了此类错误的错误消息。他们应该更新消息以节省开发人员的时间。
我在使用 CloudFormation 创建 API 时遇到了同样的错误。
事实证明,在我的
AWS::ApiGateway::Deployment
资源中,我需要包含“依赖于”我所有 API 方法的 DependsOn
属性。
例如,当使用两个
AWS::ApiGateway::Method
资源构建 API 时,AWS::ApiGateway::Deployment
需要依赖这两种方法:
MyFirstApiMethod:
Type: AWS::ApiGateway::Method
Properties:
<your properties>
MySecondApiMethod:
Type: AWS::ApiGateway::Method
Properties:
<your properties>
MyDeployment:
Type: AWS::ApiGateway::Deployment
DependsOn: [MyFirstApiMethod, MySecondApiMethod] # <-- REQUIRED
Properties:
RestApiId: !Ref MyRestApi
如果所有 API 方法上没有
DependOn
属性,CloudFormation 可能会
在部署资源之后创建它们,导致 No integration defined for method
错误。
如果您还有其他未完成配置的资源,它也会读取。简而言之,如果您没有给他们 lambda 函数,则在您完成其余部分之前,不允许部署 api 本身。
我在通过 Terraform 部署时遇到了同样的错误。原因是我为 API 定义了 IAM 角色,但在部署 API 时没有将角色资源包含到
triggers
中。只需确保部署前定义的所有资源都包含在 triggers
中即可。
只需将 Lambda 函数集成到您创建的每个方法中即可。
我使用带有 --no-rollback 的 CDK 进行部署(但这应该适用于任何云信息)
在我的例子中,API 已创建,我可以在 AWS 控制台中检查它,只有“AWS::ApiGateway::Deployment”创建失败。事实证明我的
service
属性值不好(我使用的是 StepFunctions,它不起作用)
然后我发现我有一个悬空资源/方法已损坏 - 所以我的部署失败是由于 AWS 中的垃圾,而不是我的 CDK/模板。