当前位置: 首页 > 知识库问答 >
问题:

AWS SAM模板/cloudformation未为方法定义集成(服务:AmazonApiGateway

姜钊
2023-03-14

我试图部署lambda函数和API网关。我用AWS CLI创建了一个. net核心web API项目。仅部署该函数并在aws Web控制台上手动创建API网关和资源确实有效。

如果我在模板中包含API网关,在通过web控制台或CLI部署SAM包后,我会收到以下错误:

“未为方法定义集成(服务:AmazonApiGateway;状态代码:400;错误代码:BadRequestException;请求ID:…)

这里有什么不对劲的地方吗?

SAM包命令:

sam package  --template-file  sam-profile.yaml --output-template-file serverless-output.yaml  --s3-bucket testapp-fewtfvdy-lambda-deployments

SAM模板:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  ProfileFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: testapp.Profile.NetCoreVS::testapp.Profile.NetCoreVS.LambdaEntryPoint::FunctionHandlerAsync
      Runtime: dotnetcore2.0
      MemorySize : 128
      Timeout : 5
      CodeUri: bin/Release/netcoreapp2.0/publish
      Events:
        ProfileAny:
          Type: Api
          Properties:
            RestApiId: !Ref ProfileApiGateway
            Path: /profile/v1
            Method: GET

  ProfileApiGateway:
    DependsOn: ProfileFunction
    Type: 'AWS::Serverless::Api'
    Properties:
      StageName: Prod
      DefinitionUri: './swagger.yaml'

swagger.yaml:

---
swagger: '2.0'
info:
  version: v1
  title: ProfileAPI
paths:
  "/profile/v1":
    get:
      tags:
      - Values
      operationId: ProfileV1Get
      consumes: []
      produces:
      - text/plain
      - application/json
      - text/json
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            type: array
            items:
              type: string
definitions: {}
[Route("profile/v1")]
    public class ValuesController : Controller
    {
        // GET api/values
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2","value_new3" };
        }


    }

共有1个答案

唐烨煜
2023-03-14

你的昂首阔步的定义是缺少x-amazon-apigateway-集成

这将为您提供集成层:

---
swagger: '2.0'
info:
  version: v1
  title: ProfileAPI
paths:
  "/profile/v1":
    get:
      tags:
      - Values
      operationId: ProfileV1Get
      consumes: []
      produces:
      - text/plain
      - application/json
      - text/json
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            type: array
            items:
              type: string
      x-amazon-apigateway-integration:
        httpMethod: post
        type: aws_proxy
        uri:
          Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ProfileFunction.Arn}/invocations
definitions: {}

请注意,x-amazon-apigateway-集成的http方法总是POST,因为API网关总是向Lambda发出POST请求,而不管您的API路由使用的是什么方法。

 类似资料:
  • 我有以下的云形成模板片段。整个模板创建了ECS法门集群以及所有资源。但是现在,我面临着法门服务和任务定义的问题。 模板的服务部分如下所示: 服务: 任务定义如下: 任务定义: 我知道,fargate服务和任务定义在集群中是相互关联的。但问题是,如何使用模板建立这种关系。 我收到以下失败事件: 任务定义中不存在容器abc服务开发人员。(服务:AmazonECS;状态代码:400;错误代码:Inval

  • Azure新手,创建了一个非常基本的ARM模板。有人能告诉我为什么我经常收到以下错误:“部署模板验证失败:'模板中未定义资源'Microsoft.Network/virtualNetworks/vNet'。请参阅https://aka.ms/arm-template有关用法的详细信息。(代码:InvalidTemplate)” 我试图删除“依赖”条目,但没有成功。 谢谢 { }

  • 以下模板部署: https://gist.github.com/rnkhouse/aea0a8fd395da37b19466348b919d620 错误: “部署失败,状态代码为400,消息:部署模板验证失败:'模板中未定义资源'Microsoft.Network/virtualNetworks/mtes dev VNET'。请参阅。”https://aka.ms/arm-template有关用法

  • Good day我不确定发生了什么我怀疑eclipse,但在UserDetailsServiceImpl中它是定义的,因为我实现了spring的UserDetails服务,下面是我的代码 这是让人头痛的一行“UserDetails UserDetails=userDetailsService.loadUserByUsername(username)”提前感谢您

  • 我试图理解Spring MVC Restful架构。想知道有多少种方法可以将SpringMVC与RESTfulWeb服务集成在一起。我可以看到其中一个是使用Rest模板。 这是在Spring MVC中使用rest Web服务的唯一方法吗? 我们可以单独使用SpringMVC开发web应用程序而不使用任何web服务吗。 如果我说错了,请指正。 谢谢你的帮助。

  • 给定类 我试图定义一个自定义的代码生成模板,该模板将创建一个方法,其形式如下 我有以下速度模板,但输出不正确。 输出为 当我试图向字符串添加一个结束大括号(})时,模板-它无法呈现。