AWS Lambda 是亞馬遜網絡服務(AWS)提供的服務,讓您能夠在事件發生時運行代碼,而無需管理伺服器。這是構建應用程序的一種簡單且可擴展的方式。
在本教程中,我將向您展示如何將 AWS Lambda 與其他三個服務一起使用:
-
Amazon S3 用於存儲文件、圖像和視頻
-
Amazon 簡訊服務(SNS) 用於發送通知
-
Amazon EventBridge 用於排程消息
我們將一步一步地進行所有操作。
最後,通過整合其他服務,您將打造一個目標實現引言應用程序,該應用程序會發送隨機的鼓舞人心的消息,幫助您保持動力並專注於您的目標。
先決條件
-
一個 AWS 帳戶:如果您沒有帳戶,可以在此處註冊
-
一個 GitHub 存儲庫:這是用於存儲您的源代碼。如果您沒有 GitHub 帳戶,可以在此處創建一個
-
集成開發環境(IDE)例如Visual Studio Code或Sublime Text。
-
對 Web 開發和您選擇的任何編程語言有基本了解。我在本教程中使用了 Python。
您將學到什麼
-
如何創建 Amazon S3 存儲桶
-
如何使用 Amazon Simple Notification Service(SNS)
-
如何使用 Amazon Lambda
-
如何使用Amazon EventBridge
目錄
步驟 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 name和bucket 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 的目標實現引言應用程序。該應用程序會獲取激勵引言並按照時間表將它們發送給訂閱者。
您可以在這裡找到存儲庫鏈接這裡。
如果您有任何問題,請隨時分享您的進度或提問。
如果您認為這篇文章有幫助,請與他人分享。
通過關注我的項目,隨時了解最新動態,我在Twitter、LinkedIn和GitHub上。
感謝您的閱讀 💖。
免責聲明:
本文中顯示的資源,包括 S3 存儲桶及其 ARN,已被刪除並不再存在。屏幕截圖中可見的細節僅用於演示目的。
Source:
https://www.freecodecamp.org/news/how-to-build-an-application-with-aws-lambda/