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 – 第四部分的内容,希望能够给大家带来帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/114337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端数据可视化之【Echarts下载使用】

目录 🌟下载🌟浏览器引入🌟模块化引入 🌟使用🌟基本使用步骤 🌟绘制一个简单的图表🌟写在最后 🌟下载 🌟浏览器引入 官网下载界面:官方网站 或 Echarts中文…

Bootstrap的列表组相关知识

目录 01-列表组的相关基础知识02-一个简单的列表组示例03-激活或禁用列表组的一行或多行04-设置列表项的颜色05-给列表项添加徽章 01-列表组的相关基础知识 Bootstrap的list-group是一个用于创建列表组件的CSS类,通常用于显示一个项目列表,如导航菜单或…

2023年拼多多双11百亿补贴新增单件立减玩法介绍

2023年拼多多双11百亿补贴新增单件立减玩法介绍 拼多多启动了11.11大促活动,主题为“天天11.11,天天真低价”。消费者享受多重优惠,包括满减、百亿补贴和单件立减等。百亿补贴新增玩法,有超过20000款品牌商品参与单件立减活动。 …

iOS逆向工程之Theos

如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生。那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,Theos是越狱开发工具的首先,因为其最大的特点就是简单。大道至简&…

Hook原理--逆向开发

今天我们将继续讲解逆向开发工程另一个重要内容--Hook原理讲解。Hook,可以中文译为“挂钩”或者“钩子”,逆向开发中改变程序运行的一种技术。按照如下过程进行讲解 Hook概述Hook技术方式fishhook原理及实例符号表查看函数名称总结 一、Hook概述 在逆…

Lake Formation 和 IAM 之间的区别与联系

IAM 和 Lake Formation 都是 AWS 上的权限管理服务,且默认都是自动开启并生效的,只是如果你没有特别配置过它们,可能感觉不到它们的存在,特别是Lake Formation(后文简写为 LF),通常情况下都是“透明”的,但它确实在每次请求时进行了权限检查。本文会详细介绍一下两者之…

【最短路径算法】一文掌握Dijkstra算法,详解与应用示例+代码

目录 1 Dijkstra算法 2 Dijkstra算法的步骤 3 Dijkstra算法python实现 4 Dijkstra算法应用示例详解 1 Dijkstra算法 Dijkstra算法(迪杰斯特拉算法)是一种用于在加权图中查找从一个起始节点到所有其他节点的最短路径的算法。该算法最初由荷兰计算机科…

offsetof宏计算某变量相对于首地址的偏移量

宏:offsetof的使用 //offsetof (type,member) //type是结构体的类型名,member是结构体中的成员名。struct Student {char name[5]; // 姓名int age; // 年龄float score; // 成绩 };int main() {struct Student s;printf("%zd\n", off…

Android微信逆向--实现发朋友圈动态

Android微信逆向--实现发朋友圈动态 0x0 前言# 最近一直在研究Windows逆向的东西,想着快要把Android给遗忘了。所以就想利用工作之余来研究Android相关的技术,来保持对Android热情。调用微信代码来发送朋友圈动态一直是自己想实现的东西,研…

邻接表存储图或者树

大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家来访。 介绍 每个顶点都作为头节点,并且存在一个一维数组中h[N]。树就是相当于一种有向图…

redis哨兵模式详解

目录 前言: 手动干预主节点挂的情况 哨兵节点操作流程 哨兵重新选取主节点流程 主观下线 客观下线 哨兵节点选leader 挑选从节点作为主节点 前言: redis在主从模式下,主节点服务就显的尤为重要。为了保证redis集群的高可用&#xff0…

论文阅读-FCD-Net: 学习检测多类型同源深度伪造人脸图像

一、论文信息 论文题目:FCD-Net: Learning to Detect Multiple Types of Homologous Deepfake Face Images 作者团队:Ruidong Han , Xiaofeng Wang , Ningning Bai, Qin Wang, Zinian Liu, and Jianru Xue (西安理工大学,西安交…

GB28181学习(十)——视音频文件下载

要求 SIP服务器接收到媒体接收者发送的视音频文件下载请求后向媒体流发送者发送媒体文件下载命令,媒体流发送者采用RTP将视频流传输给媒体流接收者,媒体流接收者直接将视频流保存为媒体文件;媒体流接收者或SIP服务器可通过配置查询等方式获取…

gRPC之gRPC转换HTTP

1、gRPC转换HTTP 我们通常把RPC用作内部通信,而使用Restful Api进行外部通信。为了避免写两套应用,我们使用grpc- gateway 把gRPC转成HTTP。服务接收到HTTP请求后,grpc-gateway把它转成gRPC进行处理,然后以JSON 形式返回数据。…

消息队列 RocketMQ 消息重复消费问题(原因及解决)

目录 1.出现重复消费的原因 2.解决 2.1 数据库插入法 2.2 使用布隆过滤器 2.2.1 添加hutool的依赖 2.2.2 测试生产者 2.2.2 测试消费者 1.出现重复消费的原因 BROADCASTING(广播) 模式下,所有注册的消费者都会消费,而这些消费者通常是集群部署的…

ubuntu20.04下安装nc

前言 nc在网络渗透测试中非常好用,这里的主要记一下Ubuntu20.04中nc的安装 编译安装 第一种方式是自己编译安装,先下载安装包 nc.zip wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.…

国密https访问

前言 现在的SSL的加密算法实际上主要是国际算法,包括JDK,Go等语言也仅支持国际算法加密(毕竟是国外开源项目),hash。随着国密算法的普及,比如openssl就支持国密了,还要新版本的Linux内核也开始…

解决因d3dx9_30.dll丢失程序无法运行,电脑缺失d3dx9_30.dll报错解决方案

我们的生活和工作都离不开电脑。然而,电脑作为一种复杂的工具,也会出现各种各样的问题。其中,丢失d3dx9_30.dll文件是一个常见的问题。d3dx9_30.dll是DirectX的动态链接库文件,如果丢失或损坏,可能会导致许多软件和游戏…

通讯录和内存动态管理

目录 (通讯录)动态增长版 实现效果 找单身狗 题目 源码 思路 三个内存函数的模拟实现 模拟实现strncpy 模拟实现strncat 模拟实现atoi (通讯录)动态增长版 该版本通讯录在原版的基础上增加了检查容量函数,实现了通讯录的动态…

Linux中的shell编程

shell编程 重定向 cat >temp 输入内容到temp文件中,如果存在temp则覆盖,没有则新建 cat >>temp 追加内容 cat temp1>>temp2 将temp1中的内容追加到temp 命令执行控制符号 ; 一个命令行执行多条语句 命令替换符 1.双引号&#…