逐步部署无服务器应用程序 - AWS Serverless Application Model
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

逐步部署无服务器应用程序

如果您使用 AWS SAM 创建无服务器应用程序,它内置 CodeDeploy 逐步提供 Lambda 部署。只需几行配置 AWS SAM 会为您执行以下操作:

  • 部署的新版本 Lambda 函数,并自动创建指向新版本的别名。

  • 逐步将客户流量转移到新版本,直到您满意它是否按预期运行,或回滚更新。

  • 定义流量前和流量后测试功能,以验证新部署的代码是否正确配置,以及您的应用程序是否按预期运行。

  • 回滚部署,如果 CloudWatch 警报会触发。

注意

如果您通过 AWS SAM 模板, CodeDeploy 资源是为您自动创建的。您可以查看 CodeDeploy 直接通过 AWS 管理控制台.

示例

以下示例演示了使用的简单版本 CodeDeploy 逐步将客户转移到新部署的版本:

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes 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

对 AWS SAM 模板执行以下操作:

  • AutoPublishAlias: 通过添加此属性并指定别名,AWSSAM:

    • 根据对的更改,检测何时部署新代码 Lambda 功能 Amazon S3 URI。

    • 使用最新代码创建和发布该功能的更新版本。

    • 使用您提供的名称创建别名(除非别名已存在),并指向的更新版本 Lambda 功能。函数调用应该使用别名限定词来利用这一功能。如果你不熟悉 Lambda 函数版本控制和别名,请参阅 AWS Lambda 函数版本控制和别名 .

  • 部署首选项类型: 在上一个示例中,10%的客户流量立即转移到您的新版本。10分钟后,所有流量将转移至新版本。但是,如果您的 钩前/钩后 测试失败,或者如果 CloudWatch 报警被触发 CodeDeploy 回滚您的部署。下表概述了之前使用的其他流量转换选项。请注意以下几点:

    • 淡黄色: 流量以两个增量偏移。您可以从预定义的原色选项中选择。选项指定已切换到已更新的流量百分比 Lambda 第一个增量中的函数版本,以及第二个增量中剩余流量偏移之前的间隔(以分钟为单位)。

    • 线性: 流量使用相等的增量转移,在每次递增之间间隔的分钟数相同。您可以从预定义的线性选项中进行选择,这些选项指定在每个增量中移位的流量百分比以及每个增量之间的分钟数。

    • 一次性: 所有流量从原来的 Lambda 功能到更新的 Lambda 功能版本。

    部署首选项类型

    Canary10Percent30Minutes

    Canary10Percent5Minutes

    Canary10Percent10Minutes

    Canary10Percent15Minutes

    Linear10PercentEvery10Minutes

    Linear10PercentEvery1Minute

    Linear10PercentEvery2Minutes

    Linear10PercentEvery3Minutes

    AllAtOnce

  • 警报: 这些是 CloudWatch 由部署引发的任何错误触发的警报。它们会自动回滚您的部署。例如,您正在部署的更新代码是否在应用程序内创建错误。另一个例子是 AWS Lambda 或自定义 CloudWatch 您指定的指标已违反警报阈值。

  • 挂钩: 这些是流量前和流量后测试功能,在流量转换开始到新版本之前和流量转换完成后运行健康检查。

    • PreTraffic: 在流量转移开始之前, CodeDeploy 调用话务前挂钩 Lambda 功能。这 Lambda 函数必须回拨至 CodeDeploy 并指明成功或失败。如果功能失败,则会中止并将故障报告回 AWS CloudFormation. 如果功能成功, CodeDeploy 前进到流量移动。

    • PostTraffic: 流量移位完成后, CodeDeploy 调用话后挂钩 Lambda 功能。这类似于交通前挂钩,功能必须回拨 CodeDeploy 以报告成功或失败。使用转移流量后挂钩可以运行集成测试或其他验证操作。

    有关更多信息,请参阅 SAM 安全部署参考