本章结束时,您将能够:
- 评估选择最佳无服务器 FaaS 提供商的标准
- 确定主要云服务提供商支持的语言、触发类型和成本结构
- 将无服务器功能部署到云提供商,并将功能与其他云服务集成
在本章中,我们将解释云提供商的无服务器 FaaS 产品,在云中创建我们的第一个无服务器功能,并与其他云服务集成。
在前一章中,讨论了传统架构向无服务器设计的架构演进。此外,介绍了无服务器的起源和好处,以解释其在行业中的高采用率和成功。在本章中,重点将放在云提供商的无服务器平台上。让我们从这些年来云技术产品的演变开始。
在云计算之初,云提供商的主要产品是其供应和即用的硬件,即基础设施。云提供商管理硬件和网络运营,因此他们提供的产品是基础设施即服务 ( IaaS ,如下图所示。所有云提供商仍在提供 IaaS 产品作为其核心功能,例如 AWS 中的亚马逊弹性计算云(Amazon EC2) 和 GCP 的谷歌计算引擎。
在接下来的几年里,云提供商开始提供开发者只能运行其应用的平台。有了这种抽象,手动服务器配置、安全更新和服务器故障成为云提供商关注的问题。这些产品被称为平台即服务 ( 平台即服务),因为它们只专注于在其平台上运行应用及其数据。 Heroku 是最受欢迎的 PaaS 提供商,尽管每个云提供商都有自己的 PaaS 产品,如 AWS Elastic Beanstalk 或 Google App Engine 。与 IaaS 类似,PaaS 仍在软件开发中使用。
在顶层抽象中,应用的功能作为无服务器架构中的控制单元运行。这就是所谓的功能即服务 ( FaaS )并且是近年来所有重要的云提供商提供的。从 IaaS 到 PaaS,最后到 FaaS 的抽象级别可以在下图中看到:
为了分析市场上的 FaaS 产品,定义一些标准是有益的,以便我们能够以结构化的方式比较产品。以下主题对于每个 FaaS 平台都至关重要,在您选择云提供商之前需要进行详细调查:
- 编程语言:功能在云提供商环境内部部署和管理。因此,云提供商定义了支持的编程语言。这是最重要的决策因素之一,因为在大多数情况下,用另一种语言实现这些功能是不可行的。
- **功能触发:**功能设计为由云提供商服务和外部方法触发。传统的技术是调度调用、按需调用以及与其他云服务(如数据库、队列和应用编程接口网关)的集成。
- **成本:**无服务器架构最引人注目的特点是其成本效益和计算价格的主流方式,即按请求付费。计算长期项目可行性的实际和预计成本至关重要。
云提供商被期望具有成本效益,提供尽可能多的编程语言,并支持各种函数触发器。还有其他标准,如监控、运营和内部知识水平,但这些与云提供商的无服务器产品没有直接关系。在接下来的部分中,将讨论三个最主要的云提供商的无服务器平台:亚马逊网络服务、谷歌云平台和微软 Azure。
AWS Lambda 是 FaaS 首款产品,也创造了行业无服务器炒作。它于 2014 年公开,并在云计算领域被各级组织广泛采用。这使得初创企业有可能在短时间内创造新产品。它还使大型企业,如网飞能够将基于事件的触发器转移到无服务器功能。以消除服务器运行负担为契机,AWS Lambda 和无服务器成为行业的下一个趋势。在本节中,我们将讨论编程语言支持、触发器类型和成本结构的 AWS Lambda。此外,我们将部署第一个无服务器功能。
如果你想了解更多,可以在这里找到 AWS Lambda 的官方网站:https://aws.amazon.com/lambda。
说到无服务器函数,AWS Lambda 支持 Java 、 Python 、 Node.js 、 C# 、 Ruby 和 Go 编程语言。此外,AWS Lambda 提供了一个名为 AWS Lambda 运行时接口的应用编程接口,以支持任何语言作为自定义运行时的集成。因此,可以说 AWS Lambda 本身支持一组丰富的流行语言,同时允许扩展到其他编程语言。
AWS Lambda 被设计成具有事件触发功能。这是函数处理从事件源中检索到的事件的地方。在 AWS 生态系统中,各种服务可以是事件源,包括以下服务:
- 亚马逊 S3 添加新文件时实例的文件存储
- 亚马逊 Alexa 实现语音辅助新技能
- 亚马逊云观察事件针对云资源状态变化中发生的事件
- 亚马逊代码提交用于开发人员将新的提交推送到代码存储库
除了这些服务,无服务器事件源的基本 AWS 服务是亚马逊 API 网关。它具有通过 HTTPS 调用 Lambda 函数的 REST API 能力,并允许针对不同的方法管理多个 Lambda 函数,例如 GET 、 POST 、 PATCH 和 DELETE 。换句话说,应用编程接口网关在无服务器功能和外部世界之间创建了一个层。该层还通过保护 Lambda 函数免受分布式拒绝服务 ( DDoS )攻击和定义节流来处理它们的安全性。如果您想与其他 AWS 服务集成或通过应用编程接口网关公开它们,那么对于 AWS Lambda 函数来说,触发器类型和环境是高度可配置的。
对于 AWS Lambda 的定价,有两个关键点需要注意:第一个是请求收费,第二个是计算收费。请求费用基于函数调用次数,而计算费用以每秒 GB 计算。计算费用是内存大小和执行时间的乘积:
- 内存大小(GB): 这是为功能配置的分配内存。
- **执行时间(毫秒):**这是函数将要运行的实现执行时间。
此外,还有一个免费层,每月免除前 100 万个请求的费用和每秒 40 万 GB 的计算费用。一个简单的计算,包括自由层,可以显示运行一个无服务器函数是多么便宜。
假设你的函数在一个月内被调用 3000 万次。您已经分配了 128 MB 的内存,该函数平均运行 200 毫秒:
请求收费:
价格:每 100 万次请求 0.20 美元
自由层 : 1 M
月请求 : 30 M
月请求费:29m x 0.20 美元/M = 5.80 美元
计算费用:
价格:每秒每 GB 0.000016667 美元
空闲层:每秒 400,000 GB
月计算 : 30 M x 0.2 秒 x 128 MB / 1024 = 75 万 GB/秒
月计算费用 : 35 万 x 0.0000166667 = 5.83 美元
月总成本:5.80 美元+5.83 美元= 11.63 美元
这个计算表明,运行一个无服务器的 AWS Lambda 环境是可能的,在这个环境中,您每天会收到100 万个函数调用,每月花费 11.63 美元。这表明运行无服务器工作负载的成本有多低,以及无服务器经济性中需要考虑的基本特征。在下面的练习中,我们的第一个无服务器函数将被部署到 AWS Lambda,并将被调用来显示平台的操作视图。
为了完成本练习,您需要有一个活动的亚马逊网络服务帐户。您可以在https://aws.amazon.com/创建账户。
在本练习中,我们将创建我们的第一个 AWS Lambda 函数,并将其连接到 AWS Gateway API,以便我们可以通过其 HTTP 端点调用。
为了成功完成本练习,我们需要确保执行以下步骤:
-
Open the AWS Management Console, write Lambda in the Find Services search box, and click Lambda - Run Code without Thinking about Servers. The console will look as follows:
-
Click on Create function in the Lambda functions list, as shown in the following screenshot:
-
Select Author from scratch in the Create function view. Write hello-from-lambda as the function name and Python 3.7 as the runtime. Click Create function at the bottom of the screen, as shown in the following screenshot:
-
您将被引导至你好从λ功能视图,这是您
-
can edit the Function code, as shown in the following screenshot:
-
将λ_ handler功能更改如下:
import json def lambda_handler(event, context): return { 'statusCode': '200', 'body': json.dumps({"message": "hello", "platform": "lambda"}), 'headers': { 'Content-Type': 'application/json', } }
-
Click Save at the top of the screen, as shown in the following screenshot:
-
Open the Designer view and click Add trigger, as shown in the following screenshot:
-
Select API Gateway from the triggers list, as shown in the following screenshot:
-
Select Create a new API for the API and Open for the Security configurations on the trigger configuration screen, as shown in the following screenshot:

###### 图 2.9:AWS Lambda–触发器配置
在这个屏幕上,已经在 API Gateway 中为 **hello-from-lambda** 功能定义了一个新的 API,具有开放的安全性。此配置确保将创建一个端点,并且无需任何身份验证即可访问该端点。
- Click Add at the bottom of the screen.
您将被重定向到**你好从λ**功能,通知说**该功能现在正在从触发器**接收事件。在**设计器**视图中,来自 Lambda 的函数连接到用于触发的 API Gateway 和用于日志记录的 Amazon CloudWatch Logs。换句话说,现在可以通过应用编程接口网关端点触发函数,并在 CloudWatch 中检查它们的输出,如下图所示:

###### 图 2.10:AWS Lambda–添加了触发器
- Get the API Gateway endpoint from the API Gateway section, as shown in the following screenshot:

###### 图 2.11:AWS Lambda–触发 URL
- Open the URL in a new tab to trigger the function and get the response, as shown in the following screenshot:

###### 图 2.12:AWSλ–功能响应
这个 JSON 响应表明 AWS Lambda 函数是通过 API Gateway 连接的,工作正常。
- Return to the Functions list from Step 2, select hello-from-lambda, and choose Delete from Actions. Then, click Delete in the pop-up window to remove the function from Lambda, as shown in the following screenshot:

在本练习中,展示了创建一个 AWS Lambda 函数并连接到 AWS Gateway API 进行 HTTP 访问的一般流程。在不到 10 步的时间内,就有可能在 AWS Lambda 云环境中运行生产就绪服务。本练习向您展示了无服务器平台如何使软件开发变得快速而简单。在下一节中,微软将继续对云提供商无服务器平台进行分析。
微软在 2016 年宣布 Azure Functions 为微软 Azure 云中的无服务器平台。Azure Functions 通过 Azure 或外部服务的事件触发器扩展其云平台,以运行无服务器工作负载。它的与众不同之处在于专注于微软支持的编程语言和工具,这些语言和工具在行业中非常流行。在本节中,Azure 函数将根据支持的编程语言、触发器类型和成本进行讨论。最后,我们将部署一个从端点获取参数到 Azure Functions 的函数,以说明其操作方面。
如果你想了解更多,可以在这里找到天蓝色功能的官方网站:https://azure.microsoft.com/en-us/services/functions/。
最新版本的 Azure Functions 支持 Node.js 运行时中的 C# 、 JavaScript 、 F# 、 Java 、 PowerShell 、 Python 和 Typescript ,这些都是通过 JavaScript 实现的。此外,通过 gRPC 作为消息传递层,为函数运行时和工作进程之间的通信提供了语言可扩展性接口。在我们开始使用 Azure Functions 之前,检查它所支持的普遍可用的、实验性的和可扩展的编程语言是很有价值的。
gRPC 是最初在谷歌开发的远程过程调用 ( RPC )系统。它是一个开源系统,能够实现跨平台的交流,没有语言或平台的限制。
Azure Functio ns 被设计为由各种类型触发,例如计时器、HTTP、文件操作、队列消息和事件。此外,可以为函数指定输入和输出绑定。这些绑定定义了函数的输入参数和发送其他服务的输出值。例如,可以创建一个预定函数来从 Blob 存储中读取文件,并创建 Cosmos DB 文档作为输出。在这个例子中,函数可以用定时器触发器、斑点存储输入绑定和宇宙数据库输出绑定来定义。触发器和绑定使 Azure 函数可以轻松地集成到 Azure 服务和外部世界中。
与 AWS Lambda 相比,Azure Functions 的成本计算方法和当前价格有两个不同之处。第一个区别是 Azure Functions 目前的计算价格稍微便宜一些,为每秒 0.000016 美元/GB。第二个区别是 Azure Functions 使用观察到的内存消耗进行计算,而内存限制是在 AWS Lambda 中预先配置的。
在下面的练习中,第一个无服务器函数将被部署到 Azure Functions,并将被调用来显示平台的操作视图。
为了完成本练习,您需要有一个活动的 Azure 帐户。您可以在https://signup.azure.com/创建账户。
在本练习中,我们的目标是在 Azure 中创建一个参数化函数,并使用不同的参数通过其 HTTP 端点调用它。
为了成功完成本练习,我们需要确保执行以下步骤:
-
Click on Function App in the left menu of the Azure home page, as shown in the following screenshot:
-
Click on Create Function App from the Function App list, as shown in the following screenshot:
-
Give the app a unique name, such as hello-from-azure, and select Node.js as the Runtime Stack. Click on Create at the bottom of the page, as shown in the following screenshot:
-
You will be redirected to the Function App list view. Check for a notification at the top of the menu. You will see Deployment to resource group 'hello-from-azure' is in progress, as shown in the following screenshot:
等待几分钟,直到部署完成:
-
Click on + New Function in the hello-from-azure function app view, as shown in the following screenshot:
-
Select In-portal for function creation inside the Azure web portal as a development environment and click Continue, as shown in the following screenshot:
-
Select Webhook + API and click Create, as shown in the following screenshot:
在这个视图中,可以从模板中创建功能,如网络钩子、计时器或市场中的协作模板。
-
Write the following function into index.js and click Save:
module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); if (req.query.name || (req.body && req.body.name)) { context.res = { status: 200, body: "Hello " + (req.query.name || req.body.name) +", it is your function in Azure!" }; } else { context.res = { status: 400, body: "Please pass a name on the query string or in the request body." }; } };
这段代码导出一个接受请求参数的函数。该函数创建个性化消息,并将其作为输出发送给用户。代码应该插入到代码编辑器中,如下图所示:
-
点击获取功能网址,复制弹出窗口内的网址,如
-
following screenshot:

###### 图 2.23:函数网址
- Open the URL you copied in Step 7 into a new tab in the browser, as shown in the following screenshot:

###### 图 2.24:无参数的函数响应
将 **&名称=** 和您的姓名添加到 URL 的末尾,然后重新加载选项卡,例如,**https://hello-from-azure.azurewebsites.net/api/HttpTrigger?代码=nNrck...&名称=Onur** ,如下图截图所示:

###### 图 2.25:带参数的函数响应
这些响应表明,验证参数并将参数传递给函数是可能的。传递参数及其验证对于无服务器函数以及考虑各种集成点作为触发器和绑定的可能性是必不可少的。
- Return to the Function App list from Step 2, click ... alongside the new function we've created, and select Delete, as shown in the following screenshot:

在弹出的视图中输入功能名称,点击删除删除所有资源。在确认视图中,一个警告表明删除函数应用是不可逆的,如下图所示:
在下一节中,将以类似的方式讨论谷歌云功能,一个更复杂的功能将被部署到云提供商。
谷歌云功能于 2017 年在 AWS Lambda 和 Azure Functions 之后刚刚公开。在谷歌云功能发布之前,谷歌的 PaaS 产品,即 Firebase 已经有了无服务器功能。然而,谷歌云功能作为其核心无服务器云产品,对谷歌云平台内的所有服务都是可用的。在本节中,将从支持的编程语言、触发器类型和成本方面讨论谷歌云功能。最后,我们将向谷歌云功能部署一个由云服务定期调用的功能,以说明其操作方面。
如果你想了解更多,可以在这里找到谷歌云功能的官方网站:https://cloud.google.com/functions/。
谷歌云功能 ( GCF )可以在 Node.js 、 Python 、 Go 中开发。与其他主要的云提供商相比,GCF 支持一小部分语言。此外,GCF 不支持公开可用的语言扩展或 API。因此,评估 GCF 支持的语言对于您将要开发的功能是否可行是至关重要的。
谷歌云功能旨在与触发器和事件相关联。云服务中会发生一些事件,例如数据库更改、存储系统中的新文件或调配新虚拟机时。触发器是作为函数输入的服务和相关事件的声明。可以创建触发器作为 HTTP 端点、云发布/订阅队列消息,或者创建存储服务,如云存储和云 Firestore 。此外,功能可以连接到谷歌云平台提供的大数据和机器学习服务。
与其他云提供商相比,谷歌云平台的成本计算略显复杂。这是因为它考虑了调用、计算时间和出站网络数据,而其他云提供商只关注调用和计算时间:
- **调用:**函数调用每一百万次请求收费 0.40 美元。
- 计算时间:函数的计算时间以 100 毫秒为增量,从调用到完成。例如,如果您的功能需要 240 毫秒才能完成,您将被收取 300 毫秒的计算时间。计算中使用了两个单位–GB/秒和GHz/秒。为运行 1 秒钟的功能调配 1 GB 内存,每秒 1 GB 的价格为 0.0000025 美元。此外,为运行 1 秒钟的功能配置了 1 千兆赫的中央处理器,每秒 1 千兆赫的价格为 0.0000100 美元。
- **出站网络数据:**从功能传输到外部的数据以 GB 为单位,每 GB 数据收费 0.12 美元。
GCF 的免费层提供 200 万次调用,每秒 400,000 GB,每秒 200,000 GHz 的计算时间,以及每月 5 GB 的出站网络流量。与 AWS 或 Azure 相比,GCP 的价格略高,因为它的价格更高,计算方法也更复杂。
假设你的函数在一个月内被调用 3000 万次。您已经分配了 128 MB 的内存和 200 MHz 的 CPU,该函数平均运行 200 ms,类似于 AWS Lambda 的示例:
请求收费:
价格:每 100 万要求 0.40 美元
自由层 : 2 M
月请求 : 30 M
月请求费= 2800 万 x 0.40 美元/米= 11.2 美元
计算电荷-内存:
价格:0.0000025 美元/GB-秒
自由层 : 400,000 GB-秒
月计算:30m×0.2 秒×128 MB/1024 = 75 万 GB-秒
月内存费 : 35 万 x 0.0000025 美元= 0.875 美元
计算费用-中央处理器:
价格:0.0000100 美元/千兆赫-秒
自由层 : 200,000 GB-秒
月计算:30m×0.2 秒×200 MHz/1000 GHz = 1,200,1000 GHz 秒
月 CPU 费:100 万 x 0.0000100 美元= 10 美元
月总成本 = $11.2 + $0.875 + $10 = $22.075
由于单价略高于 AWS 和 Azure,在 GCP 运行相同功能的月总成本超过 22 美元,而 AWS 和 Azure 的月总成本约为 11 美元。此外,当涉及潜在的额外成本时,从功能到外部世界的任何出站网络都至关重要。因此,在选择无服务器云平台之前,应深入分析定价方法和单价。
在接下来的练习中,我们的第一个无服务器函数将被部署到 GCF 中,并将被一个预定的触发器调用,以显示平台的操作视图。
为了完成这个练习,你需要有一个活跃的谷歌账户。您可以在https://console.cloud.google.com/start创建账户。
在本练习中,我们的目标是在谷歌云平台中创建一个调度函数,并使用云调度服务检查其调用。
为了成功完成本练习,我们需要确保执行以下步骤:
-
Click on Cloud Functions in the left menu, which can be found in the Compute group on the Google Cloud Platform home page, as shown in the following screenshot:
-
Click on Create function on the Cloud Functions page, as shown in the following screenshot:
-
In the function creation form, change the function name to HelloWorld and select 128 MB for the memory allocation. Ensure that HTTP is selected as the trigger method and that Go 1.11 is selected as the runtime, as shown in the following screenshot:
-
Change function.go using the inline editor inside the browser so that it has the following content:
package p import ( "fmt" "net/http" ) func HelloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello World from Google Cloud Functions!") return }
这段代码创建了一个 HelloWorld 函数,输出中打印了一条静态消息。代码应该插入到代码编辑器的 function.go 中,如下图截图所示:
-
Copy the URL in the form below the Trigger selection box to invoke the function, as shown in the following screenshot:
-
Click on the Create button at the end of the form. With this configuration, the code from step 4 will be packaged and deployed to Google Cloud Platform. In addition, a trigger URL will be assigned to the function to be reachable from outside, as shown in the following screenshot:
等待几分钟,直到功能列表中的 HelloWorld 功能旁边有一个绿色的勾选图标,如下图截图所示:
-
Open the URL you copied in step 5 into a new tab in your browser, as shown in the following screenshot:
响应显示该功能已成功部署,并按预期运行。
-
Click on Cloud Scheduler in the left menu, under TOOLS, as shown in the following screenshot:
-
Click on Create job on the Cloud Scheduler page, as shown in the following screenshot:
-
Select a region if you are using Cloud Scheduler for the first time in your Google Cloud project and click Next, as shown in the following screenshot:

###### 图 2.38:云调度器-区域选择
如果您看到以下通知,请等待几分钟:
**我们正在您选择的区域初始化云调度器。这通常需要一分钟左右**。
- Set the job name as HelloWorldEveryMinute and the frequency as *** * * * ***, which means the job will be triggered every minute. Select HTTP as the target and paste the URL you copied in step 5 into the URL box, as shown in the following screenshot:

###### 图 2.39:调度程序作业创建
- You will be redirected to the Cloud Scheduler list, as shown in the following screenshot:

###### 图 2.40:云调度器页面
等待几分钟,点击**刷新**按钮。该列表将显示**上次运行**的时间戳及其对**hellowordeveryment**的结果,如下图所示:

###### 图 2.41:包含运行信息的云调度器页面
这说明云调度器在**2019 年 8 月 13 日下午 3:44:00**触发了我们的功能,结果成功。
- Return to the function list from step 7 and click … for the HelloWorld function. Then, click Logs, as shown in the following screenshot:

###### 图 2.42:该功能的设置菜单
您将被重定向到该功能的日志中,您会看到每分钟都有**功能执行开始**并列出相应的成功日志,如下图截图所示:

###### 图 2.43:功能日志
如您所见,云调度程序正在按计划调用该函数,并且该函数正在成功运行。
- Return to the Cloud Scheduler page from Step 13, choose HelloWorldEveryMinute, click Delete on the menu, and then confirm this in the popup, as shown in the following screenshot:

###### 图 2.44:云调度程序-作业删除
- Return to the Cloud Functions page from step 7, choose HelloWorld, click Delete on the menu, and then confirm this in the popup, as shown in the following screenshot:

在本练习中,我们创建了一个 Hello World 函数,并将其部署到 GCF 中。此外,还创建了一个云调度程序作业,以特定的时间间隔(如每分钟)触发该功能。现在,该功能连接到另一个云服务,以便该功能可以触发该服务。在选择云 FaaS 提供商之前,将功能与其他云服务集成并评估其集成能力至关重要。
在下面的活动中,您将开发一个现实生活中的日常站立提醒功能。您将连接一个您希望在特定的站立会议时间调用的函数和函数触发器服务。此外,该提醒将向基于云的协作工具 Slack 发送特定消息。
本活动的目的是为 Slack 中的站立会议提醒创建一个真实的功能。该提醒功能将在特定时间为您的团队调用,以提醒团队中的每个人下一次单口会议。提醒将与 Slack 一起工作,因为它是一个受欢迎的协作工具,已被世界各地的许多组织采用。
为了完成此活动,您需要访问一个 Slack 工作场所。您可以在https://slack.com/create免费使用您现有的 Slack 工作区或创建一个新的工作区。
完成后,您将向 GCF 部署每日站立提醒功能,如下图所示:
此外,您将需要一个集成环境来在指定的会议时间调用该函数。站立会议通常在工作日的特定时间举行。因此,将连接一个调度程序作业,根据您的会议时间触发您的功能,如下图所示:
最后,当调度程序调用该函数时,您的 Slack 通道中会有提醒消息,如下图所示:
为了完成本练习,您应该按照“可宽延时间设置”步骤配置可宽延时间。
松弛设置
执行以下步骤来配置松弛时间:
-
在松弛工作区,点击您的用户名并选择定制松弛。
-
在打开的窗口中点击配置应用。
-
点击浏览应用目录从目录中添加新的应用。
-
在应用目录的搜索框中找到入局网钩。
-
点击添加配置进入网络钩子应用。
-
用您特定的频道名称和图标填写传入网络挂钩的配置。
-
Open your Slack workspace and channel. You will see an integration message.
松弛设置步骤的详细截图可在第 376 页找到。
执行以下步骤完成本活动:
-
Create a new function in GCF to call the Slack webhook when it is invoked.
代码应该用类似的对象向 Slack webhook URL 发送一个 JSON 请求:{“text”:“单口会议时间”} 。您可以用 GCF 支持的任何语言实现代码。代码片段如下:
package p import ( "bytes" "net/http" ) func Reminder(http.ResponseWriter, *http.Request) { url := "https://hooks.slack.com/services/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" var jsonStr = []byte('{"text": "Time for a stand-up meeting!"}') req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) client := &http.Client{} _, err = client.Do(req) if err != nil { panic(err) } }
-
Create a scheduler job in GCP with the trigger URL of the function and specify the schedule based on your stand-up meeting times.
当时间表中为提醒消息定义的时间到达时,检查“可宽延时间”通道。
-
Delete the schedule job and function from the cloud provider.
这个活动的解决方案可以在第 376 页找到。
在这一章中,我们描述了云技术产品的演变,包括云产品在过去几年中是如何变化的,以及责任是如何在组织之间分配的,从 IaaS 和 PaaS 开始,最后是 FaaS。随后,提出了评估无服务器云产品的标准。
列出了编程语言支持、函数触发器和无服务器产品的成本结构,这样我们就可以比较各种云提供商,即 AWS Lambda、Azure Functions 和 GCF。此外,我们向所有三家云提供商部署了无服务器功能。这向您展示了如何将云功能与其他云服务集成,例如用于 REST API 操作的 AWS API Gateway。此外,一个参数化的函数被部署到 Azure Functions 中,以展示我们如何处理来自用户或其他系统的输入。最后,我们向 GCF 部署了一个预定功能,以展示与其他云服务的集成。在本章的最后,我们使用无服务器功能和云调度器实现了一个真实的 Slack 提醒。
在下一章中,我们将介绍无服务器框架,并学习如何使用它们。