教學課程:建立具有函數 URL 的回應串流 Lambda 函數 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:建立具有函數 URL 的回應串流 Lambda 函數

在本教學課程中,您會建立格式為 .zip 封存檔的 Lambda 函數,其包含的函數 URL 端點會傳回回應串流。如需設定函數 URL 的詳細資訊,請參閱 函數 URLs

必要條件

此教學課程假設您具備基本的 Lambda 操作知識並了解 Lambda 主控台。若您尚未了解,請遵循 使用主控台建立一個 Lambda 函數 中的指示,建立您的第一個 Lambda 函數。

若要完成下列步驟,您需要 AWS Command Line Interface (AWS CLI) 版本 2。命令和預期的輸出會列在不同的區塊中:

aws --version

您應該會看到下列輸出:

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

對於長命令,逸出字元 (\) 用於將命令分割為多行。

在 Linux 和 macOS 上,使用您偏好的 shell 和套件軟體管理工具。

注意

在 Windows 中,作業系統的內建終端不支援您常與 Lambda 搭配使用的某些 Bash CLI 命令 (例如 zip)。若要取得 Ubuntu 和 Bash 的 Windows 整合版本,請安裝適用於 Linux 的 Windows 子系統。本指南中的 CLI 命令範例使用 Linux 格式。如果您使用的是 Windows CLI,必須重新格式化包含內嵌 JSON 文件的命令。

建立執行角色

建立執行角色,授予您的 Lambda 函數存取 AWS 資源的許可。

若要建立執行角色
  1. 開啟 AWS Identity and Access Management (IAM) 主控台的 角色 頁面。

  2. 選擇建立角色

  3. 建立具備下列屬性的角色:

    • 信任的實體類型AWS 服務

    • 使用案例Lambda

    • 權限AWSLambdaBasicExecutionRole

    • 角色名稱 - response-streaming-role

AWSLambdaBasicExecutionRole政策具有函數將日誌寫入 Amazon CloudWatch 日誌所需的許可。建立角色後,請記下其 Amazon Resource Name (ARN)。下一個步驟將需要此值。

建立回應串流函數 (AWS CLI)

使用 AWS Command Line Interface (AWS CLI) 建立具有函數 URL 端點的回應串流 Lambda 函數。

建立可串流回應的函數
  1. 將下列程式碼範例複製至名為 index.mjs 的檔案中。

    import util from 'util'; import stream from 'stream'; const { Readable } = stream; const pipeline = util.promisify(stream.pipeline); /* global awslambda */ export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => { const requestStream = Readable.from(Buffer.from(JSON.stringify(event))); await pipeline(requestStream, responseStream); });
  2. 建立部署套件。

    zip function.zip index.mjs
  3. 使用 create-function 命令建立一個 Lambda 函數。使用上一個步驟的角色 ARN 取代 --role 的值。

    aws lambda create-function \ --function-name my-streaming-function \ --runtime nodejs16.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role arn:aws:iam::123456789012:role/response-streaming-role
建立函數 URL
  1. 將資源型政策新增至函數,以允許存取您的函數 URL。將的值取代為您--principal的 AWS 帳戶 ID。

    aws lambda add-permission \ --function-name my-streaming-function \ --action lambda:InvokeFunctionUrl \ --statement-id 12345 \ --principal 123456789012 \ --function-url-auth-type AWS_IAM \ --statement-id url
  2. 使用 create-function-url-config 命令為函數建立 URL 端點。

    aws lambda create-function-url-config \ --function-name my-streaming-function \ --auth-type AWS_IAM \ --invoke-mode RESPONSE_STREAM

測試函數 URL 端點

透過調用函數來測試整合。可以在瀏覽器中開啟函數 URL,也可以使用 curl。

curl --request GET "<function_url>" --user "<key:token>" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer

我們的函數 URL 使用 IAM_AUTH 驗證類型。這意味著您需要使用 AWS 訪問密鑰和密鑰簽署請求。在上一個命令中,<key:token>以 AWS 存取金鑰 ID 取代。出現提示時輸入您的 AWS 密鑰。如果您沒有 AWS 密鑰,則可以改用臨時 AWS 憑據

清除您的資源

除非您想要保留為此教學課程建立的資源,否則您現在便可刪除。刪除您不再使用的 AWS 資源,您可以避免不必要的 AWS 帳戶費用

刪除執行角色
  1. 開啟 IAM 主控台中的 角色頁面

  2. 選取您建立的執行角色。

  3. 選擇 刪除

  4. 在文字輸入欄位中輸入角色的名稱,然後選擇 刪除

若要刪除 Lambda 函數
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇您建立的函數。

  3. 選擇 Actions (動作)、Delete (刪除)。

  4. 在文字輸入欄位中輸入 delete,然後選擇 刪除