開始使用 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/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 身分中心使用者登入,請使用建立 IAM 身分中心使用者時傳送至您電子郵件地址的登入 URL。

    如需有關如何使用 IAM Identity Center 使用者登入的說明,請參閱《AWS 登入 使用者指南》中的登入 AWS存取入口網站

使用主控台建立一個 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 記錄的基本權限。

您現在要使用主控台的內建程式碼編輯器,將 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 處理常式,請參閱 AWS Lambda Node.js 中的函數處理常式

  • Lambda 事件物件:

    handler 函數會使用兩個引數,eventcontext。Lambda 中的「事件」是一種 JSON 格式的文件,它包含供函數處理的資料。

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

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

  • Lambda 內容物件:

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

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

    若要進一步了解以 Node.js 編寫的 Lambda 內容物件,請參閱 Node.js 中的 AWS Lambda 內容物件

  • 在 Lambda 中記錄:

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

    如需進一步了解,請參閱 Node.js 中的 AWS 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 內容物件,請參閱Python 中的 AWS Lambda內容物件

  • 在 Lambda 中記錄:

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

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

使用主控台調用 Lambda 函數

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

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

  2. 選取建立新事件

  3. 事件名稱輸入 myTestEvent

  4. 事件 JSON 面板中,貼上下列項目以替換預設值:

    { "length": 6, "width": 7 }
  5. 選擇儲存

現在,您可以測試函數,並使用 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 日誌。

在日誌中查看函數的調用記錄 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 主控台的 Log groups (日誌群組)頁面。

  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 函數,接著請採取下列後續步驟: