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

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

教學課程:建立具有函數 URL 的 Lambda 函數

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

必要條件

此教學課程假設您具備基本的 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

  4. 選擇下一步

  5. 在 [權限原則] 窗格AWSLambdaBasicExecutionRole中,於搜尋方塊中輸入。

  6. 選取AWSLambdaBasicExecutionRole AWS 受管理策略旁邊的核取方塊,然後選擇下一步

  7. 輸入 lambda-url-role角色」名稱,然後選擇「建立角色」。

AWSLambdaBasicExecutionRole政策具有函數將日誌寫入 Amazon CloudWatch 日誌所需的許可。稍後在教學課程中,您需要角色的 Amazon 資源名稱 (ARN) 來建立您的 Lambda 函數。

若要尋找執行角色的 ARN
  1. 開啟 AWS Identity and Access Management (IAM) 主控台的「角色」頁面

  2. 選取您剛建立的角色 (lambda-url-role)。

  3. 在 [摘要] 窗格中,複製 ARN

建立具有函數 URL 的 Lambda 函數 (.zip 封存檔)

使用 .zip 封存檔建立具有函數 URL 端點的 Lambda 函數。

建立函數
  1. 將下列程式碼範例複製至名為 index.js 的檔案中。

    範例 index.js
    exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; };
  2. 建立部署套件。

    zip function.zip index.js
  3. 使用 create-function 命令建立一個 Lambda 函數。請務必使用您先前在教學課程中複製的執行角色的 ARN 來取代角色 ARN。

    aws lambda create-function \ --function-name my-url-function \ --runtime nodejs18.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role arn:aws:iam::123456789012:role/lambda-url-role
  4. 將資源型政策新增至授予許可的函數,以允許公開存取您的函數 URL。

    aws lambda add-permission \ --function-name my-url-function \ --action lambda:InvokeFunctionUrl \ --principal "*" \ --function-url-auth-type "NONE" \ --statement-id url
  5. 使用 create-function-url-config 命令為函數建立 URL 端點。

    aws lambda create-function-url-config \ --function-name my-url-function \ --auth-type NONE

測試函數 URL 端點

使用 HTTP 用戶端 (例如 curl 或 Postman) 呼叫函數 URL 端點,藉以呼叫 Lambda 函數。

curl 'https://abcdefg.lambda-url.us-east-1.on.aws/' \ -H 'Content-Type: application/json' \ -d '{"num1": "10", "num2": "10"}'

您應該會看到下列輸出:

The product of 10 and 10 is 100

使用函數 URL(CloudFormation)創建一個 Lambda 函數

您也可以使用該類型建立具有函數 URL 端點的 Lambda 函 AWS CloudFormation 數AWS::Lambda::Url

Resources: MyUrlFunction: Type: AWS::Lambda::Function Properties: Handler: index.handler Runtime: nodejs18.x Role: arn:aws:iam::123456789012:role/lambda-url-role Code: ZipFile: | exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; }; Description: Create a function with a URL. MyUrlFunctionPermissions: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref MyUrlFunction Action: lambda:InvokeFunctionUrl Principal: "*" FunctionUrlAuthType: NONE MyFunctionUrl: Type: AWS::Lambda::Url Properties: TargetFunctionArn: !Ref MyUrlFunction AuthType: NONE

建立具有函數 URL 的 Lambda 函數 (AWS SAM)

您也可以使用 AWS Serverless Application Model () 建立使用函數 URL 設定的 Lambda 函AWS SAM數。

ProductFunction: Type: AWS::Serverless::Function Properties: CodeUri: function/. Handler: index.handler Runtime: nodejs18.x AutoPublishAlias: live FunctionUrlConfig: AuthType: NONE

清除您的資源

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

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

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

  3. 選擇 刪除

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

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

  2. 選擇您建立的函數。

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

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