建立第一個 Lambda 函數 - AWS Lambda

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

建立第一個 Lambda 函數

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

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

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

提示

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

必要條件

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

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

  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 Identity Center。

    如需指示,請參閱《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 Lambda 函數
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇建立函數

  3. 選取從頭開始撰寫

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

  5. 針對執行時期,選擇 Node.js 22.xPython 3.13

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

除了可傳回 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. DEPLOY 區段中,選擇部署以更新函數的程式碼:

    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) 儲存貯體時調用函數,則該事件會包含儲存貯體的名稱和物件索引鍵。

    在此範例中,您會進入有兩個索引鍵/值組的 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. DEPLOY 區段中,選擇部署以更新函數的程式碼:

    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) 儲存貯體時調用函數,則該事件會包含儲存貯體的名稱和物件索引鍵。

    在此範例中,您會進入有兩個索引鍵/值組的 JSON 格式文件,在主控台中建立事件。

  • Lambda 內容物件:

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

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

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

  • 在 Lambda 中記錄:

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

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

使用主控台程式碼編輯器調用 Lambda 函數

若要使用 Lambda 主控台程式碼編輯器來調用函數,請先建立要傳送至函數的測試事件。事件是一種 JSON 格式文件,其中包含兩個索引鍵/值組,索引鍵 "length""width"

若要建立測試事件
  1. 在主控台程式碼編輯器的 TEST EVENTS 區段中,選擇建立測試事件

    在 Lambda 主控台程式碼編輯器中建立測試事件按鈕
  2. Event Name (事件名稱) 輸入 myTestEvent

  3. 事件 JSON 區段中,將預設 JSON 取代為下列項目:

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

若要測試函數並檢視調用記錄

在主控台程式碼編輯器的 TEST EVENTS 區段中,選擇測試事件旁邊的執行圖示:

Lambda 主控台程式碼編輯器中的「執行測試事件」按鈕

當函數完成執行時,回應和函數日誌會顯示在 OUTPUT 索引標籤中。您應該會看到類似下列的結果:

Node.js
Status: Succeeded Test Event Name: myTestEvent Response "{\"area\":42}" Function Logs START RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a Version: $LATEST 2024-08-31T23:39:45.313Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO The area is 42 2024-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
Status: Succeeded Test Event Name: myTestEvent Response "{\"area\": 42}" Function Logs START RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b Version: $LATEST The area is 42 [INFO] 2024-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

當您在 Lambda 主控台之外調用函數時,必須使用 CloudWatch Logs 來檢視函數的執行結果。

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

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

  3. 向下捲動並選擇要查看的函數調用日誌串流

    Lambda 函數的日誌串流清單。

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

    Node.js
    INIT_START Runtime Version: nodejs:22.v13 Runtime Version ARN: arn:aws:lambda:us-west-2::runtime:e3aaabf6b92ef8755eaae2f4bfdcb7eb8c4536a5e044900570a42bdba7b869d9 START RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 Version: $LATEST 2024-08-23T22:04:15.809Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO The area is 42 2024-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.13.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] 2024-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. 選擇 Actions (動作)、Delete (刪除)。

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

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

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

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

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

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

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

  3. 選擇 刪除

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

其他資源和後續步驟

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