亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

基于云的NBA比賽提醒系統——使用Python和AWS服務搭建實戰教程

简介

这是我在参加的30天DevOps挑战中的第一周第二天的项目内容。更多关于挑战和创建者的信息,这里,并向他们表示感谢。感谢他们的贡献。

三颗星 (sān kē xīng)

项目简介

这个项目创建了一个基于云的NBA比赛日提醒服务,利用Python、AWS Lambda、Amazon EventBridge、Amazon SNS和NBA API等技术。NBA球迷可以通过订阅此服务,通过电子邮件或短信实时接收比赛结果更新。

……

主要特点
  • 使用SportsDataIO的NBA API获取NBA比赛分数。
  • 使用Amazon SNS通过电子邮件或短信将分数更新发送给订阅者。
  • 使用Amazon EventBridge自动发送通知。
  • 遵循IAM角色的最小权限原则。

    • *
科技
  • 云提供商:AWS
  • 核心服务:SNS、Lambda、EventBridge
  • 外部API:NBA API(SportsData.io)
  • 编程语言:Python 3.x
  • IAM安全:最小权限原则

NBA API

(我与API打交道越多,研究和写作越多,就越了解它们。你有没有听说过这个说法:只有能用最简单的话解释清楚,才算真正明白?现在,我对自己解释API及其工作机制的能力越来越有信心,我打算不久后写一篇关于这点的文章,并会把这个链接放在这里。)

在这个项目里,我们向NBA API发起请求,获取关于当天比赛的信息。请求的内容大致如下:

api_url = f"https://api.sportsdata.io/v3/nba/scores/json/GamesByDate/{todays_date}?key={your_api_key}"
try: 
  response = requests.get(api_url)
  response.raise_for_status()
  data = response.json()
  print(json.dumps(data, indent=4))
  # 获取今天的NBA比赛数据
except Exception as e: 
  print(f"发生了错误: {e}")

进入全屏模式,退出全屏

使用 try-except 块包裹的请求,NBA API 会响应我们的请求,会返回错误信息或我请求的数据。因此,数据以难以解读的格式传送,我们通过使用如 .json()json.dumps() 这样的方法来解析。

格式化的回复如下:

[
    {
        "GameID": 21678,
        "Season": 2025,
        "SeasonType": 1,
        "Status": "预定中",
        "Day": "2025-02-05T00:00:00",
        "DateTime": "2025-02-05T19:00:00",
        "AwayTeam": "MIL",
        "HomeTeam": "CHA",
        "AwayTeamID": 15,
        "HomeTeamID": 2,
        "StadiumID": "球场ID",
        "Channel": "频道",
        "Attendance": "空",
        "AwayTeamScore": "空",
        "HomeTeamScore": "空",
        ...
    },
   ... 
]

进入全屏模式,退出全屏

请注意,每个游戏的信息都保存在一个字典里。我可以利用 .get() 方法从解码的数据中获取我需要的信息。比如,我可以这样一行代码来提取主队,如下:

team_home = game_dict.get('home_team')
    home_team = game.get("HomeTeam", "未知")

全屏 退出全屏

这会创建一个变量 home_team,如果存在键 'HomeTeam',则设置其值为此键对应的值;若不存在该键,则 home_team 将被设置为 'Unknown'。

谢谢NBA的API!

事件驱动的架构

今天我学到了关于事件驱动架构的一些东西。这个项目就是一个事件驱动架构的例子,我们在 EventBridge 中设置了 cron 任务来调用 Lambda 中的代码。Lambda 中的代码会发起 API 调用,转换数据,然后将其发送到 SNS,SNS 再发出通知。我们设置的 EventBridge 中的定时任务会自动启动整个工作流的其余部分。

事件总线

EventBridge 帮助从不同的 AWS 服务和自定义应用程序中路由事件。在这种情况下,我们利用 EventBridge 来定义一个计划规则,该规则会在特定的时间间隔触发我们的 Lambda 函数。这消除了手动执行的需求,并确保工作流的一致运行。

Lambda

Lambda 运行我们编写的代码,从 NBA API 拉取数据,处理后发送出去,在这种情况下会发送到一个 SNS 主题。

SNS

SNS,简单通知服务,是一种发布/订阅模式服务,人们可以订阅某个话题并通过短信或电子邮件接收通知。


项目的结构
游戏日通知/
├── .env.                             # 包含环境变量的文件
├── policies/        
│   └── gd_sns_policy.json            # sns策略的JSON配置文件
├── src/
│   ├── game_day_notifs.py            # 主要逻辑文件
├── README.md                         # 文档说明
└── requirements.txt                  # 依赖列表

全屏显示,退出全屏


设置指南

按照这些步骤来为这个应用创建流程。

克隆代码库(克隆代码库是指复制整个代码仓库到本地)

在终端中输入以下命令:

git clone https://github.com/LilLoveBytes/game-day-notifications.git
cd game-day-notifications

这将克隆仓库并切换到 game-day-notifications 目录。

全屏模式 退出全屏

创建一个SNS主题订阅

  1. 打开 AWS 管理控制台。
  2. 进入 SNS 服务页面。
  3. 点击创建标准主题。
  4. 为该主题命名(例如 GameDay),并记下 ARN(Amazon 资源名称)。
  5. 单击创建主题。

为 SNS 主题添加订阅

  1. 创建主题之后,从列表中点击主题名称。
  2. 转到“订阅”选项卡并点击“创建订阅”按钮
  3. 选择协议:
  • 邮件:选择邮件并输入有效的电子邮件地址

  • 短信:选择短信,并输入有效的国际格式电话号码(例如:+1-213-555-5555)

    1. 点击“创建订阅”按钮。
    2. 确认订阅信息
  • 邮件:检查此帐户的邮件并点击确认链接以确认订阅。

  • 短信:订阅在创建后即刻生效,无需额外确认。

创建 SNS 发布策略

  1. 在 AWS Management Console 中打开 IAM 服务。
  2. 导航到策略 -> 新建策略
  3. 点击 JSON 并粘贴 repo 中 gd_sns_policy.json 文件中的 JSON 策略内容
  4. 将 "Resource" 键对应的值改为前面提到的 ARN
  5. 点击下一步:标签(可跳过添加标签)
  6. 点击下一审阅
  7. 输入策略名称
  8. 确认后点击创建策略。

为 Lambda 创建一个 IAM 角色(Role)

  1. 在 AWS 管理控制台中打开 IAM 服务。
  2. 点击 角色 -> 创建新角色。
  3. 选择 AWS 服务 并选择 Lambda。
  4. 附加以下策略
  • SNS 发布策略(在上一步中创建)。

  • Lambda 基础执行角色(AWSLambdaBasicExecutionRole)(AWS 提供的预设策略)。
    1. 点击 下一步:标签(可跳过此步骤)。
    2. 点击 下一步:复查
    3. 输入角色的名称
    4. 查看后点击 创建角色。
    5. 复制并在 Lambda 函数中使用的角色的 ARN。

发布 Lambda 函数.

  1. 打开 AWS 管理控制台并导航到 Lambda 服务。
  2. 点击创建函数。
  3. 选择新建函数。
  4. 输入一个函数名称
  5. 选择运行时为 Python 3.x。
  6. 将之前创建的 IAM 角色分配给此函数。
  7. 在函数代码部分:
  • 复制 src/game_day_notifs.py 文件中的内容。

  • 粘贴到内联代码编辑器中。

    1. 在环境变量部分,添加以下变量:
  • NBA_API_KEY: 您的 NBA API 密钥(请替换为实际密钥)。

  • SNS_TOPIC_ARN: 之前创建的 SNS 主题的 ARN(请替换为实际ARN)。
    1. 点击创建函数

利用EventBridge设置自动化流程

  1. 打开 AWS 管理控制台并导航到 EventBridge 服务。
  2. 转到规则页面 -> 创建规则。
  3. 选择规则类型:计划(Schedule)。
  4. 选择继续以进入 EventBridge 计划器。
  5. 命名计划并选择重复计划
  6. 设置您希望接收更新的 cron 表达式
  7. 在目标中选择您刚刚创建的 Lambda 函数
  8. 选择创建新角色,然后点击下一页。

试试系统

  1. 在 AWS 管理控制台中打开 Lambda 函数页面。
  2. 创建一个测试事件来模拟执行。
  3. 运行函数,并查看 CloudWatch 日志中的错误。
  4. 确认通知已成功发送给订阅用户。

结论部分

今天我了解到...

  • 什么是事件驱动架构(EDA)。
  • 它们是 AWS Lambda、SNS 和 EventBridge。
  • 如何利用 SNS 和 Lambda 设计通知系统。
  • 如何使用 AWS 服务(如 EventBridge 和 Lambda)构建自动化工作流。
  • 如何使用最小权限的 IAM 策略来保护 AWS 服务。
  • 如何利用 EventBridge 自动化工作流。
  • 如何格式化 cron 表达式来定义计划执行时间。
  • 如何将外部 API 集成到云基工作流程中。

    • *
未来改进

我在这项挑战的初始目标达成后写下这些文字:创建一个简单的通知系统,来从API抓取NBA比赛数据,格式化数据,并将其发送给订阅用户。

如果我有能力,我会通过创建网页和用户界面来增强这个应用,让用户能互动并进行数据可视化。我还可以添加一些功能来包括NFL比赛数据的通知。


如果你看到了这里,感谢你的支持!欢迎访问我的Github。我希望能与你通过Linkedin联系。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消