没有为方法定义集成 - 选择部署 API 的阶段

问题描述 投票:0回答:8

我正在使用 AWS API Gateway 和 AWS Lambda。当我尝试部署 API 时,我经常会遇到此类错误消息。错误消息显示选择部署阶段。但我仍在选择并尝试部署!但出现同样的错误!

在此 API 中,我有多种资源和多种方法。之前我用同样的方式成功部署了同样的API。但现在我无法部署它。

请任何人帮我解决它。另外:我不使用 AWS CLI 工具,仅使用 AWS Web 仪表板。

amazon-web-services aws-lambda aws-api-gateway
8个回答
94
投票

我与AWS的客户服务中心进行了交谈。问题是:

在这个API中有一个未集成的方法。假设有一个资源

image
并且我为该资源创建了一个
POST
方法。但我忘记将它集成到任何 AWS Lambda 函数或 HTTP 中。所以API无法部署。

如果该方法不需要,则删除该方法。或者您可以将其集成为

Mock
端点。您可以随时更改此端点。

注意: 对于此未集成问题,AWS 给出了此类错误的错误消息。他们应该更新消息以节省开发人员的时间。


15
投票

我在使用 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
错误。


2
投票

如果您还有其他未完成配置的资源,它也会读取。简而言之,如果您没有给他们 lambda 函数,则在您完成其余部分之前,不允许部署 api 本身。


2
投票

我在通过 Terraform 部署时遇到了同样的错误。原因是我为 API 定义了 IAM 角色,但在部署 API 时没有将角色资源包含到

triggers
中。只需确保部署前定义的所有资源都包含在
triggers
中即可。


0
投票

只需将 Lambda 函数集成到您创建的每个方法中即可。


0
投票

确保每个资源和方法都配置正确。 假设您的 api 网关的层次结构如下:

/
   R1
    R2 
     M1 
     M2
    R3
     M3

因此每个资源(R1,R2,R3)和每个方法(M1,M2,M3)都应该正确配置。


0
投票

我使用带有 --no-rollback 的 CDK 进行部署(但这应该适用于任何云信息)

在我的例子中,API 已创建,我可以在 AWS 控制台中检查它,只有“AWS::ApiGateway::Deployment”创建失败。事实证明我的

service
属性值不好(我使用的是 StepFunctions,它不起作用)

然后我发现我有一个悬空资源/方法已损坏 - 所以我的部署失败是由于 AWS 中的垃圾,而不是我的 CDK/模板。


0
投票

就我而言,我将 CDK 堆栈部署到开发环境,但我对 AWS 控制台上的 API 网关进行了一些更改,添加了一些仅用于测试目的的资源和方法

这与我的 CDK 部署冲突,导致 API 网关错误:

一旦我删除了在控制台上创建的资源并再次部署它们,它就完美运行了

© www.soinside.com 2019 - 2024. All rights reserved.