发现 AWS Lambda 基础知识以运行强大的无服务器函数

原文:towardsdatascience.com/discover-aws-lambda-basics-to-run-powerful-serverless-functions-29b2bd60c440

本文将向您介绍我是如何开始使用 AWS Lambda 的。本文旨在向您展示如何设置 AWS Lambda 函数,并展示我的问题解决方法,即如何第一次设置 Lambda 函数。希望这能向您展示如何在计算机科学中处理新问题,并找到解决问题的方法。能够自己解决问题是编程中的关键技能,而培养这种技能是本文的主要动机之一。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/14ed4bcf1add25c75e3fb7015a5b5c2b.png

本教程将向您展示如何设置 AWS Lambda 函数,以及我是如何第一次解决这个问题。图片由 ChatGPT 提供。

动机

我编写这个教程,以及未来类似教程的动机,是为了学习对我作为数据科学家来说重要的新概念。作为数据科学家,持续更新知识是最重要的部分之一。我意识到我对将函数部署到云中的理解有限,这对于您,例如,想要托管您的机器学习模型来说很重要。因此,我着手学习如何使用 AWS Lambda 函数部署函数。本教程的另一个重要动机是向您展示我的问题解决方法,因为我将处理一个我之前几乎不了解的任务。因此,本文应该有助于向您展示您如何在编程中找到自己问题的解决方案。

目录

· 动机 · 目录 · 先决条件 · 在 AWS 控制台中设置 Lambda · 从 Python 设置和调用 Lambdas ∘ 我是如何第一次设置 AWS Lambdas 的 ∘ Lambda 函数文件 ∘ 压缩文件 ∘ Lambda 函数实用文件 · 结论

先决条件

  • 简单的 Python 知识

  • 基本的 AWS 控制台知识

本教程的先决条件是简单的 Python 知识和对 AWS 平台的一些了解。我在 AWS 平台上有些工作经验,例如添加用户、授予用户权限等。因此,这些内容在本教程中不会涉及,尽管您可以在网上找到有关如何执行这些任务的文档。

在 AWS 控制台中设置 Lambda

我在控制台中设置 Lambda 函数的步骤如下:

  1. 搜索如何设置 Lambda 函数

  2. 在找到一个好的教程后,我决定尽可能长时间地遵循那个教程。这仅仅是因为有一个高质量的教程可以解决我想要解决的问题。

  3. 验证解决方案是否按预期工作

  4. 试着操作一下代码,以及 Lambda 函数,以确保我理解 Lambda 函数的工作原理。


为了弄清楚如何设置 Lambda 函数,我首先在 Google 上搜索:“如何在 AWS 上设置 Lambda 函数”,第一个搜索结果是AWS 设置第一个 Lambda 函数的教程。我查看了这个教程,并发现它似乎讨论了我正在解决的问题。然而,我注意到,教程展示了如何在 AWS 控制台中设置 Lambda,而不是从AWS CLIAWS Python SDK。但我决定继续遵循教程,学习设置 Lambda 函数的基础知识,并在完成这些后,我将从 AWS Python SDK 开始做同样的事情(见下一节)。

你可以选择遵循教程并跳到本文的下一节,或者继续阅读本文。在本节中,我遵循了在云中设置 Lambda 的教程。在下一节中,我将学习如何使用 AWS 凭证从 Python 代码本身设置 Lambda。

要创建 Lambda 函数,登录 AWS 控制台,搜索“Lambda”,然后点击“创建函数”。确保从头开始编写函数,给它命名,并在 Node 和 Python 之间选择你喜欢的运行时。我将在这个教程中使用 Python。你应该保持架构变量为 x86_64。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/48385260412d05aed64ebc9a34ec8671.png

创建函数后你将看到的代码源标签页。图片由作者提供。

创建函数后,你可以转到代码源标签页,查看 Lambda 函数。_lambda*handler*是在使用 Lambda 时被调用的函数,因此你应该在该函数中包含你 Lambda 的所有代码。我将使用一个简单的加法脚本来展示如何使用 Lambda 以及 Lambda 函数如何接收参数。

下面的代码将展示如何创建一个加法 Lambda(将数字相加),这应该在_lambda*function* Python 文件中使用:

首先,使用记录器将信息打印到控制台:

import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

然后,创建简单的加法函数:

 def addition(a, b):
    return a+b

_lambda*handler*函数中使用加法函数:

def lambda_handler(event, context):
    a = event['a']
    b = event['b']
    result = addition(a, b)

    logger.info(f"Lambda function name: {context.function_name}")
    logger.info(f"Adding {a}+{b}={result}")

    # return the calculated area as a JSON string
    data = {"result": result}
    return json.dumps(data)

修改代码后,务必按下部署按钮。

函数接收来自事件(我很快会展示如何使用它)的变量 a 和 b,运行加法函数,记录重要值(这样我们可以在稍后控制台中查看它们),并将结果作为 JSON 对象返回。

要测试函数是否工作,我们现在可以转到 Test 页面(除了上面的解释器之上的 Code 页面),创建一个新的测试,并将事件 JSON 设置为:

{
  "a": 3,
  "b": 4
}

您现在可以回到代码页面并按下 Test 按钮。这应该会产生您下面看到的输出:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4c24a462ce42f3e458ceaad725e2f937.png

测试您创建的 Lambda 函数后的输出。您可以看到变量 3 和 4 相加的结果是 7,您还可以看到函数调用的日志,如 Lambda 函数的名称、函数调用的持续时间等。图片由作者提供。

如果您想进一步查看函数调用的日志,您可以在 AWS 控制台中搜索 Cloudwatch。按下左侧的 Logs 下拉菜单,然后按下下拉菜单中出现的 Log groups。在这里,您可以按下函数的日志流,这将显示上图中的日志,以及如果您多次调用函数,旧函数调用的日志。

最后,如果您不再使用 Lambda 函数,我建议您删除您的 Lambda 函数。

  • 您可以通过访问 AWS 控制台中的 Lambda 页面,标记您的函数,按下操作,然后点击删除来删除 Lambda 函数。

  • 您可以通过访问 Cloud Watch,选择日志下拉菜单,选择日志组,标记您的日志组,然后删除它来删除日志组。

  • 您可以通过在 AWS 控制台中搜索 Roles 来删除执行角色,标记名为 “-role-” 的角色,然后按删除键。

设置和从 Python 调用 Lambda

本节将分为您需要设置和调用 Python 中 Lambda 函数的不同文件。我将只展示包含在 .py 文件中的函数,遵循我的新工作流程,您可以在下面的 TowardsDataScience 文章中阅读有关如何使您的数据科学/ML 工程师工作流程更有效的信息:

如何使您的数据科学/ML 工程师工作流程更有效

您可以在 我的 GitHub 仓库中找到所有文件。

我首先从如何使用 AWS Lambda 的方法的一个子节开始。

我第一次设置 AWS Lambda 的方法

设置所有这些代码并不简单,因为它没有包含在一个单独的教程中。为了理解 AWS 中的 Lambda 并找出如何实现它,我主要使用了以下三个工具:

  1. Python SDK 的 AWS 文档

  2. ChatGPT

  3. 在线教程,例如来自 Medium 的

  • 每个都有其优点和缺点。AWS 文档通常非常好,例如,它包含了您想要使用所有功能的详细信息。不幸的是,然而,该文档并不包含设置 Python SDK 的 Lambda 函数这一特定用例的教程,这就是为什么我也使用了两个其他工具。

  • 在某些情况下,ChatGPT 可以工作得非常好,因为它可以提供特定上下文的答案和快速响应。然而,它也有些过时(最后一个模型是在 2023 年左右训练的),而且网络搜索并不总是能给出期望的结果。此外,ChatGPT 有时也会犯错误。

  • 在我目前正在处理的用例中,在线教程是非常有用的工具。如果您正在从事许多其他人之前已经做过的事情(例如,设置 Lambda 函数),那么很可能在网上有一个很好的教程。然而,在线教程的缺点是它们可能过时(例如,如果 AWS 控制台已经改变,命令过时,等等),以及一些在线来源可能不可靠。

Lambda 函数文件

首先,您可以创建您想要将其转换为 Lambda 函数的文件。这将是一个乘法函数,以使本文简单。由于我已经讨论过编写此函数,我将展示我使用的代码。

import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

 a, b = event['a'], event['b']
 result = multiplication(a,b)

 logger.info(f"Multiplication of {a} and {b} is {result}")
 logger.info("Dette er en ny linje")
 result_object = {
  "result": result
 }
 return json.dumps(result_object)

def multiplication(a,b):
 return float(a) * float(b)

记得注意文件名以供以后参考。我给我的文件命名为 “eivinds_lambda_function.py”。

压缩文件

您需要将文件压缩以将上面的代码部署到 Lambda 函数中。您可以使用以下代码来完成此操作:

import zipfile

file_to_zip = 'eivinds_lambda_function.py'
zip_file_name = 'function.zip'

with zipfile.ZipFile(zip_file_name, 'w') as zipf:
    zipf.write(file_to_zip)

这将保存您的 Python 代码到一个名为 function.zip 的文件中。

Lambda 函数实用文件

创建一个名为 lambda_function_utility 的文件,该文件将包含您需要创建、更新和删除 Lambda 函数所需的代码。首先,我定义了导入并加载环境变量:

import boto3
from dotenv import load_dotenv
load_dotenv()
import os
import json

然后,我加载了 3 个变量:

ROLE = os.getenv("ROLE")
LAMBDA_FUNCTION_NAME="eivindsPythonLambdaFunction"
lambda_client = boto3.client('lambda', region_name='eu-north-1')
  • 您可以通过访问 AWS 控制台中的“角色”并设置一个名为,例如,UseLambdaFunctions 的新角色来设置 ROLE 变量。确保您选择 Lambda 作为角色的用例。创建角色后,转到包含角色的页面并复制 ARN,这是 ROLE 变量的值(ARN 的格式为 “arn:aws:i am::role/role-name”)。

  • _LAMBDA_FUNCTION*NAME* 变量可以是您喜欢的任何名称。

  • _lambda*client* 变量是您的 AWS 客户端,我将假设您已经设置好了。如果没有,您可以在AWS 文档中了解如何设置。

然后,你可以创建一个函数来创建一个 lambda 函数。我最初是通过 ChatGPT 了解到如何使用这个函数的,但我发现 Handler 变量存在错误。因此,我通过 Google 搜索该函数的文档来了解更多关于如何使用它的信息。下面的其他函数也是使用 ChatGPT 创建的,然后我检查了每个函数的文档,以确保它们被正确调用。

def create_lambda_function():
 with open('function.zip', 'rb') as f:
  zipped_code = f.read()

 response = lambda_client.create_function(
  FunctionName=LAMBDA_FUNCTION_NAME,
  Runtime='python3.12',
  Role=ROLE,
  Handler='eivinds_lambda_function.lambda_handler', # NOTE this must be the path to the handler function (so: <python filename>.lambda_handler)
  Description='This is a lambda function created using boto3 which performs multiplication<<<<<<<<<<<<<<<',
  Code=dict(ZipFile=zipped_code),
 )
 return response

记住,Handler变量需要引用你的 lambda_handler 函数。这是通过将 Handler 变量设置为.lambda_handler 来完成的。

如果你想要更新函数的代码,首先修改实际的函数(在我这个例子中,是 _eivinds_lambdafunction.py中的代码),再次压缩文件,然后运行以下代码:

def update_lambda_function():
 with open('function.zip', 'rb') as f:
  zipped_code = f.read()

 response = lambda_client.update_function_code(
  FunctionName=LAMBDA_FUNCTION_NAME,
  ZipFile=zipped_code,
  Publish=True
 )
 return response

你也可以使用以下代码删除 Lambda 函数:

def delete_lambda_function():
 response = lambda_client.delete_function(
  FunctionName=LAMBDA_FUNCTION_NAME
 )
 return response

要获取 Lambda 函数的状态,你可以使用这个函数:

def check_status(function_name = LAMBDA_FUNCTION_NAME):
 response = lambda_client.get_function(FunctionName=function_name)
 return response

最后,你可以使用以下代码调用 lambda 函数。确保如果你的 lambda 函数接受不同的参数,更新 payload:

def invoke_lambda_function():
 payload = {"a": 5, "b": 10}
 response = lambda_client.invoke(
  FunctionName=LAMBDA_FUNCTION_NAME,
  InvocationType='RequestResponse',
  Payload=json.dumps(payload)
 )
 return response['Payload'].read().decode('utf-8')

如果你运行我上面写的乘法代码,你的输出应该是:

'"{"result": 50.0}"'

如果你收到 403 禁止访问,你应该确保你正在工作的 IAM 用户具有lambda:InvokeFunctionUrl权限。我是在收到请求被 403 禁止后,通过 Google 搜索为什么 Lambda 函数调用会给出 403 错误后发现的这一点。

结论

我在这篇教程中讨论了如何设置 AWS Lambda 函数。这是我第一次设置这样的函数,在整个文章中,我讨论了我是如何第一次设置 Lambda 函数的。文章的目标是教你如何设置 AWS Lambda 函数,更重要的是,如何面对一个你没有解决过的问题并找到解决方案。

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
基于粒子群算法优化Kmeans聚类的居民用电行为分析研究(Matlb代码实现)内容概要:本文围绕基于粒子群算法(PSO)优化Kmeans聚类的居民用电行为分析展开研究,提出了一种结合智能优化算法与传统聚类方法的技术路径。通过使用粒子群算法优化Kmeans聚类的初始聚类中心,有效克服了传统Kmeans算法易陷入局部最优、对初始值敏感的问题,提升了聚类的稳定性和准确性。研究利用Matlab实现了该算法,并应用于居民用电数据的行为模式识别与分类,有助于精细化电力需求管理、用户画像构建及个性化用电服务设计。文档还提及相关应用场景如负荷预测、电力系统优化等,并提供了配套代码资源。; 适合人群:具备一定Matlab编程基础,从事电力系统、智能优化算法、数据分析等相关领域的研究人员或工程技术人员,尤其适合研究生及科研人员。; 使用场景及目标:①用于居民用电行为的高效聚类分析,挖掘典型用电模式;②提升Kmeans聚类算法的性能,避免局部最优问题;③为电力公司开展需求响应、负荷预测和用户分群管理提供技术支持;④作为智能优化算法与机器学习结合应用的教学与科研案例。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,深入理解PSO优化Kmeans的核心机制,关注参数设置对聚类效果的影响,并尝试将其应用于其他相似的数据聚类问题中,以加深理解和拓展应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值