第019题 - sap
紫金山-阿特拉斯彗星在接近
问题翻译 (Question Translation)
English: A company has a serverless application comprised of Amazon CloudFront, Amazon API Gateway, and AWS Lambda functions. The current deployment process of the application code is to create a new version number of the Lambda function and run an AWS CLI script to update. If the new function version has errors, another CLI script reverts by deploying the previous working version of the function. The company would like to decrease the time to deploy new versions of the application logic provided by the Lambda functions and also reduce the time to detect when errors are identified. How can this be accomplished?
中文翻译: 一家公司有一个无服务器应用程序,由 Amazon CloudFront、Amazon API Gateway 和 AWS Lambda 函数组成。当前的应用程序代码部署过程是创建 Lambda 函数的新版本号,并运行 AWS CLI 脚本进行更新。如果新版本函数出现错误,另一 CLI 脚本通过部署上一个正常工作版本的函数来还原。公司希望减少部署 Lambda 函数提供的新应用逻辑版本的时间,并缩短发现错误时的检测时间。如何实现这一目标?
选项分析 (Answer Analysis)
选项 A
Create and deploy nested AWS CloudFormation stacks with the parent stack consisting of the AWS CloudFront distribution and API Gateway, and the child stack containing the Lambda function. For changes to Lambda, create an AWS CloudFormation change set and deploy; if errors are triggered, revert the AWS CloudFormation change set to the previous version. 创建并部署嵌套的 AWS CloudFormation 堆栈,其中父堆栈包括 AWS CloudFront 分发和 API 网关,子堆栈包含 Lambda 函数。对于 Lambda 的更改,创建 AWS CloudFormation 更改集并部署;如果触发错误,恢复 AWS CloudFormation 更改集到先前版本。
分析:
- 优点:
- 使用 CloudFormation 提供版本控制和回滚能力。
- 结构清晰,可以集中管理依赖。
此选项是合理的。
选项 B
Use AWS SAM and built-in AWS CodeDeploy to deploy the new Lambda version, gradually shift traffic to the new version, and use pre-traffic and post-traffic test functions to verify code. Rollback if Amazon CloudWatch alarms are triggered. 使用 AWS SAM 和内置的 AWS CodeDeploy 部署新 Lambda 版本,逐步将流量转移到新版本,并使用流量前和流量后的测试功能来验证代码。如果触发 Amazon CloudWatch 警报,进行回滚。
分析:
- 优势:
- 通过逐步流量转移的方式降低风险。
- 使用 CloudWatch 实时监控,快速发现问题并恢复。
此选项有效且灵活,但可能稍显复杂。
选项 C
Refactor the AWS CLI scripts into a single script that deploys the new Lambda version. When deployment is complete, the script tests execution. If errors are detected, revert to the previous Lambda version. 将 AWS CLI 脚本重构为一个单一脚本,该脚本部署新的 Lambda 版本。当部署完成时,该脚本测试执行。如果检测到错误,则还原到此前的 Lambda 版本。
分析:
- 缺陷:
- 尽管简化了脚本,但缺少自动回滚和监控能力。
- 时间成本上可能较高,因为没有系统化的记录和重新编排过程。
不如其他选项有效。
选项 D
Create and deploy an AWS CloudFormation stack that consists of a new API Gateway endpoint that references the new Lambda version. Change the CloudFront origin to the new API Gateway endpoint, monitor errors and if detected, change the AWS CloudFront origin to the previous API Gateway endpoint. 创建并部署一个包含新 API 网关端点的 AWS CloudFormation 堆栈,该端点指向新 Lambda 版本。将 CloudFront 源更改为新的 API 网关端点,监控错误,如果发现错误,则将 AWS CloudFront 源更改为先前的 API 网关端点。
分析:
- 不足之处:
- 仅通过创建 API 网关的变化防止了一部分问题,但没有整体集成的管理及回滚策略。
- 应对突发的错误不够迅速和全面。
此选项在灵活性和效率上均不高。
最佳答案 (Correct Answer)
答案:B
详细解析 (Detailed Explanation)
1. 为什么选择 B?
- 逐步流量控制与监控:
- 应用 AWS SAM 和 AWS CodeDeploy 可以确保在部署过程中降低风险,同时允许逐步切换流量。
- 持续的监控与实时撤回机制能够快速响应潜在问题,提高了应用的可靠性。
2. 为什么不选择其他选项?
- A (CloudFormation 嵌套堆栈): 尽管系统管理良好,但实现与恢复过程不如 B 选项灵活且检测时间不够短。
- C (重构 CLI 脚本): 虽简化但缺少灵活的监控与系统化的版本管理。
- D (专注于 API 网关变化): 缺乏整体架构与较全面的监控与反应系统,不够高效。
总结 (Summary)
选择 B 是实现快速部署和错误检测的最佳方案,提供了更好的灵活性和控制能力。
如有其他问题,请继续提问,我会以相同的格式进行回复!