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

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

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

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]刪除
最新教學 更多>
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符提取最後一行,在Postgresql中,您可能需要遇到與在數據庫中的每個不同標識相關的信息中提取信息的情況。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: ...
    程式設計 發佈於2025-07-13
  • 用戶本地時間格式及時區偏移顯示指南
    用戶本地時間格式及時區偏移顯示指南
    在用戶的語言環境格式中顯示日期/時間,並使用時間偏移在向最終用戶展示日期和時間時,以其localzone and格式顯示它們至關重要。這確保了不同地理位置的清晰度和無縫用戶體驗。以下是使用JavaScript實現此目的的方法。 方法:推薦方法是處理客戶端的Javascript中的日期/時間格式化和...
    程式設計 發佈於2025-07-13
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-07-13
  • 哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    程式設計 發佈於2025-07-13
  • 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-13
  • 為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    在Microsoft Visual C 中,Microsoft consions用戶strate strate strate strate strate strate strate strate strate strate strate strate strate strate strate st...
    程式設計 發佈於2025-07-13
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。本文旨在解決以下內容:問題語句我們如何在Java中實現自定義事件以促進基於特定事件的對象之間的交互,定義了管理訂閱者的類界面。 以下代碼片段演示瞭如何使用觀察者模式創建自定義事件: args...
    程式設計 發佈於2025-07-13
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-07-13
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-07-13
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-07-13
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示 僅通過Python的MlStripper 來簡化剝離過程,Python Standard庫提供了一個專門的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    程式設計 發佈於2025-07-13
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-07-13
  • PHP與C++函數重載處理的區別
    PHP與C++函數重載處理的區別
    作為經驗豐富的C開發人員脫離謎題,您可能會遇到功能超載的概念。這個概念雖然在C中普遍,但在PHP中構成了獨特的挑戰。讓我們深入研究PHP功能過載的複雜性,並探索其提供的可能性。 在PHP中理解php的方法在PHP中,函數超載的概念(如C等語言)不存在。函數簽名僅由其名稱定義,而與他們的參數列表無關...
    程式設計 發佈於2025-07-13
  • 如何使用Python有效地以相反順序讀取大型文件?
    如何使用Python有效地以相反順序讀取大型文件?
    在python 反向行讀取器生成器 == ord('\ n'): 緩衝區=緩衝區[:-1] 剩餘_size- = buf_size lines = buffer.split('\ n'....
    程式設計 發佈於2025-07-13
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-07-13

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

Copyright© 2022 湘ICP备2022001581号-3