」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 AWS Lambda 函數 URL 簡化 API 存取:使用內建安全性處理 GET、POST、PUT 和 DELETE

使用 AWS Lambda 函數 URL 簡化 API 存取:使用內建安全性處理 GET、POST、PUT 和 DELETE

發佈於2024-08-24
瀏覽:853

Simplifying API Access with AWS Lambda Function URLs: Handling GET, POST, PUT, and DELETE with Built-in Security

在 AWS 上建置無伺服器應用程式時,AWS Lambda 通常是無需預置或管理伺服器即可執行程式碼的首選解決方案。傳統上,AWS API Gateway 用於將 Lambda 函數公開為 RESTful API。但是,AWS 引入了 Lambda 函數 URL,這是一種透過 HTTPS 呼叫 Lambda 函數的更簡單方法,無需配置 API 閘道的開銷。在這篇文章中,我們將探討如何使用 Lambda 函數 URL 來處理不同的 HTTP 方法(GET、POST、PUT 和 DELETE),同時合併安全性驗證。

什麼是 Lambda 函數 URL?

Lambda 函數 URL 為您的 Lambda 函數提供專用的 HTTP(S) 端點。此功能對於單功能微服務、輕量級 API,或當您需要以最少的設定向公眾公開 Lambda 函數時特別有用。

設定 Lambda 函數 URL

首先,讓我們建立一個 Lambda 函數並配置其 URL。您可以透過 AWS 管理主控台、AWS CLI 或基礎架構即程式碼 (IaC) 工具(例如 AWS CloudFormation 或 Terraform)來執行此操作。

  1. 建立 Lambda 函數:

    • 前往 AWS Lambda 控制台。
    • 點選「建立函數」。
    • 選擇「從頭開始創作」選項。
    • 定義您的函數名稱、執行時間和執行角色。
    • 編寫您的功能程式碼或上傳部署套件。
  2. 建立函數 URL:

    • 在函數配置下,選擇「函數 URL」標籤。
    • 點選「建立函數 URL」。
    • 選擇授權類型(例如,AWS_IAM 用於經過身份驗證的訪問,或 NONE 用於公共訪問)。
    • 點選「建立函數 URL」。
  3. 保護您的函數 URL:

    • 您可以透過選擇 AWS_IAM 作為授權類型來使用 AWS IAM 進行驗證。
    • 建立 IAM 角色或策略來控制哪些使用者或服務可以透過 URL 呼叫該功能。
    • 您可以選擇在函數本身內實作自訂授權邏輯,以進一步限制存取。

處理不同的 HTTP 方法

由函數 URL 觸發的 Lambda 函數可以在單一函數中處理多個 HTTP 方法 - GET、POST、PUT 和 DELETE。以下是如何實現此功能的簡單範例:

import json

def lambda_handler(event, context):
    # Determine the HTTP method
    http_method = event['httpMethod']

    if http_method == 'GET':
        return handle_get(event)
    elif http_method == 'POST':
        return handle_post(event)
    elif http_method == 'PUT':
        return handle_put(event)
    elif http_method == 'DELETE':
        return handle_delete(event)
    else:
        return {
            'statusCode': 405,
            'body': json.dumps({'message': 'Method Not Allowed'})
        }

def handle_get(event):
    # Handle GET request logic
    return {
        'statusCode': 200,
        'body': json.dumps({'message': 'GET request received'})
    }

def handle_post(event):
    # Handle POST request logic
    return {
        'statusCode': 200,
        'body': json.dumps({'message': 'POST request received'})
    }

def handle_put(event):
    # Handle PUT request logic
    return {
        'statusCode': 200,
        'body': json.dumps({'message': 'PUT request received'})
    }

def handle_delete(event):
    # Handle DELETE request logic
    return {
        'statusCode': 200,
        'body': json.dumps({'message': 'DELETE request received'})
    }

使用 IAM 驗證保護函數 URL 的範例

如果您選擇使用 AWS_IAM 來保護您的函數 URL,用戶端將需要使用 AWS SigV4(簽署版本 4)簽署要求。以下是如何發出經過身份驗證的請求的簡要概述:

  1. 建立具有適當權限的 IAM 使用者/角色以呼叫 Lambda 函數。
  2. 簽署請求:使用 AWS 開發工具包、CLI 或 Postman 等工具(使用 AWS IAM 驗證)對 HTTP 請求進行簽署。
  3. 呼叫函數URL:確保簽署的請求包含有效的憑證;否則,請求將被拒絕。

例如,使用 AWS CLI:

aws lambda invoke-url https://.lambda-url..on.aws/ \
--http-method POST \
--body '{ "key": "value" }' \
--region  \
--profile 

結論

AWS Lambda 函數 URL 提供了一種透過 HTTP 公開 Lambda 函數的簡化方法,無需 API 閘道。透過在 Lambda 函數中處理不同的 HTTP 方法(GET、POST、PUT、DELETE)並使用 AWS IAM 保護訪問,您可以快速建立輕量級、安全的 API。無論您是開發簡單的微服務還是更複雜的應用程序,Lambda 函數 URL 都是您的 AWS 工具包的強大補充。

版本聲明 本文轉載自:https://dev.to/sunil_yaduvanshi/simplifying-api-access-with-aws-lambda-function-urls-handling-get-post-put-and-delete-with-built-in-security- 4665?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-07-12
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-07-12
  • 如何實時捕獲和流媒體以進行聊天機器人命令執行?
    如何實時捕獲和流媒體以進行聊天機器人命令執行?
    在開發能夠執行命令的chatbots的領域中,實時從命令執行實時捕獲Stdout,一個常見的需求是能夠檢索和顯示標準輸出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    程式設計 發佈於2025-07-12
  • Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    在ASP.NET async void void async void void void void void的設計無需返回asynchroncon而無需返回任務對象。他們在執行過程中增加未償還操作的計數,並在完成後減少。在某些情況下,這種行為可能是有益的,例如未期望或明確預期操作結果的火災和...
    程式設計 發佈於2025-07-12
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-07-12
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-07-12
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-07-12
  • `console.log`顯示修改後對象值異常的原因
    `console.log`顯示修改後對象值異常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    程式設計 發佈於2025-07-12
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-07-12
  • 在PHP中如何高效檢測空數組?
    在PHP中如何高效檢測空數組?
    在PHP 中檢查一個空數組可以通過各種方法在PHP中確定一個空數組。如果需要驗證任何數組元素的存在,則PHP的鬆散鍵入允許對數組本身進行直接評估:一種更嚴格的方法涉及使用count()函數: if(count(count($ playerList)=== 0){ //列表為空。 } 對...
    程式設計 發佈於2025-07-12
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-07-12
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示 僅通過Python的MlStripper 來簡化剝離過程,Python Standard庫提供了一個專門的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    程式設計 發佈於2025-07-12
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-07-12
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-07-12
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-07-12

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3