AWS Lambda – 函数版本,别名,API网关,CodeDeploy协同

Hello大家好,我们今天继续讨论AWS Lambda的内容。
Lambda函数的版本

Lambda函数的版本和别名是辅助资源,我们可以通过创建这些资源管理函数的部署和调用。
首先,让我们来看一下Lambda 函数版本的概念。您可以使用版本来管理函数的部署。例如,您现在生产环境上运行了一个函数,假设是V1版本,您可以发布一个这个函数的新版本,比如发布V2版本,以用于新版本测试,而不会影响生产环境V1版本的用户。
这里有一个** L A T E S T 的概念, LATEST的概念, LATEST的概念,LATEST您可以理解成它是最新的“未发布版本”**,当您创建和使用Lambda函数时,您就是在处理$ LATEST版本,您可以一直修改$LATEST直到您满意为止。这是一个可变函数,因为您可以对其进行修改。
然后当修改完成后,您需要发布来使用Lambda函数,这个时候您就需要创建一个版本,比如V1版本。您每次发布函数时,Lambda 都会为函数创建一个新版本。
在您发布版本后,函数的代码和大多数设置都会被锁定,也就是不可改变的了,这也是为了给该版本的用户维持一致的体验,您无法在进行修改。比如一旦发布V1版本,V1版本就无法在修改了。
修改函数后可以通过将其发布为新的版本以投入使用,比如V2、V3等。每一个版本都有各自的ARN,所以您可以单独调用V1版本,也可以单独调用V2版本,或者$LATEST。
那函数版本都包括什么呢?**它包括您的代码以及所有关联的依赖项,调用函数的运行环境,函数的设置以及环境变量等等。**发布函数版本之后,这些都是不可变的,比如如果您想调整内存,您需要创建一个新版本如V2,然后进行发布。
您可以访问每个版本的Lambda函数,当您进行金丝雀测试时会非常有帮助。
Lambda 函数别名

接下来我们来讨论Lambda 函数别名,aliases。
Lambda 别名类似于指向特定函数版本的指针,您可以定义任何您想要使用的别名,比如一些比较常见的别名例子为:开发、测试、生成环境的别名。您可以定义这些别名然后分别将其指向不同的Lambda版本。
每个别名都有唯一的 ARN,而且别名是可以更改指向的,可以更新别名以便指向函数的新的或其他版本。
我们举个的例子,组织一般都会分为开发、生产、测试环境,比如对应我们的3个函数版本,LATEST、V1和V2。然后:
我们可以创建一个DEV的别名,将其指向LATEST版本;
在创建一个TEST别名,将其指向V2版本;
以及创建一个PROD别名,将其指向V1版本。
以上三个别名的ARN都是不同的,这样如果有用户访问DEV别名的ARN时,就会被重定向到LATEST函数版本;访问TEST别名时,就会重定向到V2版本,PROD别名同理。
对于用户的角度,可以访问DEV,TEST和PROD三个别名,重定向到对应的函数版本;然后我们可以更改这三个别名指向我们希望的其他的函数版本。
使用别名可以支持蓝绿部署,可以为Lambda函数分配权重,这样的话访问别名之后就不只是对应一个函数版本了。
比如访问PROD别名时,可以配置将访问的95%的流量指向V1,也就是生成环境的稳定版本;然后将5%的访问流量切到V2版本,用于测试新版本。这是通过配置权重来实现的。
函数别名与API网关

我们继续。
一般情况下,新版本发布都会遵循三个阶段,开发阶段、测试阶段及发布至生产环境。新版本会在开发环境做测试,如果测试确认没问题之后,会先发布到测试环境,通常测试环境会导入生成环境的部分访问流量做测试,如果测试确认没问题,在慢慢将更多的流量导入测试环境的新版本,最终完成新版本的发布。
接下来我们拿一个API网关的环境,来说明下针对不同的阶段函数别名的运用:
这里有一个开发Stage(开发阶段),指向DEV的别名,然后向$LATEST的Lambda函数路由100%的流量。还有一个测试Stage(测试阶段),指向TEST别名,向Lambda函数的V2版本路由100%的流量。生产Stage(生产阶段),指向PROD别名,向Lambda函数的V1版本路由100%的流量。
V2是我们的新版本,假设目前内部已经测试确认了,我们需要将V2版本发布到生产环境,也就是PROD别名。可以通过配置权重将生产的访问量慢慢切换到V2版本。比如配置PROD别名,将95%的流量指向V1,然后将5%的流量指向V2版本。
我们在这个例子中要注意的是,上面这个切换版本的步骤,是发生在Lambda别名级别,我们调整的是PROD别名;
在API网关这一侧,指向的别名一直没有改变,我们不必修改API网关配置。
所以,在上面这种或者类似的场景中,如果我们需要部署和切换不同的函数版本,使用函数别名来进行配置的话就会非常的方便;当有新的函数版本时,我们只需要通过别名配置将流量慢慢切换到新的函数版本,而不需要每次发布时调整API网关的配置。
通过这个例子,希望大家对于函数别名的功能和使用场景有所了解,发布新版本时,使用别名只需要调整别名的指向,而不需要调整其前面的,对于上面这个例子的API网关的配置。
Lambda与CodeDeploy

最后,我们来看一下 Lambda和CodeDeploy。
CodeDeploy可以帮助您实现自动化的Lambda别名的流量转移功能,也就是Traffic shifting功能,如果您使用SAM无服务器应用程序模型来创建,这个功能是直接内置的。
我们来看一下整个的流程:这里有一个PROD别名,以及两个函数版本,V1和V2。V1是当前线上的版本,V2是您刚刚发布的新版本。
假设目前线上都是在访问函数的V1版本,而V2版本0%没有访问量,您希望将V1的访问量慢慢转移到新版本V2,这样完成新版本的上线使用。
注意这里说的不是手动一下切到V2版本,而是通过配置,自动将当前V1版本的100%的访问量,慢慢的按一定百分比转移到新版本V2上。逐步将访问量切换到新版本而不是立刻切换,也是为了当新版本有问题时将影响降到最低。
CodeDeploy就可以帮您实现这个过程。
那多久且每次转移多少百分比的访问量到新的版本呢?这就需要定义部署策略,我们来看一下都有哪些策略: 第一种部署策略为线性的方式,也就是您可以定义每隔N分钟,增加10%的流量,直到100%。比如,Linear10PercentEvery1Minute,定义每1分钟转移10%的访问量到V2版本直到100% 。以及 Linear10PercentEvery2Minutes,定义每2分钟转移10%的访问量到V2版本直到100%, 或者配置为每3分钟以及每10分钟转移10%流量直到100%,以上这些就是线性的方式。
第二种部署的策略为金丝雀方式,您可以选择:Canary10Percent5Minutes ,5分钟切换10%的流量,然后如果没有收到任何错误,切换剩下的所有流量到新版本V2。Canary10Percent10Minutes,或者10分钟切换10%的流量,然后如果没有收到任何错误,切换剩下的所有流量到新版本V2。以及定义15、30分钟,切换10%的流量,然后在切换剩下的所有流量到新版本V2。
第三种部署的策略为All-at-once,这种方式就不会在按照一定的百分比切换访问量了,而是将所有的流量从原来的版本一次性切换到新的版本。
最后我们可以配置Hooks挂钩,在流量转换开始到新版本之前 和 流量转换完成后运行健康检查。
比如我们如果配置了转移前的hook,在部署V2版本时测试此版本函数是否正常;然后当流量转移到新版本V2之后,还会运行一个流量转移后的Hook,确保一切正常,当测试时发现问题时,自动对版本进行回滚,所以这个Hooks挂钩的作用是非常大的。
好的,以上就是我们今天课时的内容,我们讨论了AWS Lambda – 第四部分的内容,希望能够给大家带来帮助。
相关文章:
AWS Lambda – 函数版本,别名,API网关,CodeDeploy协同
Hello大家好,我们今天继续讨论AWS Lambda的内容。 Lambda函数的版本 Lambda函数的版本和别名是辅助资源,我们可以通过创建这些资源管理函数的部署和调用。 首先,让我们来看一下Lambda 函数版本的概念。您可以使用版本来管理函数的部署。例…...
flutter doctor检测环境,出现CocoaPods installed but not working
1. 安装flutter, 地址: 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2. 安装成功后,通过flutter doctor检测环境。以mac为例,出现了CocoaPods installed but not working 错误提示时,以下为解决方案: 2.1 rvm i…...
Python 条件和 if 语句
Python支持来自数学的通常逻辑条件: 等于:a b不等于:a ! b小于:a < b小于或等于:a < b大于:a > b大于或等于:a > b 这些条件可以以多种方式使用,最常见的是在"i…...
行业领先的三个企业正在利用聊天机器人变得更强
聊天机器人已成为客户服务领域的革命者,深刻地改变了企业与客户互动的方式。这些虚拟助手简化了交互,提供了24/7全天候高效和个性化的支持。凭借先进的技术和自然语言处理能力,聊天机器人擅长快速处理查询。 效率是聊天机器人的关键优势。它…...
「Git|场景案例」从项目中删除之前commit过的文件并且让git不追踪删除操作
本文主要介绍如何在git中删除文件但是让git不追踪这些删除操作 文章目录 场景说明解决方案删除一个文件删除一个文件夹以及子文件夹 场景说明 自己在使用react开发一个包含大量媒体文件的网站时,项目初期临时将这些媒体文件都放在项目中,直接使用访问本…...
一款.NET Core开源的基于Vue+ElementUI开发的博客系统 - StarBlog
前言 今天给大家推荐一款.NET Core开源的基于VueElementUI开发的博客系统 - StarBlog。该项目配套详细的文章教程,可以作为 .Net Core 入门项目学习。 官方项目介绍 StarBlog支持Markdown导入的博客。后端基于最新的.Net6和Asp.Net Core框架,遵循REST…...
用git stash暂存修改
git stash命令用于保存当前工作目录的临时状态,包括暂存区和已修改但未暂存的文件。它会将这些修改保存在一个临时区域(即“堆栈”)中,让你能够回到一个干净的工作目录,可以进行其他操作。等到你完成其他任务后&#x…...
一个适合练手的接口测试实战项目——慕慕生鲜
前言 最近很多粉丝找小月要接口测试项目练练手,看看实力!今天,它来了 慕慕生鲜,完整版,文末有福利! 干货来咯,收藏好! 1. 接口测试需求分析 常见接口文档提供的两种方式 ①wor…...
window10/11 光学系统建模之Light Tools8.6 软件安装教程(亲测可用+附带免费资源可直接下载)
1.下载链接 (免费分享) 链接:https://pan.baidu.com/s/1qVubyRSC93xT-GKeK-k3ow 提取码:vkho 2.安装顺序 即按照图里的1234的顺序先安装完注册表,驱动,和lighttools的程序 我个人在win10系统安装这些程…...
Vue3+ElementPlus el-date-picker时间选择器,设置最多选择60天区间内,必须选择大于今天
Vue3ElementPlus el-date-picker时间选择设置, 必须选择大于今天;最多选择60天区间内; 使用disabled-date: 具体实现代码: <el-date-pickerv-model"state.queryParams.dateTime":editable"false&q…...
2022年亚太杯APMCM数学建模大赛B题高速列车的优化设计求解全过程文档及程序
2022年亚太杯APMCM数学建模大赛 B题 高速列车的优化设计 原题再现: 2022年4月12日,中国高铁复兴号CR450动车组在开放线上成功实现单车时速435公里,相对速度870公里,创造了高铁动车组列车穿越开放线和隧道速度的世界纪录。新一代…...
OSI网络分层模型
OSI英文全文是Open System Interconnection Reference Model,翻译成中文就是开放式系统互联通信参考模型。 OSI模型分成了七层,部分层次与 TCP/IP 很像,从下到上分别是: 第一层:物理层,网络的物理形式&…...
EOS区块链keosd的RPC API
list_wallets 查看钱包列表 post v1/wallet/list_walletsapi: http://127.0.0.1:8888/v1/wallet/list_walletsparams: 无returns: ["testnet *" ]testnet:钱包名称create 创建钱包 post v1/wallet/createapi: http://127.0.0.1:8888/v1/wallet/createpa…...
React +AntD + From组件重复提交数据(已解决)
开发场景: react Hooks andt 提交form表单内容给数据库(使用antd的form组件) 问题描述 提交是异步的,请提交方式是POST 方式 提交表单内容给后端,却产生了两次提交记录(当然,数据新增了两条数据)。可以…...
spring的简单使用(配合Druid操作数据库)
文章目录 准备数据pom.xml文件中引用需要的库准备好dao层接口和service层接口和实现类准备好 jdbc.properties 和 user.properties编写Druid的jdbcConfig配置类编写spring的配置类SpringConfig编写Dao层的实现类的逻辑测试类参考文献 准备数据 create database if not exists …...
10.20作业
#include “widget.h” #include “ui_widget.h” Widget::Widget(QWidget *parent) QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); t new QTimer(this); connect(t, &QTimer::timeout, this, &Widget::timeout_Slot); ui->text->setPlacehold…...
笔记1 Compute Shaders
Wending 2022/10/29 15:43:54 Compute Shaders是在GPU运行却又在普通渲染管线之外的程序,通过Compute Shader我们可以将大量可以并行的计算放到GPU中计算从而节省CPU资源 Wending 2022/10/29 15:44:27 反正不是传统的shader 不常用 博毅创为Blake老师 2022/10/29 15…...
IntelliJ IDEA 2023版本 Debug 时没有Force Step Into 按钮解决方法
IntelliJ IDEA 2023版本 Debug 时没有Force Step Into 按钮解决方法 force step into作用是能够去查看原码, 新版本idea默认移除了这个按钮😢 那么让我们来把它找出来叭✋ 但是我们可以通过设置,使用step into就可以进入系统方法。 1.单击…...
【2024秋招】用友后端BIP部门hr面-2023.8.31
反思 首先,我想为你提供一个背景:HR面试不仅仅是为了了解你的背景和经验,还包括你的性格、沟通能力、问题解决技巧、团队合作精神和其他软性技能。基于你提供的信息,我会提供一些可能影响offer级别的点: 答案的质量&a…...
[ Windows ] ping IP + Port 测试 ip 和 端口是否通畅
开发过程中经常会黑窗口中手动测试一下计划请求的目标ip和端口是否通畅,测试方式如下: 一、单纯测试ip是否能够 ping 通,这个比较熟悉了,运行 cmd 打开黑窗口 输入如下指令,能够如下提示信息,表示端口是通…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
[拓扑优化] 1.概述
常见的拓扑优化方法有:均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有:有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...
【题解-洛谷】P10480 可达性统计
题目:P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M,接下来 M M M 行每行两个整数 x , y x,y x,y,表示从 …...
