0

目前我可以通过推送到 github 来部署 lambda。我还自动部署了一个 lambda,但这只是因为 api 网关是 lambda yaml 文件中的一个事件

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: Identifies paragraphs in documents and links to the law
Resources:
  LambdaParagraphLinker:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: LambdaParagraphLinker.lambda_handler
      Runtime: python3.6
      CodeUri: ./
      Description: Identifies paragraphs in documents and links to the 
      law
       MemorySize: 512
      Timeout: 10      
      Events:
        Api:
          Type: Api
          Properties:
            Path: /LambdaParagraphLinker
            Method: ANY

如何使用 swagger 文件部署 api 网关?

4

2 回答 2

2

在 codepipeline 中执行此操作的最佳方法是使用https://serverless.com/框架。这取代了我以前使用的每一个超级复杂的黑客工作和解决方法。方式不那么复杂的IMO。

创建一个代码管道,将其链接到 src 和一个 codebuild 项目,设置一些权限,完成。

//无服务器.yml

service: my-api
provider:
  name: aws
  runtime: python2.7

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: api/v1/message
          method: post

//buildspec.yml

version: 0.2
phases:
  install:
    commands:
      #BUILD
      - sudo apt-get update -y
  build:
    commands:
      - echo $environment
      - serverless package --stage $environment --region us-east-1
      - serverless deploy --stage $environment --region us-east-1

或者通过执行以下选项之一来折磨自己...

您可以在代码管道中的 cloudformation 中执行此操作。从 gatewayapi 控制台中导出 swagger 规范并放置在 cloudformation 模板中。

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  PlayersAPI:
    Type: AWS::ApiGateway::RestApi
    Properties:
      Name: MyApi
      Description: API Description
      Body:
       "SWAGGER HERE"

将它连接到 lambda 有点麻烦,但我可以描述这些步骤。首先创建一个包含源代码、构建和部署步骤的代码管道项目。

  • src 应该是来自 github 或 codecommit 的标准
  • build 应该输出一个 zip 文件并使用 buildspec.yml 像这样的东西......

//buildspec.yml

version: 0.1
phases:
  install:
    commands:
      #BUILD
      - zip -r lambda.zip . -x *.git*
artifacts:
  files:
    - '**/*.zip'
    - '**/*.yml'
  discard-paths: no

让构建步骤导出一个工件 MyAppBuild (或任何您想调用的名称)

最后的管道步骤是通过控制台将 lambda 函数创建为独立函数(可重复使用): https ://github.com/tkntobfrk/codepipeline-lambda-s3

此 lambda 函数下载管道工件/压缩 lambda 函数并使用 boto 更新它。

在这些步骤之后,您可以添加另一个步骤作为 cloudformation 部署步骤。将其连接到您刚刚部署的 lambda 函数。

如果您正在处理多个环境,您可以为每个环境创建 lambda 函数和 gatewayapi cloudformation 模板,然后按顺序运行它们。

  • 第 1 阶段:src
  • 第 2 阶段:构建
  • 第三阶段:部署lambda测试,部署网关api cloudformation测试
  • 第 4 阶段:验证测试
  • 第 5 阶段:部署 lambda 产品,部署网关 api cloudformation 产品

像这样使用直接的 AWS 无服务器也可以。但是,您需要为 uri 使用标准工件位置。该 API 的 DefinitionUri: 可以是从 gatewayapi 控制台导出的 swagger。

//cloudformation.yml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  MySimpleFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: app.lambda_handler
      Runtime: python2.7
      CodeUri: s3://somebucket/somezip.zip
  MyAPI:
     Type: AWS::Serverless::Api
     Properties:
        StageName: prod
        DefinitionUri: s3://somebucket/somezip.zip
于 2017-06-27T22:34:23.323 回答
0

AWS::Serverless::Api

https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi

您可以在各处找到 Swagger 文档,API Gateway 扩展的文档在开发人员指南中。我将首先进入 API Gateway 控制台并查看 Lambda 为您创建的 API。您可以转到“阶段”页面,对于任何阶段,您都可以将 API 导出为 Swagger。

于 2017-06-23T22:48:47.257 回答