传递代码管道中执行此操作的最佳方法是使用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
亲爱的布鲁斯。谢谢。我放弃了那一刻。我耗尽了时间。我发现亚马逊解决方案非常复杂,无法启动和运行。我不明白为什么亚马逊不提供即插即用解决方案:-) –
我确实经历了并验证了这些工作,但这是一个相当复杂的解决方案。真正的问题是在云中使用Type:'AWS :: Serverless :: Function'类型,它们需要外部s3 uri。如果您能够在模板中指定本地输入工件,那么在代码管道中将非常简单直观。 –
再次感谢。只要提及......我的同事在几个小时内就开始在Azure上进行持续部署。 –