0

目前,我可以通过推送到github来部署lambda。我还可以自动部署拉姆达但只是因为API网关是在lambda YAML文件如何在AWS代码管道中自动部署api网关

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 

事件如何使用招摇文件我部署一个API网关?

回答

1

传递代码管道中执行此操作的最佳方法是使用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 

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

你可以做到这一点代码管道内的云信息。从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
  • 构建应输出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函数,并使用它博托更新。

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

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

  • 阶段1:SRC
  • 阶段2:构建
  • 阶段3:部署拉姆达测试,部署网关API cloudformation测试
  • 阶段4:验证测试
  • 阶段5:部署拉姆达PROD,部署网关api云信息产品

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

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

亲爱的布鲁斯。谢谢。我放弃了那一刻。我耗尽了时间。我发现亚马逊解决方案非常复杂,无法启动和运行。我不明白为什么亚马逊不提供即插即用解决方案:-) –

+0

我确实经历了并验证了这些工作,但这是一个相当复杂的解决方案。真正的问题是在云中使用Type:'AWS :: Serverless :: Function'类型,它们需要外部s3 uri。如果您能够在模板中指定本地输入工件,那么在代码管道中将非常简单直观。 –

+0

再次感谢。只要提及......我的同事在几个小时内就开始在Azure上进行持续部署。 –