AWS Lambda 是亞馬遜網絡服務(AWS)提供的服務,讓您能夠在事件發生時運行代碼,而無需管理伺服器。這是構建應用程序的一種簡單且可擴展的方式。

在本教程中,我將向您展示如何將 AWS Lambda 與其他三個服務一起使用:

  • Amazon S3 用於存儲文件、圖像和視頻

  • Amazon 簡訊服務(SNS) 用於發送通知

  • Amazon EventBridge 用於排程消息

我們將一步一步地進行所有操作。

最後,通過整合其他服務,您將打造一個目標實現引言應用程序,該應用程序會發送隨機的鼓舞人心的消息,幫助您保持動力並專注於您的目標。

先決條件

  • 一個 AWS 帳戶:如果您沒有帳戶,可以在此處註冊

  • 一個 GitHub 存儲庫:這是用於存儲您的源代碼。如果您沒有 GitHub 帳戶,可以在此處創建一個

  • 集成開發環境(IDE)例如Visual Studio CodeSublime Text

  • 對 Web 開發和您選擇的任何編程語言有基本了解。我在本教程中使用了 Python。

  • Zenquote Random API

您將學到什麼

  • 如何創建 Amazon S3 存儲桶

  • 如何使用 Amazon Simple Notification Service(SNS)

  • 如何使用 Amazon Lambda

  • 如何使用Amazon EventBridge

目錄

  1. 步驟1:設置開發環境

  2. 步驟2:創建Amazon簡單存儲服務(S3)

  3. 步驟3:創建Amazon簡訊服務(SNS)

  4. 步驟4:創建IAM政策

  5. 步驟5:創建Amazon Lambda函數

  6. 步驟 6:創建 EventBridge

  7. 步驟 7. 上傳您的程式碼

  8. 結論

步驟 1:設置您的開發環境

在這一步中,您將完成所有設置。首先登錄您的 AWS 帳戶,然後在您的 IDE 上安裝 Python(如果您尚未安裝)。

步驟 2:創建 Amazon 簡單儲存服務(S3)

在我們開始創建 S3 存儲桶之前,讓我們先了解什麼是 Amazon S3:

Amazon S3(Simple Storage Service)是 Amazon 的一項服務,允許您存儲和訪問任何量或類型的數據,如照片、視頻、文件和備份,隨時需要時都可以訪問。

現在您已經了解了 Amazon S3 的基本概念,讓我們回到教程。

創建一個 S3 存儲桶

有幾種方法可以創建一個S3存儲桶,但在本教程中,我們將使用Ubuntu命令行(CMD),您的終端,或Amazon CloudShell,取決於您最熟悉的方式。

  • 在網絡搜索欄中輸入boto3 s3以查看相關文檔的列表。

  • 點擊第一個結果。

  • 一旦文檔打開,複製您看到的第一個命令。

  • 將其粘貼到您選擇的CMD或終端中 – 但在此之前請記得“cd”到正確的目錄中。

  • 在文檔中,向下滾動並點擊“create_bucket。

  • 一旦打開,滾動到“請求語法”。複製bucket namebucket configuration

  • 請求語法中列出的其他變量是可選的。

  • 完成後,確保保存。

  • 返回並調用腳本:
#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,您的上傳現在是可見的。

第三步:創建Amazon Simple Notification Service(SNS)

SNS是AWS提供的一個完全托管的消息服務。它通過發送通知使應用程序之間或直接與用戶之間進行通信。

要創建SNS,請按照以下步驟進行:

1. 登錄到AWS管理控制台

然後轉到Amazon SNS。從左側菜單中導航到SNS儀表板並選擇主題

要創建主題:

  • 點擊創建主題

  • 選擇一個主題類型:標準(默認)或FIFO(用於有序消息)。

  • 為您的主題輸入名稱。(例如,MyFirstSNSTopic)。

  • 配置加密、交付重試策略或標籤等可選設置。

  • 點擊創建主題

2. 添加訂閱:

主題創建後,點擊打開詳細信息頁面。選擇訂閱選項卡。

點擊創建訂閱並選擇:

  • 協議可以是電子郵件、短信、HTTP/S、Lambda或SQS。

  • 端點如電子郵件地址、電話號碼或URL。

點擊創建訂閱

3. 確認訂閱:

如果您選擇了電子郵件或短信,將會向提供的端點發送確認鏈接或代碼。請按照指示確認訂閱。

現在我們已完成這一步,讓我們創建一個Amazon Lambda函數,以觸發SNS,從而將消息發送到您的郵件。

第4步:創建IAM策略

該策略用於授權Amazon Lambda觸發事件,並確保CloudWatch自動觸發以監視應用程序的事件。

請按照以下步驟創建策略:

1. 登錄到AWS管理控制台。

在左側菜單中,選擇Policies。然後:

  • 點擊Create policy

  • 選擇Visual選項卡,然後選擇SNS服務。

  • 然後,點擊Choose選項卡以創建自定義策略。

{
    "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。

  • 主題名稱: 您的 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 函數的 Code 頁籤。然後在那裡編寫或粘貼從您的 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 函數

前往 Test 頁籤並創建一個新的測試事件。

然後保存並運行測試。如果成功,將發送一條消息:

這意味著消息已經為您創建

最後,檢查您的電子郵件或短信,取決於您用於本教程的端點。在我的案例中,我使用了電子郵件。

第 6 步:創建一個 EventBridge

Amazon EventBridge 是一個幫助您連接應用程序和 AWS 服務,如 Amazon SNS 和 Amazon Lambda 的服務。

要創建一個 Amazon EventBridge 規則,請按照以下步驟進行:

1. 導航至 EventBridge

在搜索欄中,輸入 EventBridge 並從服務列表中選擇它。

2. 創建一個規則:

在 EventBridge 控制台中,點擊左側面板上的 Rules。然後點擊 Create rule 按鈕。

3. 設置規則細節:

  • Name: 輸入一個獨特的名稱給你的規則。

  • Description (optional): 添加一個描述來解釋這個規則的作用。

4. 選擇事件匯流排:

選擇 Default event bus (或者其他你已創建的事件匯流排)。

5. 定義事件模式或計劃:

對於事件模式:

  • 選擇一個 AWS 服務 作為事件來源。

  • 選擇特定的 事件類型 (例如,S3 文件上傳或 EC2 實例狀態更改)。

對於計劃:

  • 選擇 Schedule 選項以在固定間隔(例如,每 5 分鐘)運行規則。

  • 點擊繼續。這將帶你到具體的詳細頁面,其中:

  • 向下滾動並點擊 cron 調度程序。cron 調度程序指定消息發送的時間。

  • 選擇“關閉”以選擇靈活的時間窗口選項。

  • 檢查規則詳細信息以確認一切正確。

  • 點擊“下一步”按鈕以繼續到目標頁面。

    上面的圖片顯示消息將發送的時間。

    • 在目標頁面上,選擇AWS Lambda來調用您的函數。

  • 向下滾動以調用並選擇您創建的函數。

  • 點擊”下一步”按鈕以繼續。這將帶您到設置頁面。在權限部分下,選擇”使用現有規則”。

  • 最後,去檢查並創建一個計劃:

  • 下一頁會顯示所有詳細信息:

使用 EventBrige 為用戶創建調度程序。

步驟 7:上傳您的代碼

最後,將您的代碼上傳到 GitHub,並包含適當的文檔以幫助解釋代碼的運作方式。

如果您不知道如何操作,請查看此文檔:將項目上傳到 GitHub

結論

如果您遵循了所有這些步驟,您將創建了一個使用 AWS Lambda、Amazon S3、Amazon SNS 和 Amazon EventBridge 的目標實現引言應用程序。該應用程序會獲取激勵引言並按照時間表將它們發送給訂閱者。

您可以在這裡找到存儲庫鏈接這裡

如果您有任何問題,請隨時分享您的進度或提問。

如果您認為這篇文章有幫助,請與他人分享。

通過關注我的項目,隨時了解最新動態,我在TwitterLinkedInGitHub上。

感謝您的閱讀 💖。

免責聲明:
本文中顯示的資源,包括 S3 存儲桶及其 ARN,已被刪除並不再存在。屏幕截圖中可見的細節僅用於演示目的。