建立第一個 Lambda 函數 - AWS Lambda

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

建立第一個 Lambda 函數

若要開始使用 Lambda,請使用 Lambda 主控台來建立函數。您可以在幾分鐘內建立和部署函數,並在主控台中加以測試。

進行教學課程時,您會學到一些基本 Lambda 概念,例如如何使用 Lambda「事件物件」,將引數傳遞給函數。您也將了解如何從函數傳回日誌輸出,以及如何在 CloudWatch 日誌中檢視函數的叫用日誌。

為了簡化,您可以使用 Python 或 Node.js 執行期建立函數。您可以使用這些轉譯語言,直接在主控台的內建程式碼編輯器中編輯函數程式碼。使用 Java 和 C# 等編譯語言,您必須在本機建置機器上建立部署套件,並將其上傳至 Lambda。若要了解如何使用其他執行期,將函數部署至 Lambda,請參閱其他資源和後續步驟一節中的連結。

提示

若要了解如何建置無伺服器解決方案,請參閱無伺服器開發人員指南

必要條件

如果您沒有 AWS 帳戶,請完成下列步驟以建立 。

若要註冊 AWS 帳戶
  1. 開啟https://portal.aws.amazon.com/billing/註冊

  2. 請遵循線上指示進行。

    部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。

    當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時前往 https://aws.amazon.com/ 並選擇我的帳戶 來檢視目前的帳戶活動和管理您的帳戶

註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center並建立管理使用者,以免將根使用者用於日常任務。

保護您的 AWS 帳戶根使用者
  1. 選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console身分登入 。在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 為您的根使用者開啟多重要素驗證 (MFA)。

    如需指示,請參閱 IAM 使用者指南 中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬MFA裝置

建立具有管理存取權的使用者
  1. 啟用IAM身分中心。

    如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,將管理存取權授予使用者。

    如需使用 IAM Identity Center 目錄 作為身分來源的教學課程,請參閱 AWS IAM Identity Center 使用者指南 中的使用 設定使用者存取權 IAM Identity Center 目錄

以具有管理存取權的使用者身分登入
  • 若要使用 IAM Identity Center 使用者登入,請使用您建立 IAM Identity Center 使用者時URL傳送到您電子郵件地址的登入。

    如需使用 IAM Identity Center 使用者登入的協助,請參閱 AWS 登入 使用者指南 中的登入 AWS 存取入口網站

指派存取權給其他使用者
  1. 在 IAM Identity Center 中,建立遵循套用最低權限許可最佳實務的許可集。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集

  2. 將使用者指派至群組,然後對該群組指派單一登入存取權。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組

使用主控台建立一個 Lambda 函數

在此範例中,您的函數會取得一個JSON物件,其中包含兩個標記為 "length"和 的整數值"width"。函數將這些值乘以計算區域,並以JSON字串傳回。

您的函數也會列印計算的區域,以及其 CloudWatch 日誌群組的名稱。在教學課程稍後,您將學習使用 CloudWatch Logs 來檢視函數調用的記錄。

若要建立函數,請先使用主控台,建立基本 Hello world 函數。在下一步中,您會新增自己的函數程式碼。

若要使用主控台建立 Hello world Lambda 函數
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇 建立函數

  3. 選取從頭開始撰寫

  4. 基本資訊窗格中,為函數名稱輸入 myLambdaFunction

  5. 針對執行期,選擇 Node.js 20.xPython 3.12

  6. 架構設定為 x86_64,然後選擇建立函數

Lambda 會建立函數,傳回 Hello from Lambda! 訊息。Lambda 也會為函數建立「執行角色」執行角色是 AWS Identity and Access Management (IAM) 角色,授予 Lambda 函數存取 AWS 服務 和資源的許可。針對您的函數,Lambda 建立的角色會授予基本許可來寫入 CloudWatch Logs。

您現在要使用主控台的內建程式碼編輯器,將 Lambda 建立的 Hello world 程式碼,替換為您自己的函數程式碼。

Node.js
若要在主控台中修改程式碼
  1. 選擇 程式碼 標籤。

    在主控台的內建程式碼編輯器中,您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 index.mjs 標籤,請在檔案總管中選取 index.mjs,如下圖所示。

    顯示主控台程式碼編輯器和檔案總管中 index.mjs 檔案的圖表
  2. 將以下程式碼貼到 index.mjs 標籤中,替換 Lambda 建立的程式碼。

    export const handler = async (event, context) => { const length = event.length; const width = event.width; let area = calculateArea(length, width); console.log(`The area is ${area}`); console.log('CloudWatch log group: ', context.logGroupName); let data = { "area": area, }; return JSON.stringify(data); function calculateArea(length, width) { return length * width; } };
  3. 選取部署以更新您函數的程式碼。Lambda 部署變更後,主控台會顯示橫幅,讓您知道已成功更新函數。

了解函數程式碼

在進行下一步之前,讓我們花一點時間看看函數程式碼,並了解一些重要 Lambda 概念。

  • Lambda 處理常式:

    您的 Lambda 函數包含 Node.js 函數 handler。以 Node.js 編寫的 Lambda 函數可以包含多個 Node.js 函數,但「handler」函數始終是程式碼的進入點。當有人調用您的函數時,Lambda 會執行此方法。

    使用主控台建立 Hello world 函數時,Lambda 會自動將函數的處理常式方法名稱設定為 handler。請勿編輯此 Node.js 函數的名稱。如果這麼做,調用函數時,Lambda 將無法執行您的程式碼。

    若要進一步了解以 Node.js 編寫的 Lambda 處理常式,請參閱 在 Node.js 中 Lambda 義函數處理常式

  • Lambda 事件物件:

    handler 函數會使用兩個引數,eventcontext。Lambda 中的事件是JSON格式化文件,其中包含要函數處理的資料。

    如果您的函數被另一個 叫用 AWS 服務,則事件物件包含導致叫用的事件相關資訊。舉例來說,如果 Amazon Simple Storage Service (Amazon S3) 儲存貯體在上傳物件時調用您的函數,該事件會包含 Amazon S3 儲存貯體的名稱和物件索引鍵。

    在此範例中,您將輸入具有兩個鍵值對的JSON格式化文件,在主控台中建立事件。

  • Lambda 內容物件:

    您函數使用的第二個引數為 context。Lambda 會自動將「內容物件」傳遞至您的函數。內容物件包含有關函數調用及執行環境的資訊。

    您可以使用內容物件,基於監控目的,輸出函數調用的資訊。在此範例中,您的函數會使用 logGroupName 參數來輸出其 CloudWatch 日誌群組的名稱。

    若要進一步了解以 Node.js 編寫的 Lambda 內容物件,請參閱 使用 Lambda 上下文對象檢索 Node.js 函數信息

  • 在 Lambda 中記錄:

    您可以透過 Node.js,使用 console.logconsole.error 等主控台方法,將資訊傳送到函數的日誌。範例程式碼使用console.log陳述式輸出計算的區域和函數 CloudWatch Logs 群組的名稱。您也可以使用任何寫入 stdoutstderr 的記錄程式庫。

    如需進一步了解,請參閱 記錄和監控 Node.js Lambda 函數。若要了解如何在其他執行期中記錄,請參閱您有興趣之執行期的「建置方式」頁面。

Python
若要在主控台中修改程式碼
  1. 選擇 程式碼 標籤。

    在主控台的內建程式碼編輯器中,您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 lambda_function.py,請在檔案總管中選取 lambda_function.py,如下圖所示。

    顯示主控台程式碼編輯器和檔案總管中 lambda_function.py 檔案的圖表
  2. 將以下程式碼貼到 lambda_function.py 標籤中,替換 Lambda 建立的程式碼。

    import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): # Get the length and width parameters from the event object. The # runtime converts the event object to a Python dictionary length = event['length'] width = event['width'] area = calculate_area(length, width) print(f"The area is {area}") logger.info(f"CloudWatch logs group: {context.log_group_name}") # return the calculated area as a JSON string data = {"area": area} return json.dumps(data) def calculate_area(length, width): return length*width
  3. 選取部署以更新您函數的程式碼。Lambda 部署變更後,主控台會顯示橫幅,讓您知道已成功更新函數。

了解函數程式碼

在進行下一步之前,讓我們花一點時間看看函數程式碼,並了解一些重要 Lambda 概念。

  • Lambda 處理常式:

    Lambda 函數包含 Python 函數 lambda_handler。以 Python 編寫的 Lambda 函數可以包含多個 Python 函數,但「handler」函數始終是程式碼的進入點。當有人調用您的函數時,Lambda 會執行此方法。

    使用主控台建立 Hello world 函數時,Lambda 會自動將函數的處理常式方法名稱設定為 lambda_handler。請勿編輯此 Python 函數的名稱。如果這麼做,調用函數時,Lambda 將無法執行您的程式碼。

    若要進一步了解以 Python 編寫的 Lambda 處理常式,請參閱在 Python 中 Lambda 義函數處理程序

  • Lambda 事件物件:

    lambda_handler 函數會使用兩個引數,eventcontext。Lambda 中的事件是JSON格式化文件,其中包含要函數處理的資料。

    如果您的函數被另一個 叫用 AWS 服務,則事件物件包含導致叫用的事件相關資訊。舉例來說,如果 Amazon Simple Storage Service (Amazon S3) 儲存貯體在上傳物件時調用您的函數,該事件會包含 Amazon S3 儲存貯體的名稱和物件索引鍵。

    在此範例中,您將輸入具有兩個鍵值對的JSON格式化文件,在主控台中建立事件。

  • Lambda 內容物件:

    您函數使用的第二個引數為 context。Lambda 會自動將「內容物件」傳遞至您的函數。內容物件包含有關函數調用及執行環境的資訊。

    您可以使用內容物件,基於監控目的,輸出函數調用的資訊。在此範例中,您的函數會使用 log_group_name 參數來輸出其 CloudWatch 日誌群組的名稱。

    若要進一步了解以 Python 編寫的 Lambda 內容物件,請參閱使用 Lambda 內容物件擷取 Python 函數資訊

  • 在 Lambda 中記錄:

    透過 Python,您可以使用 print 陳述式或 Python 記錄程式庫,將資訊傳送到函數的日誌。為了說明擷取內容的差異,範例程式碼會使用這兩種方法。在生產應用程式中,建議您使用記錄程式庫。

    如需進一步了解,請參閱 記錄和監控 Python Lambda 函數。若要了解如何在其他執行期中記錄,請參閱您有興趣之執行期的「建置方式」頁面。

使用主控台調用 Lambda 函數

若要使用 Lambda 主控台調用函數,請先建立要傳送至函數的測試事件。事件是格式化文件,其中包含兩個具有 金鑰"length"和 JSON 的索引鍵值對"width"

若要建立測試事件
  1. 程式碼來源窗格中選擇測試

  2. 選取建立新事件

  3. 事件名稱輸入 myTestEvent

  4. 事件JSON面板中,透過貼上下列內容來取代預設值:

    { "length": 6, "width": 7 }
  5. 選擇 Save (儲存)。

您現在測試您的函數,並使用 Lambda 主控台和 CloudWatch 日誌來檢視函數調用的記錄。

若要在主控台中測試您的函數並檢視調用記錄
  • 程式碼來源窗格中選擇測試。當您的函數執行完時,您會看到回應和函數日誌顯示在執行結果標籤。您應該會看到類似下列的結果。

    Node.js
    Test Event Name myTestEvent Response "{\"area\":42}" Function Logs START RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a Version: $LATEST 2023-08-31T23:39:45.313Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO The area is 42 2023-08-31T23:39:45.331Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO CloudWatch log group: /aws/lambda/myLambdaFunction END RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a REPORT RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a Duration: 20.67 ms Billed Duration: 21 ms Memory Size: 128 MB Max Memory Used: 66 MB Init Duration: 163.87 ms Request ID 5c012b0a-18f7-4805-b2f6-40912935034a
    Python
    Test Event Name myTestEvent Response "{\"area\": 42}" Function Logs START RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b Version: $LATEST The area is 42 [INFO] 2023-08-31T23:43:26.428Z 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b CloudWatch logs group: /aws/lambda/myLambdaFunction END RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b REPORT RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b Duration: 1.42 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 39 MB Init Duration: 123.74 ms Request ID 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b

在此範例中,您使用主控台的測試功能調用程式碼。這表示您可以直接在主控台中查看函數的執行結果。在主控台外叫用函數時,您需要使用 CloudWatch Logs。

在 CloudWatch 日誌中檢視函數的調用記錄
  1. 開啟 CloudWatch 主控台的日誌群組頁面。

  2. 為函數 (/aws/lambda/myLambdaFunction) 選擇日誌群組名稱。這是您的函數列印至主控台的日誌群組名稱。

  3. 日誌串流標籤上,為函數調用選擇日誌串流。

    您應該會看到類似下列的輸出:

    Node.js
    INIT_START Runtime Version: nodejs:20.v13 Runtime Version ARN: arn:aws:lambda:us-west-2::runtime:e3aaabf6b92ef8755eaae2f4bfdcb7eb8c4536a5e044900570a42bdba7b869d9 START RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 Version: $LATEST 2023-08-23T22:04:15.809Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO The area is 42 2023-08-23T22:04:15.810Z aba6c0fc-cf99-49d7-a77d-26d805dacd20 INFO CloudWatch log group: /aws/lambda/myLambdaFunction END RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 REPORT RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 Duration: 17.77 ms Billed Duration: 18 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 178.85 ms
    Python
    INIT_START Runtime Version: python:3.12.v16 Runtime Version ARN: arn:aws:lambda:us-west-2::runtime:ca202755c87b9ec2b58856efb7374b4f7b655a0ea3deb1d5acc9aee9e297b072 START RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e Version: $LATEST The area is 42 [INFO] 2023-09-01T00:05:22.464Z 9315ab6b-354a-486e-884a-2fb2972b7d84 CloudWatch logs group: /aws/lambda/myLambdaFunction END RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e REPORT RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e Duration: 1.15 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 40 MB

清除

使用完範例函數時,請加以刪除。您還可以刪除存放函數日誌的日誌群組,以及主控台建立的執行角色

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

  2. 選擇一個函數。

  3. 選擇 動作刪除

  4. 刪除函數 對話方塊中輸入 delete,然後選擇 刪除

刪除日誌群組
  1. 開啟主控台的 CloudWatch日誌群組頁面

  2. 選取函數的日誌群組 (/aws/lambda/my-function)。

  3. 選擇 動作刪除日誌群組

  4. 刪除日誌群組 對話方塊中,選擇 刪除

刪除執行角色
  1. 開啟 AWS Identity and Access Management (IAM) 主控台的角色頁面

  2. 選取函數的執行角色,(例如 myLambdaFunction-role-31exxmpl)。

  3. 選擇 刪除

  4. 刪除角色 對話方塊中輸入角色名稱,然後選擇 刪除

您可以使用 和 () 自動化建立和清除函數、日誌群組 AWS CloudFormation 和 AWS Command Line Interface 角色AWS CLI。

其他資源和後續步驟

既然您已使用主控台建立並測試簡單的 Lambda 函數,接著請採取下列後續步驟: