

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

# 建立第一個 Lambda 函數
<a name="getting-started"></a>

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

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

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

**提示**  
若要了解如何建置**無伺服器解決方案**，請參閱[無伺服器開發人員指南](https://docs.aws.amazon.com/serverless/latest/devguide/)。

## 先決條件
<a name="getting-started-prerequisites"></a>

### 註冊 AWS 帳戶
<a name="sign-up-for-aws"></a>

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

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

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

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

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

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

### 建立具有管理存取權的使用者
<a name="create-an-admin"></a>

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

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

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

   如需使用 IAM Identity Center 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

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

  如需使用 IAM Identity Center 使用者登入的說明，請參閱*AWS 登入 《 使用者指南*》中的[登入 AWS 存取入口網站](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**指派存取權給其他使用者**

1. 在 IAM Identity Center 中，建立一個許可集來遵循套用最低權限的最佳實務。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

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

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

## 使用主控台建立一個 Lambda 函數
<a name="getting-started-create-function"></a>

在此範例中，您的函數會使用 JSON 物件，其中包含兩個標示 `"length"` 和 `"width"` 的整數值。函數會將這些值相乘以計算區域，並以 JSON 字串傳回。

您的函數也會列印計算出的區域，以及其 CloudWatch 日誌群組的名稱。稍後在本教學課程中，您會學到如何使用 [CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 查看函數調用的記錄。

**若要使用主控台建立 Hello world Lambda 函數**

1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇**建立函數**。

1. 選取**從頭開始撰寫**。

1. 在**基本資訊**窗格中，為**函數名稱**輸入 `myLambdaFunction`。

1. 針對**執行期**，選擇 **Node.js 24** 或 **Python 3.14。**

1. 將**架構**設定為 **x86\$164**，然後選擇**建立函數**。

除了可傳回 `Hello from Lambda!` 訊息的簡單函數之外，Lambda 還可為函數建立[執行角色](lambda-intro-execution-role.md)。執行角色是授予 Lambda 函數存取 AWS 服務 和資源許可的 AWS Identity and Access Management (IAM) 角色。對於您的函數，Lambda 建立的角色會授予寫入 CloudWatch Logs 的基本許可。

使用主控台的內建程式碼編輯器，將 Lambda 建立的 Hello world 程式碼取代為您自己的函數程式碼。

------
#### [ Node.js ]

**若要在主控台中修改程式碼**

1. 選擇 **程式碼** 標籤。

   在主控台的內建程式碼編輯器中，您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 **index.mjs** 標籤，請在檔案總管中選取 **index.mjs**，如下圖所示。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/nodejs_code_editor.png)

1. 將以下程式碼貼到 **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;
     }
   };
   ```

1. 在 **DEPLOY** 區段中，選擇**部署**以更新函數的程式碼：  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**了解函數程式碼**  
在進行下一步之前，讓我們花一點時間看看函數程式碼，並了解一些重要 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 函數處理常式](nodejs-handler.md)。
+ Lambda 事件物件：

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

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

  在此範例中，您會進入有兩個索引鍵/值組的 JSON 格式文件，在主控台中建立事件。
+ Lambda 內容物件：

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

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

  若要進一步了解以 Node.js 編寫的 Lambda 內容物件，請參閱 [使用 Lambda 內容物件擷取 Node.js 函數資訊](nodejs-context.md)。
+ 在 Lambda 中記錄：

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

  如需詳細資訊，請參閱 [記錄和監控 Node.js Lambda 函數](nodejs-logging.md)。若要了解如何在其他執行期中記錄，請參閱您有興趣之執行期的「建置方式」頁面。

------
#### [ Python ]

**若要在主控台中修改程式碼**

1. 選擇 **程式碼** 標籤。

   在主控台的內建程式碼編輯器中，您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 **lambda\$1function.py**，請在檔案總管中選取 **lambda\$1function.py**，如下圖所示。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/python_code_editor.png)

1. 將以下程式碼貼到 **lambda\$1function.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
   ```

1. 在 **DEPLOY** 區段中，選擇**部署**以更新函數的程式碼：  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**了解函數程式碼**  
在進行下一步之前，讓我們花一點時間看看函數程式碼，並了解一些重要 Lambda 概念。
+ Lambda 處理常式：

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

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

  若要進一步了解以 Python 編寫的 Lambda 處理常式，請參閱[以 Python 定義 Lambda 函數處理常式](python-handler.md)。
+ Lambda 事件物件：

  `lambda_handler` 函數會使用兩個引數，`event` 和 `context`。Lambda 中的「事件」**是一種 JSON 格式的文件，它包含供函數處理的資料。

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

  在此範例中，您會進入有兩個索引鍵/值組的 JSON 格式文件，在主控台中建立事件。
+ Lambda 內容物件：

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

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

  若要進一步了解以 Python 編寫的 Lambda 內容物件，請參閱[使用 Lambda 內容物件擷取 Python 函數資訊](python-context.md)。
+ 在 Lambda 中記錄：

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

  如需詳細資訊，請參閱 [記錄和監控 Python Lambda 函數](python-logging.md)。若要了解如何在其他執行期中記錄，請參閱您有興趣之執行期的「建置方式」頁面。

------

## 使用主控台程式碼編輯器調用 Lambda 函數
<a name="get-started-invoke-manually"></a>

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

**若要建立測試事件**

1. 在主控台程式碼編輯器的 **TEST EVENTS** 區段中，選擇**建立測試事件**。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/test-event.png)

1. **Event Name (事件名稱)** 輸入 **myTestEvent**。

1. 在**事件 JSON** 區段中，將預設 JSON 取代為下列項目：

   ```
   {
     "length": 6,
     "width": 7
   }
   ```

1. 選擇**儲存**。

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

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

![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/getting-started-tutorial/run-test-event.png)


當函數完成執行時，回應和函數日誌會顯示在 **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 主控台的 [日誌群組](https://console.aws.amazon.com/cloudwatch/home#logs:) 頁面。

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

1. 向下捲動並選擇要查看的函數調用**日誌串流**。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/log-stream.png)

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

------
#### [ 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
   ```

------

## 清除
<a name="gettingstarted-cleanup"></a>

使用完範例函數時，請加以刪除。您還可以刪除存放函數日誌的日誌群組，以及主控台建立的[執行角色](lambda-intro-execution-role.md)。

**若要刪除 Lambda 函數**

1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇您建立的函數。

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

1. 在文字輸入欄位中輸入 **confirm**，然後選擇**刪除**。

**刪除日誌群組**

1. 開啟 CloudWatch 主控台的 [日誌群組](https://console.aws.amazon.com/cloudwatch/home#logs:) 頁面。

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

1. 選擇 **動作** 、**刪除日誌群組** 。

1. 在 **刪除日誌群組** 對話方塊中，選擇 **刪除** 。

**刪除執行角色**

1. 開啟 AWS Identity and Access Management (IAM) 主控台的角色[頁面](https://console.aws.amazon.com/iam/home?#/roles)。

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

1. 選擇 **刪除**。

1. 在**刪除角色**對話方塊中輸入角色名稱，然後選擇**刪除**。

## 其他資源和後續步驟
<a name="getting-started-more-resources"></a>

既然您已使用主控台建立並測試簡單的 Lambda 函數，接著請採取下列後續步驟：
+ 了解如何將相依項新增至函數，並使用 .zip 部署套件加以部署。從以下連結中選擇您偏好的語言。

------
#### [ Node.js ]

  [使用 .zip 封存檔部署 Node.js Lambda 函數](nodejs-package.md)

------
#### [ Typescript ]

  [使用 .zip 檔案封存，在 Lambda 中部署轉換的 TypeScript 程式碼](typescript-package.md)

------
#### [ Python ]

  [使用 .zip 封存檔部署 Python Lambda 函數](python-package.md)

------
#### [ Ruby ]

  [使用 .zip 封存檔部署 Ruby Lambda 函數](ruby-package.md)

------
#### [ Java ]

  [使用 .zip 或 JAR 封存檔部署 Java Lambda 函數](java-package.md)

------
#### [ Go ]

  [使用 .zip 封存檔部署 Go Lambda 函數](golang-package.md)

------
#### [ C\$1 ]

  [使用 .zip 封存檔建置和部署 C＃ Lambda 函數](csharp-package.md)

------
+ 若要了解如何使用另一個函數叫用 Lambda 函數 AWS 服務，請參閱 [教學課程：使用 Amazon S3 觸發條件調用 Lambda 函數](with-s3-example.md)。
+ 選擇下列任一教學課程，獲得搭配使用 Lambda 與其他 AWS 服務的更複雜範例。
  + [教學課程：搭配使用 Lambda 與 API Gateway](services-apigateway-tutorial.md)：建立用於調用 Lambda 函數的 Amazon API Gateway REST API。
  + [使用 Lambda 函數存取 Amazon RDS 資料庫](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-lambda-tutorial.html)：使用 Lambda 函數，透過 RDS 代理將資料寫入 Amazon Relational Database Service (Amazon RDS) 資料庫。
  + [使用 Amazon S3 觸發條件建立縮圖影像](with-s3-tutorial.md)：每次將影像檔案上傳到 Amazon S3 儲存貯體時，使用 Lambda 函數建立縮圖。