首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AWS代码行中自动部署api网关

如何在AWS代码行中自动部署api网关
EN

Stack Overflow用户
提问于 2017-06-24 05:53:05
回答 2查看 2.3K关注 0票数 0

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

代码语言:javascript
复制
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网关?

EN

回答 2

Stack Overflow用户

发布于 2017-06-28 06:34:23

毫无疑问,在代码管道中实现这一点的最好方法是使用https://serverless.com/框架。这取代了我以前使用的每一个超级复杂的黑客工作和变通方法。简单得多的IMO。

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

//serverless.yml .yml

代码语言:javascript
复制
service: my-api
provider:
  name: aws
  runtime: python2.7

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

//buildspec.yml

代码语言:javascript
复制
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 spec并放入cloudformation模板中。

代码语言:javascript
复制
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应该输出一个压缩文件并使用buildspec.yml,如下所示...

//buildspec.yml

代码语言:javascript
复制
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更新它。

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

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

  • 阶段1: src
  • 阶段2:构建
  • 阶段3:部署lambda测试,部署网关api云形成测试
  • 阶段4:验证测试

<代码>H121阶段5:部署λ产品,部署网关api云形成产品<代码>H222<代码>F223

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

//cloudformation.yml

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2017-06-24 06:48:47

AWS::Serverless::Api

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

你可以在所有地方找到Swagger文档,关于API网关扩展的文档在开发人员指南中。首先,我将进入API Gateway控制台,查看Lambda为您创建的API。您可以转到“Stages”页面,对于任何stage,您都可以将API导出为Swagger。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44730419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档