AWS Lambda是亚马逊网络服务(AWS)提供的一项服务,它允许您在响应事件时运行代码,而无需管理服务器。这是一种构建应用程序的简单且可扩展的方法。
在本教程中,我将向您展示如何将AWS Lambda与其他三项服务一起使用:
-
亚马逊S3用于存储文件、图像和视频
-
亚马逊简单通知服务(SNS)用于发送通知
-
亚马逊EventBridge用于调度消息
我们将一步一步地进行讲解。
到最后,借助其他服务的集成,您将构建一个目标实现引用应用程序,该应用程序会发送随机的鼓舞人心的信息,以保持您的动力并专注于目标。
先决条件
-
一个AWS账户:如果您还没有,请在 这里 注册。
-
一个GitHub仓库:用于存储您的源代码。如果您还没有GitHub账户,可以在 这里 创建一个。
-
集成开发环境 (IDE),如Visual Studio Code或Sublime Text。
-
对网页开发和您选择的任何编程语言有基本了解。我在本教程中使用了 Python。
您将学习到的内容
-
如何创建一个 Amazon S3 存储桶
-
如何使用 Amazon 简易通知服务 (SNS)
-
如何使用 Amazon Lambda
-
如何使用亚马逊EventBridge
目录
步骤 1:设置您的开发环境
在此步骤中,您将完成所有设置。首先登录到您的 AWS 账户,然后在您的 IDE 上安装 Python(如果尚未安装)。
步骤 2:创建一个 Amazon 简单存储服务(S3)
在我们开始创建 S3 存储桶之前,首先让我们了解一下 Amazon S3 是什么:
Amazon S3(简单存储服务)是 Amazon 提供的一项服务,允许您存储和访问任意数量或类型的数据,例如照片、视频、文档和备份,随时需要时均可访问。
现在您了解了 Amazon S3 的基本知识,我们可以回到教程中。
创建一个 S3 存储桶
创建 S3 存储桶有几种方法,但本教程将使用 Ubuntu 命令行 (CMD)、您的终端或 Amazon CloudShell,具体取决于您最熟悉哪种方式。
-
在网页搜索栏中输入 boto3 s3 以查看相关文档列表。
-
点击第一个结果。
- 文档打开后,复制您看到的第一个命令。
- 将其粘贴到您选择的 CMD 或终端中——但在此之前请记得 “cd” 进入正确的目录。
- 在文档中,向下滚动并点击 “create_bucket。
-
打开后,向下滚动到 “请求语法。” 复制 存储桶名称 和 存储桶配置。
-
请求语法中列出的其他变量是可选的。
- 完成后,请确保保存。
- 返回并调用脚本:
#python3 您的文件名
- 运行脚本会自动在您的 Amazon S3 中创建一个 S3 存储桶。
- 现在您可以去控制台检查它是否已创建:
上传文件
创建好存储桶后,我们现在可以通过控制台上传文件。我相信还有程序化上传文件和测试的方法,但我还没有在文档中探索所有的方法。
点击存储桶名称以跳转到对象页面。这是您将上传文件以进行存储的地方。
点击上传按钮上传文件。请记住,我们正在创建一个目标实现报价应用。
现在我们已经设置好存储桶:
-
打开如 Google Drive、MS Word、WPS 或任何其他文档编辑器的工具。
-
写下您想要实现的目标。
-
将文件保存为 PDF 或 DOCX 格式。
-
拿着文档并将其上传到您的 Amazon S3。
要验证是否是正确的文件:
-
导航到权限选项卡。
-
向下滚动到阻止公共访问。
-
点击编辑并取消选中该框。
如上所示,目前已设置为“开启”。取消选中以将其“关闭”。
-
在同一存储桶设置页面,修改策略。
-
向下滚动,您会看到一个存储桶策略已自动生成。
-
请继续复制该策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
- 返回存储桶策略编辑器并粘贴该策略。
完成这些步骤后,您的对象将具有公共访问权限。
返回到 对象 标签并点击下面提供的对象 URL:
通过此 URL,您的上传现在可见。
步骤 3:创建一个 Amazon 简单通知服务 (SNS)
SNS 是 AWS 提供的完全托管的消息服务。它通过发送通知实现应用程序之间或与用户之间的通信。
要创建 SNS,请按照以下步骤操作:
1. 登录到 AWS 管理控制台
然后转到 Amazon SNS。导航到 SNS 仪表板,从左侧菜单中选择 主题。
要创建主题:
-
点击 创建主题。
-
选择一个 主题类型:标准(默认)或 FIFO(用于有序消息)。
-
为您的主题输入一个 名称。(例如,
MyFirstSNSTopic
)。 -
配置可选设置,例如加密、投递重试策略或标签。
-
点击 创建主题。
2. 添加订阅:
主题创建后,点击它以打开详细信息页面。选择 订阅 标签。
点击 创建订阅 并选择:
-
协议 可以是电子邮件、SMS、HTTP/S、Lambda 或 SQS。
-
终端节点,例如电子邮件地址、电话号码或 URL。
点击 创建订阅。
3. 确认订阅:
如果您选择了电子邮件或短信,确认链接或代码将发送到提供的端点。请按照说明确认订阅。
现在我们已经完成了这个步骤,让我们创建一个 Amazon Lambda 函数,触发 SNS,以便将消息发送到您的邮箱。
步骤 4:创建 IAM 策略
此策略用于授权 Amazon Lambda 触发事件,并确保 CloudWatch 自动触发以监控应用程序的事件。
要创建策略,请按照以下步骤操作:
1. 登录到 AWS 管理控制台。
在左侧菜单中,选择 策略。然后:
-
点击 创建策略。
-
选择 可视化 选项卡,然后选择 SNS 服务。
-
接下来,点击 选择 选项卡以创建自定义策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:REGION:ACCOUNT_ID:goal_topic"
}
]
}
然后,将以下占位符替换为您的信息:
region
:您的 AWS 区域(例如,us-east-1
)。-
account-id
:您的 AWS 账户 ID。 -
topic-name
: 您的SNS主题名称。
2. 查看并创建策略:
您可以按照以下步骤进行操作:
-
点击“审核”按钮。
-
为您的策略指定一个名称(例如,
LambdaSNSPolicy
),并可选地提供一个描述。 -
点击创建策略。
3. 将策略附加到Lambda执行角色
现在,您需要将策略附加到您的Lambda执行角色。要做到这一点,请按照以下步骤操作:
-
进入IAM控制台中的角色部分。
-
搜索并选择执行角色。
-
接下来,搜索您刚刚创建的策略并选择它。
-
点击附加策略。
两个策略将自动附加。
步骤5:创建一个Amazon Lambda函数
Amazon Lambda 是 AWS 的一项服务,让您可以在不管理服务器的情况下运行代码。您上传代码后,Lambda 会在需要时自动运行和扩展它。
按照以下步骤创建 Amazon Lambda 函数:
1. 登录到 AWS 管理控制台:
导航到 AWS Lambda。
2. 创建一个函数:
点击 创建函数 并选择 从头开始创建 的选项。
填写详细信息:
- 函数名称:输入一个唯一名称(例如,
SNSLambdaFunction
)。 - 运行时:选择运行时(例如,Python、Node.js、Java 等)。
- 角色:选择或创建一个角色。如果您已经有一个角色,选择 使用现有角色。否则,选择 创建一个具有基本 Lambda 权限的新角色。
- 点击 创建函数按钮。
3. 粘贴代码:
在 Lambda 函数页面上,转到 配置 选项卡:
请记住,我们正在尝试获取一个报价。我将在这里添加我们创建的主题的 ARN 并包含我的 API 密钥。但对于本教程,我将直接使用 API 获取数据。
4. 编写 Lambda 代码:
进入您的 Lambda 函数的 代码 选项卡。然后编写或粘贴您 IDE 中的代码以处理传入的 SNS 消息。
示例:
以下是代码:
import os
import json
import urllib.request
import boto3
def fetch_random_quote():
"""
Fetches a random quote from the ZenQuotes API.
"""
api_url = "https://zenquotes.io/api/random"
try:
with urllib.request.urlopen(api_url) as response:
data = json.loads(response.read().decode())
if data and isinstance(data, list):
# 格式化引用和作者
quote = data[0].get("q", "No quote available")
author = data[0].get("a", "Unknown author")
return f'"{quote}" - {author}'
else:
return "No quote available."
except Exception as e:
print(f"Error fetching random quote: {e}")
return "Failed to fetch quote."
def lambda_handler(event, context):
"""
AWS Lambda handler function to fetch a random quote and publish it to an SNS topic.
"""
# 从环境变量获取 SNS 主题 ARN
sns_topic_arn = os.getenv("SNS_TOPIC_ARN")
sns_client = boto3.client("sns")
# 获取随机引用
quote = fetch_random_quote()
print(f"Fetched Quote: {quote}")
# 将引用发布到 SNS
try:
sns_client.publish(
TopicArn=sns_topic_arn,
Message=quote,
Subject="Daily Random Quote to help you stay motivated and inspired to achieve your goals",
)
print("Quote published to SNS successfully.")
except Exception as e:
print(f"Error publishing to SNS: {e}")
return {"statusCode": 500, "body": "Error publishing to SNS"}
return {"statusCode": 200, "body": "Quote sent to SNS"}
5. 保存:
点击部署按钮以保存。
6. 测试您的 Lambda 函数:
进入 测试 选项卡并创建一个新的测试事件。
然后保存并运行测试。如果成功,将发送一条消息:
这意味着消息已为您创建
最后,检查您的电子邮件或短信,具体取决于您为本教程使用的端点。在我的情况下,我使用了电子邮件。
步骤 6:创建 EventBridge
Amazon EventBridge 是一个帮助您连接应用程序和 AWS 服务(如 Amazon SNS 和 Amazon Lambda)的服务。
要创建 Amazon EventBridge 规则,请按照以下步骤操作:
1. 导航到 EventBridge:
在搜索栏中输入 EventBridge 并从服务列表中选择它。
2. 创建规则:
在 EventBridge 控制台中,点击左侧面板上的 规则。然后点击 创建规则 按钮。
3. 设置规则详细信息:
-
名称: 输入规则的唯一名称。
-
描述(可选): 添加描述以解释此规则的作用。
4. 选择事件总线:
选择 默认事件总线(或如果您创建了其他事件总线,也可以选择其他事件总线)。
5. 定义事件模式或计划:
对于事件模式:
-
选择一个 AWS 服务 作为事件源。
- 选择特定的 事件类型(例如,S3 文件上传或 EC2 实例状态更改)。
对于计划:
- 选择 计划 选项,以固定间隔运行规则(例如,每 5 分钟一次)。
- 点击继续。这将带您进入特定的详细信息页面,其中:
-
向下滚动并点击 cron 调度器。cron 调度器指定消息发送的时间。
-
选择 “关闭” 以使用灵活的时间窗口选项。
-
查看规则详情以确认一切正确。
-
点击 “下一步” 按钮以继续到 目标 页面。
上面的图片显示了消息发送的时间。
- 在目标页面,选择 AWS Lambda 来调用您的函数。
- 向下滚动以调用并选择您创建的函数。
- 点击 “下一步” 按钮以继续。这将带您到设置页面。在权限部分,选择 “使用现有规则。”
- 最后,前往审查并创建一个调度:
- 下一页显示您所有的详细信息:
使用 EventBridge 为用户创建调度器。
第 7 步:上传您的代码
最后,将您的代码上传到 GitHub,并包含适当的文档,以帮助解释代码的工作原理。
如果您不知道如何操作,请查看此文档:将项目上传到 GitHub。
结论
如果您遵循了所有这些步骤,您将使用 AWS Lambda、Amazon S3、Amazon SNS 和 Amazon EventBridge 创建一个目标实现引用应用程序。该应用程序按计划获取激励性名言并将其发送给订阅者。
您可以在这里找到存储库链接 这里。
如果您有任何问题,请随时分享您的进展或提出问题。
如果您觉得这篇文章有帮助,请与他人分享。
通过在 Twitter、LinkedIn 和 GitHub 上关注我来保持对我项目的更新。
感谢您的阅读 💖。
免责声明:
本文中显示的资源,包括 S3 存储桶及其 ARN,已被删除并且不再存在。屏幕截图中可见的详细信息仅用于演示目的。
Source:
https://www.freecodecamp.org/news/how-to-build-an-application-with-aws-lambda/