AWS Lambda是亚马逊网络服务(AWS)提供的一项服务,它允许您在响应事件时运行代码,而无需管理服务器。这是一种构建应用程序的简单且可扩展的方法。

在本教程中,我将向您展示如何将AWS Lambda与其他三项服务一起使用:

  • 亚马逊S3用于存储文件、图像和视频

  • 亚马逊简单通知服务(SNS)用于发送通知

  • 亚马逊EventBridge用于调度消息

我们将一步一步地进行讲解。

到最后,借助其他服务的集成,您将构建一个目标实现引用应用程序,该应用程序会发送随机的鼓舞人心的信息,以保持您的动力并专注于目标。

先决条件

  • 一个AWS账户:如果您还没有,请在 这里 注册。

  • 一个GitHub仓库:用于存储您的源代码。如果您还没有GitHub账户,可以在 这里 创建一个。

  • 集成开发环境 (IDE),如Visual Studio CodeSublime Text

  • 对网页开发和您选择的任何编程语言有基本了解。我在本教程中使用了 Python。

  • Zenquote 随机 API

您将学习到的内容

  • 如何创建一个 Amazon S3 存储桶

  • 如何使用 Amazon 简易通知服务 (SNS)

  • 如何使用 Amazon Lambda

  • 如何使用亚马逊EventBridge

目录

  1. 步骤 1:设置开发环境

  2. 步骤 2:创建亚马逊简单存储服务 (S3)

  3. 步骤 3:创建亚马逊简单通知服务 (SNS)

  4. 步骤 4:创建IAM策略

  5. 步骤 5:创建亚马逊Lambda函数

  6. 步骤 6:创建一个 EventBridge

  7. 步骤 7:上传您的代码

  8. 结论

步骤 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 创建一个目标实现引用应用程序。该应用程序按计划获取激励性名言并将其发送给订阅者。

您可以在这里找到存储库链接 这里

如果您有任何问题,请随时分享您的进展或提出问题。

如果您觉得这篇文章有帮助,请与他人分享。

通过在 TwitterLinkedInGitHub 上关注我来保持对我项目的更新。

感谢您的阅读 💖。

免责声明:
本文中显示的资源,包括 S3 存储桶及其 ARN,已被删除并且不再存在。屏幕截图中可见的详细信息仅用于演示目的。