无服务器应用的持续交付实现

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 无服务器应用的持续交付实现 AWS解决方案架构师 陈洪正 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
2. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
3. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
4. 无服务器应用的持续交付 实现 AWS解决方案架构师 陈洪正 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
5. 主要议题 为何要讨论这个问题? 部署应用 构建与测试 创建你的管道 DEMO 一些总结 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
6. 为何要讨论这 个问题? © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. https://secure.flickr.com/photos/mgifford/4525333972
7. 无服务器应用 事件源(Event Source) 数据状态 改变 节点请求 资源状态改 变 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 函数(Function) Node Python Java C# Golang 服务(任何目标)
8. 可以触发Lambda的事件源 数据存储 Amazon S3 Amazon DynamoDB Amazon Kinesis 访问节点 Amazon API Gateway Amazon Cognito 开发和管理工具 AWS CloudFormation AWS CloudTrail AWS CodeCommit AWS Step Functions Amazon Alexa 事件/消息服务 Amazon SES Amazon CloudWatch …还有更多! © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS IoT Amazon SNS Cron events
9. 无服务器应用开发 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
10. 构建一个无服务器的部署包 Node.js & Python • 打包正包含代码和所 有依赖的zip包 • 使用npm/pip来安装依 赖库 • 所有依赖包需要在zip 包的根目录内 Java C# (.NET Core) Go • • • Zip包需要包含Go的二 进制文件和所有依赖 • 使用go get来安装依赖 将所有源码和依赖打 包为一个zip包,或 者一个单独的jar包 • • 使用Maven/Eclipse IDE插件 • • 将编译好的类核资源 文件部署在根目录下, 需要的jar包部署在 /lib目录下 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 将所有源码和依赖打 包为一个zip包,或 者一个单独的dll文件 使用 NuGet/VisualStudio的 插件 所有程序集dll都需要 在根目录下
11. CloudFormation模版 AWSTemplateFormatVersion: '2010-09-09' - arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess Resources: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole GetHtmlFunctionGetHtmlPermissionProd: AssumeRolePolicyDocument: Type: AWS::Lambda::Permission Version: '2012-10-17' Properties: Statement: Action: lambda:invokeFunction - Action: Principal: apigateway.amazonaws.com - sts:AssumeRole FunctionName: Effect: Allow Ref: GetHtmlFunction Principal: SourceArn: Fn::Sub: arn:aws:execute- api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/Prod/ANY/* ServerlessRestApiProdStage: Type: AWS::ApiGateway::Stage Properties: DeploymentId: Ref: ServerlessRestApiDeployment RestApiId: Ref: ServerlessRestApi StageName: Prod ListTable: Service: - lambda.amazonaws.com ServerlessRestApiDeployment: Type: AWS::ApiGateway::Deployment Properties: RestApiId: Ref: ServerlessRestApi Description: 'RestApi deployment id: 127e3fb91142ab1ddc5f5446adb094442581a90d' StageName: Stage GetHtmlFunctionGetHtmlPermissionTest: Type: AWS::Lambda::Permission Properties: Type: AWS::DynamoDB::Table Action: lambda:invokeFunction Properties: Principal: apigateway.amazonaws.com ProvisionedThroughput: WriteCapacityUnits: 5 ReadCapacityUnits: 5 AttributeDefinitions: - AttributeName: id AttributeType: S FunctionName: Ref: GetHtmlFunction SourceArn: Fn::Sub: arn:aws:execute- api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/*/ANY/* ServerlessRestApi: KeySchema: Type: AWS::ApiGateway::RestApi - KeyType: HASH Properties: AttributeName: id GetHtmlFunction: © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Type: AWS::Lambda::Function Properties: Body: info: version: '1.0' title:
12. CloudFormation模版 AWSTemplateFormatVersion: '2010-09-09' - arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess Resources: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole GetHtmlFunctionGetHtmlPermissionProd: AssumeRolePolicyDocument: Type: AWS::Lambda::Permission Version: '2012-10-17' Properties: Statement: Action: lambda:invokeFunction - Action: Principal: apigateway.amazonaws.com - sts:AssumeRole FunctionName: Effect: Allow Ref: GetHtmlFunction Principal: SourceArn: Fn::Sub: arn:aws:execute- api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/Prod/ANY/* ServerlessRestApiProdStage: Type: AWS::ApiGateway::Stage Properties: DeploymentId: Ref: ServerlessRestApiDeployment RestApiId: Ref: ServerlessRestApi StageName: Prod ListTable: Service: - lambda.amazonaws.com ServerlessRestApiDeployment: Type: AWS::ApiGateway::Deployment Properties: RestApiId: Ref: ServerlessRestApi Description: 'RestApi deployment id: 127e3fb91142ab1ddc5f5446adb094442581a90d' StageName: Stage GetHtmlFunctionGetHtmlPermissionTest: Type: AWS::Lambda::Permission Properties: Type: AWS::DynamoDB::Table Action: lambda:invokeFunction Properties: Principal: apigateway.amazonaws.com ProvisionedThroughput: WriteCapacityUnits: 5 ReadCapacityUnits: 5 AttributeDefinitions: - AttributeName: id AttributeType: S FunctionName: Ref: GetHtmlFunction SourceArn: Fn::Sub: arn:aws:execute- api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/*/ANY/* ServerlessRestApi: KeySchema: Type: AWS::ApiGateway::RestApi - KeyType: HASH Properties: AttributeName: id GetHtmlFunction: © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Type: AWS::Lambda::Function Properties: Body: info: version: '1.0' title:
13. 理解何为“CI/CD” Source • • 提交源代码, 比如.java 互相做代码 检查 Build • 原码编译 • 单元测试 • 代码格式检 查 • 创建可以部 署的文件包 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Test • • • • 集成测试 性能测试 UI测试 渗透测试 Production • 部署到生产 环境
14. 理解何为“CI/CD” Source Build Continuous integration(持续集成) Continuous delivery(持续交付) Continuous deployment(持续部署) © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Test Production
15. 开发管道的几个目标(Pipeline goals) 1. 安全地部署而不影响生产业务 2. 用一些方法来测试和验证代码: • 语法检查,单元测试(unit testing)等 • 集成和相关性测试(integration and dependency testing) • 全应用检查(entire application stack) 3. 支持多环境,包括: • 开发测试环境, 预览环境, 生产环境等 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 部署工具(Deployment Tools) 测试工具 (Testing Tools) 管道工具 (Pipelining Tools)
16. 无服务器应用的开发 框架 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. https://secure.flickr.com/photos/lox/9408028555
17. 无服务器开发框架 Chalice © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
18. Meet SAM! © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
19. AWS Serverless Application Model (SAM) 专为Serverless应用而简化的部署模型 模版语言驱动(template driven) 支持serverless资源类型,包括Function, APIs and tables 支持所有CloudFormation支持的资源和语法 pip install aws-sam-cli,完全开源(Apache 2.0) https://github.com/awslabs/serverless-application-model © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
20. SAM 模版功能 • 可以将其它 非SAM 的Cloudformation原生资源 混合为一个模版,例如:Step Functions, ElastiCache, CloudWatch Alarm • 支持parameters, mappings, Outputs等 • 支持intrinsic functions • 支持ImportValue (除了RestApiId, Policies, StageName attributes) • YAML or JSON © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
21. SAM 模版文件 AWSTemplateFormatVersion: '2010-09-09’ Transform: AWS::Serverless-2016-10-31 Resources: GetHtmlFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://sam-demo-bucket/todo_list.zip Handler: index.gethtml Runtime: nodejs4.3 Policies: AmazonDynamoDBReadOnlyAccess Events: GetHtml: Type: Api Properties: Path: /{proxy+} Method: ANY ListTable: Type: AWS::Serverless::SimpleTable © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
22. SAM 模版文件 AWSTemplateFormatVersion: '2010-09-09’ Transform: AWS::Serverless-2016-10-31 Resources: GetHtmlFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://sam-demo-bucket/todo_list.zip Handler: index.gethtml Runtime: nodejs4.3 Policies: AmazonDynamoDBReadOnlyAccess Events: GetHtml: Type: Api Properties: Path: /{proxy+} Method: ANY ListTable: Type: AWS::Serverless::SimpleTable © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 告诉CloudFormation这是一个SAM 模版,需要“transform”为原生模版 创建Lambda Function并作相关配 置 同时创建了API Gateway并且自动 配置好所有设定 创建DynamoDB Table
23. 使用CloudFormation原生模版 APIG4XXErrorAlarm: Type: "AWS::CloudWatch::Alarm" Properties: ActionsEnabled: true AlarmDescription: "APIG too many 4xx errors" AlarmName: 'Fn::Sub': 'sam-apidemo-${Env} too many 4xx errors' ComparisonOperator: GreaterThanThreshold Dimensions: - Name: 'ApiName' Value: 'Fn::Sub': '${AWS::StackName}' - Name: 'Stage' Value: 'Prod' EvaluationPeriods: "1" MetricName: 4XXError Namespace: AWS/ApiGateway Statistic: "Sum" Threshold: "1" TreatMissingData: "notBreaching" Unit: "Count" © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 对SAM没有特殊支持的资源, 可直接应用CloudFormation的模 版。 https://docs.aws.amazon.com/zh_cn/AWSCloud Formation/latest/UserGuide/template- reference.html
24. SAM 从模版生成完整堆栈 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
25. AWS SAM Local 用于本地调试无服务器应用的CLI工具 可直接模拟调用Lambda函数以及在代理 集成模式下的API网关服务 返回消息和日志均在本地机器可见 使用开源的docker-lambda来最小化 Lambda的运行时环境 • 可模拟超时,内存限制,运行时环境 等 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. https://github.com/awslabs/aws-sam-local
26. SAM本地调试Lambda © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
27. SAM 的本地调试功能 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
28. SAM本地模拟API Gateway © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
29. SAM 两个重要的命令 – Package & Deploy Package • 创建部署包(.zip file) • 自动上传部署包到指定的S3 bucket临时存放 • 返回新的SAM YAML并且改写CodeUri属性指向这个S3 URI (以方便接下来通过CloudFormation部署) Deploy • 调用 CloudFormation ‘CreateChangeSet’ API创建ChangeSet • 调用 CloudFormation ‘ExecuteChangeSet’ API创建或更新 Serverless环境 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
30. SAM 命令的应用 #!/bin/bash REPLACE_THIS_WITH_YOUR_S3_BUCKET_NAME="hzchen-private-ore" REGION="us-west-2" STACK="sam-apidemo-prod" pip install -r requirements.txt -t apidemo/build/ && \ cp apidemo/*.py apidemo/build/ && \ sam validate && \ sam package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket $REPLACE_THIS_WITH_YOUR_S3_BUCKET_NAME --region $REGION && \ sam deploy --template-file packaged.yaml --stack-name $STACK --capabilities CAPABILITY_IAM --parameter-overrides Env=staging DeploymentPreference=AllAtOnce --region $REGION && \ aws cloudformation describe-stacks --stack-name $STACK --query 'Stacks[].Outputs' --region $REGION © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
31. 部署应用 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. https://secure.flickr.com/photos/simononly/15386966677
32. Lambda环境变量 • • • • 可以将动态的键值对传递给你的函数 可以通过标准的环境变量接口访问,比如Node.js的 proces.env,Python的os.environ 可选择使用AWS Key Management Service (KMS)做加密 • 允许你在 IAM中配置哪个角色(roles) 能访问并解密那 个键对应的值 便于控制访问不同阶段和环境 (i.e. dev, testing, production) © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
33. API Gateway的阶段变量 • 阶段变量(Stage Variable)近似于环境变量 • 使用阶段变量来存储配置数据 • 阶段变量可以从$context对象中获取 • 可以从API网关的大部分字段中获取到变量的值 • Lambda函数的资源名称(ARN) • HTTP访问节点 • 自定义授权方(Custom authorizer)函数的名字 • 参数映射 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
34. 阶段变量与Lambda别名 结合API网管的阶段变量与Lambda函数别名来管理多个环境与多个版本 myLambdaFunction 1 2 3 = prod 4 5 6 = beta 7 8 = dev © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. My First API Stage variable = lambdaAlias Prod lambdaAlias = prod Beta lambdaAlias = beta Dev lambdaAlias = dev
35. 基于Lambda别名的流量灰度 myLambdaFunction 1 2 3 = prod 4 5 6 = prod 5% My First API Stage variable = lambdaAlias Prod lambdaAlias = prod aws lambda update-alias --name prod --function-name myLambdaFunction --routing-config AdditionalVersionWeights={”6"=0.05} © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
36. 基于Lambda别名的流量灰度 myLambdaFunction My First API Stage variable = lambdaAlias 5 6 = prod Prod lambdaAlias = prod aws lambda update-alias --name prod --function-name myLambdaFunction --function-version 6 --routing-config '' © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
37. 基于Lambda别名流量切换与AWS Step Functions结合 Blog link: http://amzn.to/2FjlWA7 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
38. SAM 安全部署(Safe Deployment) Globals: Function: Runtime: nodejs4.3 AutoPublishAlias: !Ref ENVIRONMENT MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler DeploymentPreference: Type: Linear10PercentEvery10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before & after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. NEW!
39. 基于别名的流量切换与SAM的集成 在SAM模版内: AutoPublishAlias 在使用该字段并赋值一个别名后, AWS SAM 将自动处理以下操作: • 根据提供的Lambda函数的S3 URI,检测 代码是否有更新 • 用最新的代码创建或者发布一个更新的 函数版本 • 创建一个你提供的Lambda别名(除非该 别名已存在)并将该别名指向最新的 Lambda函数版本 Deployment Preference类型 Canary10Percent30Minutes Canary10Percent5Minutes Canary10Percent10Minutes Canary10Percent15Minutes Linear10PercentEvery10Minutes Linear10PercentEvery1Minute Linear10PercentEvery2Minutes Linear10PercentEvery3Minutes AllAtOnce © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
40. 基于告警的迅速回滚 在SAM模版内: Alarms: # 以下每行代表一个相关联的告警 - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # 用于在切换流量前后用于验证的Lambda函数 PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction 注意:您可以关联最多10个告警项 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
41. AWS CodeDeploy 支持Lambda部署 搭配使用AWS SAM来部署Serverless应用 支持Lambda根据别名的流量切换功能(Alias Traffic Shifting),提供金丝雀(Canary)发布或蓝绿部署(蓝/ 绿 部署) 支持基于CloudWatch监控和告警( Metrics/Alarms)做回 滚(rollback) Pre/Post Traffic Triggers与其它服务的集成(甚至调用 Lambda) © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
42. 基于别名的滚动发布 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
43. 构建与测试 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. https://secure.flickr.com/photos/spenceyc/7481166880
44. 创建我们的测试与验证模型 我们需要确保我们的代码: • 不存在代码语法问题 • 满足团队或公司的开发规范 • 能编译成功 • 通过单元测试尽可能完整的覆盖所有代码 我们想要确定我们的Serverless应用: • 能与其它业务模块正常集成 • 对上下游的模块调用能很好的进行错误处理 我们想要确定整个应用与基础架构: • 端到端运作正常 • 严格遵循各种安全最佳实践 • 能够处理各种资源伸缩的动态需求 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
45. 测试工具 Code Inspection/Test Coverage: • Landscape – https://landscape.io/ (only for Python) • CodeClimate – https://codeclimate.com/ • Coveralls.io – https://coveralls.io/ Mocking/stubbing tools: • https://github.com/atlassian/localstack - ”A fully functional local AWS cloud stack. Develop and test your cloud apps offline!” • Includes: • • • https://github.com/spulec/moto - boto mock tool https://github.com/mhart/dynalite - DynamoDB testing tool https://github.com/mhart/kinesalite - Kinesis testing tool API Interface/UI testings: • Runscope – https://www.runscope.com/ - API Monitoring/Testing • Ghost Inspector – https://ghostinspector.com/ - Web interface testing © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
46. AWS CodeBuild 全托管的构建服务,用来编译源代码、运行测试以及打 包部署文件 可以很好的扩容并且同时进行多个构建任务 可以自行提供Docker镜像作自定义的编译环境 可以从SSM Parameter Store获取环境变量 可以运行在VPC内部 支持依赖缓存(Dependency Caching) © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
47. buildspec.yml 模版文件 version: 0.2 phases: install: commands: - echo Install python modules for this build... - pip install pytest aws-sam-cli pre_build: commands: - echo Run unit test... - echo python -m pytest -v ./tests build: commands: - pip install -r requirements.txt -t $APP/build/ - cp $APP/*.py $APP/build/ - sam package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket $S3_BUCKET --region $REGION post_build: commands: - echo Build completed on `date` artifacts: files: packaged.yaml © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
48. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
49. 构建你的管道 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. https://www.flickr.com/photos/seattlemunicipalarchives/12504672623/
50. AWS CodePipeline 为快速可靠的应用迭代需求而设计的持续交付服 务 为软件发布流程进行可视化的建模 每当代码发生变化的时候,自动透过管道进行自 动构建,自动测试与部署 除了AWS本身服务之外,与第三方服务业有很 好的结合 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
51. CodePipeline MyApplication Source Stage Source GitHub Transition Build JenkinsOnEC2 Jenkins NotifyDevelopers Lambda TestAPI Runscope Parallel actions Deploy JavaApp CodeDeploy © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Sequential actions Pipeline
52. 通过CodePipeline交付应用 MyApplication MyBranch-Source 管道工作流程: 1. 2. 3. 提交代码到代码仓库 在CodeBuild里打包与测试 在CodePipeline里调用CloudFormation以SAM templates 来创建或更新堆栈(stacks) 你也可以:使用Cloudformation的ChangeSets (只有ChangeSets产生成功才继续更新堆栈,更为安全) 4. 5. 使用特别定义的stage/environment参数带入Lambda成为 环境变量 在不同的stages/environments之间测试应用 你也可以: 插入manual approvals要求手动同意才可以继续 Source CodeCommit Build test-build-source CodeBuild MyDev-Deploy create-changeset AWS CloudFormation execute-changeset AWS CloudFormation Run-stubs AWS Lambda © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
53. 生产环境的范例 MyApplication Source Source CodeCommit Deploy Staging create-changeset AWS CloudFormation execute-changeset AWS CloudFormation Build test-build-source CodeBuild Run-API-test Runscope QA-Sign-off Manual Approval Review Deploy Testing create-changeset AWS CloudFormation Deploy Prod execute-changeset create-changeset AWS CloudFormation AWS CloudFormation Run-stubs execute-changeset AWS Lambda AWS CloudFormation Post-Deploy-Slack AWS Lambda © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 这个管道: • 具有五个阶段(stages) • 通过CodeBuiid构建代码 • 部署到三个不同的环境 • 使用SAM/CloudFormation来更新与 部署环境 • 使用Lambda自定义function来运行 自己的测试 • 整合第三方工具或服务 • 部署到生产环境之前,引入了手动 允许机制(manual approval),需 要人工接入允许之后才能继续
54. 在哪里做测试? 1. • 代码评审 MyApplication 2. • • • Lint/语法检查 单元测试通过 代码成功编译 4. Deploy Staging Source • • • Build 应用成功部署 与真实的服务做集成测试 (可能无法模拟生产环境中服 务版本之间的依赖) Deploy Testing 3. • • 应用成功部署 Mocked/stubbed 集 成测试 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Deploy Prod • • • 5. 金丝雀部署 等待阶段没有告错 全量部署
55. 通过变量控制发布环境 Parameters: MyEnvironment: Type: String Default: testing AllowedValues: - testing - staging - prod Description: Environment of this stack of resources SpecialFeature1: Type: String Default: false AllowedValues: - true - false Description: Enable new SpecialFeature1 … © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. … #Lambda MyFunction: Type: 'AWS::Serverless::Function' Properties: … Environment: Variables: ENVIRONMENT: !Ref: MyEnvironment Spec_Feature1: !Ref: SpecialFeature1 … #API Gateway MyApiGatewayApi: Type: AWS::Serverless::Api Properties: … Variables: ENVIRONMENT: !Ref: MyEnvironment SPEC_Feature1: !Ref: SpecialFeature1 …
56. 传递参数的方式 通过传入的参数配置文件来获取参数 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 通过参数覆盖(Parameter Overrides)
57. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
58. DEMO © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
59. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
60. 总结 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
61. 一些最佳实践总结 对Lambda与API网关: 1. 对生产环境使用蓝/绿或金丝雀部署,并且让回滚最大限度 的自动化 2. 如果你需要支持多个版本以对多个消费者/调用方服务, Lambda的版本功能(Versioning)是一个很好的选择 3. API网关的阶段(Stages)功能与Lambda的版本(Versioning) 功能类似, 在你需要支持多版本API的时候很有帮助 4. 对开发、测试、预览和生产环境使用分开的堆栈(Stacks), 而不是使用阶段(Stages)或Lambda版本(Versioning)来区 别它们 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
62. 一些最佳实践总结 1. 代码互检(Peer review):大部分CI/CD流程的第一步 2. 持续集成(Continous Integration):最低要求! 3. 持续交付(Continous Delivery):基本要求,实现从代码提交到预发布环 境的自动化,使用一个闸道(Gate)或人工的审批/任务提交来最终部署 到生产环境 4. 多环境部署:对无服务器应用来说实现起来非常容易且低成本 5. 包含五个基础阶段的管道:Source,Build,Test,Pre-Production, Production © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
63. 完整流程 AWS CodeCommit Jenkins bucket Code Developers Git Repository AWS CodePipeline AWS CodeBuild AWS CloudFormation Amazon CloudWatch https://github.com/totorochina/sam-cicd-demo © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS Lambda Amazon API Gateway Amazon DynamoDB
64. SAM文档 Serverless Application Model (SAM) - https://github.com/awslabs/serverless-application-model SAM Local - https://github.com/awslabs/aws-sam-local SAM Documents - https://awslabs.github.io/serverless-application- model/index.html Safe Deployment - https://awslabs.github.io/serverless-application- model/safe_lambda_deployments.html © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
65. aws.amazon.com/serverless © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
66. 其它服务资源 AWS Serverless: https://aws.amazon.com/serverless Serverless tools: https://aws.amazon.com/serverless/developer-tools AWS Lambda: https://aws.amazon.com/lambda API Gateway: https://aws.amazon.com/api-gateway CloudFormation: https://aws.amazon.com/cloudformation CodeDeploy: https://aws.amazon.com/codedeploy CodeCommit: https://aws.amazon.com/codecommit © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
67. ? © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. https://secure.flickr.com/photos/dullhunk/202872717/
68. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
69. AWS Deck Template © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
70. Deck Guidelines Fonts, sizes, colors, and layouts are all pre-built in this template. Color palette Please do not use shadows or outlines on shape elements. Limit color use for chart graphics to grayscale plus one accent color. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
71. Helpful Resources AWS Logo (logos for both web and print) AWS Simple Icons (product and simple icons for architectural diagrams) Design Request (AWS Marketing Design wiki) Deck Asset Repository (up-to-date deck assets and templates) © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
72. Copy & Paste Content When pasting content from another presentation please paste using “Destination Theme.” Note: This works when copying entire slides from other presentations as long as the source presentation is also 16:9 WINDOWS © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. MAC
73. Copy & Paste Code When pasting content Code into a Code template please use the “Keep Text Only Function” for Windows and “Use Destination Theme” for Mac WINDOWS © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. MAC
74. Assets Usage © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
75. Re-sizing Assets Always hold down shift key and drag from corner when scaling assets with Shift © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. without Shift
76. TEMPLATE © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
77. This is an illustrated title slide © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
78. This is a simple title slide PRESENTER | DATE © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
79. Title + Content © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
80. Alt title + content 1 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
81. Alt title + content 2 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
82. Code Snippet © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
83. Section Title © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
84. Two columns © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
85. Comparison © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
86. Three column © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
87. Four column with graphics © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
88. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
89. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
90. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
91. Six section with graphics Image caption 1 Image caption 2 Image caption 3 Image caption 4 Image caption 5 Image caption 6 © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-22 13:13
浙ICP备14020137号-1 $Map of visitor$