如何在AWS codepipeline中自动部署api网关

时间:2017-06-23 21:53:05

标签: amazon-web-services aws-api-gateway amazon-cloudformation aws-codepipeline aws-codebuild

目前我可以通过推送到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网关?

2 个答案:

答案 0 :(得分:1)

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

创建一个codepipeline,将其链接到src&一个codebuild项目,设置了一些权限,完成了。

// serverless.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有点麻烦,但我可以描述一下这些步骤。首先使用源,构建和部署步骤创建一个codepipeline项目。

  • 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(或任何您想要调用的工具)

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

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

完成这些步骤后,您可以添加另一个步骤作为云形成部署步骤。将它连接到刚刚部署的lambda函数。

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

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

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

// 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

答案 1 :(得分:0)

self.presentingViewController?.dismiss(animated: true, completion: nil)

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

您可以在所有地方找到Swagger文档,API Gateway扩展的文档也在开发人员指南中。我首先进入API网关控制台,然后查看Lambda为您创建的API。您可以前往'阶段'页面和任何阶段,您可以将API导出为Swagger。