文章詳情

AWS國際實名帳號 AWS Lambda 入門指南:建構事件驅動的無伺服器應用

亞馬遜雲AWS2026-10-21 16:21:48雲計算

# AWS Lambda 入門指南:建構事件驅動的無伺服器應用

在搜尋這個主題的使用者,多半不是想了解抽象概念,而是想盡快把一個可運行的 Lambda 函數建立起來,接上事件來源,成功觸發,並處理執行失敗、權限不足、逾時、日誌找不到等常見問題。

這篇文章會直接從實作出發,帶你完成一個可用的 AWS Lambda 應用,並延伸到 API Gateway、S3 事件觸發、日誌排查、版本管理與部署注意事項。

---

## 一、使用者真正要解決的問題是什麼

當使用者搜尋「AWS Lambda 入門指南:建構事件驅動的無伺服器應用」時,通常目標是以下幾種:

1. **快速建立第一個 Lambda 函數**
2. **讓函數被事件觸發,而不是手動執行**
3. **把 Lambda 接到 HTTP API、檔案上傳事件或排程任務**
4. **排查執行失敗、沒有權限、超時、日誌沒有輸出等問題**
5. **理解部署與後續維護流程,例如版本、別名、環境變數與監控**

AWS國際實名帳號 如果你目前卡在「函數建立成功,但就是觸發不起來」或「執行有回應,但實際上報錯」,這篇會比較對應你的需求。

---

## 二、這篇教程會操作哪些 AWS 產品

本篇會實際用到以下服務:

- **AWS Lambda**:建立與執行函數
- **IAM**:配置 Lambda 執行角色與權限
- **CloudWatch Logs**:查看函數執行日誌
- **API Gateway**:把 Lambda 封裝成可透過 HTTP 呼叫的 API
- **Amazon S3**:示範以檔案上傳事件觸發 Lambda
- **EventBridge**:示範定時觸發 Lambda

如果你的目標是做 Webhook、圖片處理、自動化任務、定時同步資料、簡單 API,這套流程可以直接套用。

---

## 三、開始前的準備

在操作前,請先確認以下幾點:

- 你有 AWS 帳號
- 你已能登入 AWS Console
- 你使用的帳號具有以下權限:
- 建立 Lambda
- 建立 IAM Role
- 建立 CloudWatch Logs
- 建立 API Gateway
- 設定 S3 事件通知
- 你已選定 Region,例如:`ap-northeast-1`、`ap-southeast-1`

### Region 選擇建議

Region 選錯,會導致很多新手常見問題,例如:

- 找不到剛剛建立的 Lambda
- API Gateway 無法選到函數
- S3 事件無法正確綁定
- CloudWatch Logs 查不到日誌

**建議做法:**

- 開發測試環境固定使用同一個 Region
- Lambda、API Gateway、CloudWatch、EventBridge 儘量放在同區域
- 若要讓 S3 觸發 Lambda,也要注意區域搭配

---

## 四、建立第一個 Lambda 函數

這裡先用 AWS Console 建立一個最基本的函數,確保整體流程通順。

### 步驟 1:進入 Lambda 控制台

1. 登入 AWS Console
2. 搜尋並進入 **Lambda**
3. 點擊 **Create function**

### 步驟 2:選擇建立方式

通常選擇:

AWS國際實名帳號 - **Author from scratch**

然後填寫:

- **Function name**:例如 `hello-lambda-demo`
- **Runtime**:建議先選 `Python 3.12` 或 `Node.js 20.x`
- **Architecture**:
- `x86_64`:相容性較高
- `arm64`:成本通常較低,但要確認依賴套件支援

### 步驟 3:設定執行角色

在 **Permissions** 區塊:

- 選擇 **Create a new role with basic Lambda permissions**

AWS國際實名帳號 這會自動建立含有 CloudWatch Logs 基本寫入權限的 IAM Role。

如果你後續要存取 S3、RDS、DynamoDB 或其他服務,還需要額外補權限,不然函數可以執行,但調用 AWS 服務時會報 `AccessDeniedException`。

AWS國際實名帳號 ### 步驟 4:建立函數

點擊 **Create function**。

建立完成後,你會進入函數詳情頁。

---

## 五、編寫並測試第一段程式碼

### Python 範例

將預設程式碼替換為:

```python
def lambda_handler(event, context):
print("收到事件:", event)
return {
"statusCode": 200,
"body": "Lambda 執行成功"
}
```

點擊 **Deploy** 儲存。

### 建立測試事件

AWS國際實名帳號 1. 點擊 **Test**
2. 建立新測試事件
3. Event name 可填:`test-event`
4. Event JSON:

```json
{
"source": "manual-test",
"message": "hello lambda"
}
```

5. 點擊 **Test** 執行

AWS國際實名帳號 如果成功,你會看到:

- Execution result: succeeded
- 回傳 `statusCode: 200`
- 可以在日誌中看到 `收到事件`

---

## 六、查看 CloudWatch Logs 日誌

很多人以為函數沒執行,實際上只是沒找到日誌。

### 查看方式

1. 進入 Lambda 函數頁
2. 切換到 **Monitor**
3. 點擊 **View CloudWatch logs**
4. 進入對應 Log Group,例如:
- `/aws/lambda/hello-lambda-demo`

### 你應該重點看什麼

- `START RequestId`
- `END RequestId`
- `REPORT RequestId`
- 你程式中 `print()` 輸出的內容
- 錯誤堆疊,例如:
- `Task timed out`
- `AccessDeniedException`
- `Unable to import module`
- `Runtime.ImportModuleError`

### 常見問題 1:沒有日誌

可能原因:

1. Lambda 根本沒被觸發
2. 執行角色沒有 CloudWatch Logs 權限
3. 你看錯 Region
4. 你在看錯 Log Group

AWS國際實名帳號 ### 修正方式

確認 Lambda Role 是否附加以下權限策略:

- `AWSLambdaBasicExecutionRole`

---

## 七、配置 Lambda 基本參數

AWS國際實名帳號 建立函數後,先不要急著接業務邏輯,應先把幾個核心參數調整好。

進入 Lambda 的 **Configuration** 區塊,可以設定:

### 1. Memory

Lambda 的 CPU 資源會隨記憶體配置提高。

常見建議:

- 輕量 API:`128MB` ~ `512MB`
- 圖片處理 / 資料轉換:`512MB` ~ `2048MB`
- 壓縮、ETL、依賴較多的程式:視實測提高

如果你發現執行很慢,不一定是程式邏輯問題,也可能是記憶體太低導致 CPU 不足。

### 2. Timeout

預設通常不夠用。

建議:

- 簡單 API:`3` ~ `10` 秒
- 檔案處理:`30` 秒以上
- 長時間任務:重新評估是否應拆分流程

若 CloudWatch 出現:

```text
Task timed out after 3.00 seconds
```

代表超時,需要延長 Timeout 或優化程式。

### 3. Ephemeral storage

若你會在 `/tmp` 存放暫存檔,例如下載 S3 檔案、解壓縮、影像處理,可以提高暫存空間。

### 4. Environment variables

常用於:

- API URL
- 第三方金鑰
- 資料表名稱
- 執行模式

不要把敏感金鑰硬編碼在程式內。若是敏感資訊,建議搭配 Secrets Manager 或 Parameter Store。

---

## 八、讓 Lambda 接收 HTTP 請求:串接 API Gateway

如果你要把 Lambda 當作後端 API,最常見做法是搭配 API Gateway。

### 建立流程

#### 步驟 1:進入 API Gateway

1. 開啟 AWS Console
2. 搜尋 **API Gateway**
3. 點選 **Create API**

#### 步驟 2:選擇 API 類型

建議新手先用:

- **HTTP API**

因為配置較簡單、成本通常較低。

#### 步驟 3:新增整合

- Integration target:選擇 **Lambda**
- 選取剛剛建立的函數 `hello-lambda-demo`

#### 步驟 4:建立路由

例如:

- Method:`GET`
- Path:`/hello`

#### 步驟 5:Deploy

建立 Stage,例如:

- `dev`

部署後會得到一個 URL,例如:

```text
https://abc123.execute-api.ap-northeast-1.amazonaws.com/hello
```

### 測試 API

使用瀏覽器或 curl:

```bash
curl https://abc123.execute-api.ap-northeast-1.amazonaws.com/hello
```

### 常見問題 2:呼叫 API 回 500

先看兩處:

1. API Gateway execution 結果
2. Lambda CloudWatch Logs

典型原因:

AWS國際實名帳號 - Lambda 回傳格式不符合 API Gateway 預期
- 函數內部報錯
- 權限未授予 API Gateway 呼叫 Lambda

### API Gateway 對應的 Lambda 回傳格式

若使用 Proxy Integration,通常建議回傳:

```python
def lambda_handler(event, context):
return {
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": "{\"message\": \"ok\"}"
}
```

如果 `body` 直接回傳物件而非字串,有些情況會報格式錯誤。

---

AWS國際實名帳號 ## 九、以 S3 檔案上傳事件觸發 Lambda

這是事件驅動場景中最常見的實作之一,例如:

- 上傳圖片後自動壓縮
- 上傳 CSV 後自動匯入資料
- 上傳文件後自動抽取內容

### 步驟 1:建立 S3 Bucket

1. 進入 **S3**
2. 點擊 **Create bucket**
3. 填寫 Bucket 名稱
4. 選擇與 Lambda 相同 Region
5. 完成建立

### 步驟 2:修改 Lambda 程式碼

```python
def lambda_handler(event, context):
for record in event.get('Records', []):
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
print(f"收到 S3 上傳事件: bucket={bucket}, key={key}")

return {
"statusCode": 200,
"body": "S3 event processed"
}
```

### 步驟 3:配置 S3 Event Notification

1. 進入 Bucket
2. 打開 **Properties**
3. 找到 **Event notifications**
4. 點擊 **Create event notification**
5. 設定:
- Event name:`upload-trigger`
- Event types:`PUT` 或 `All object create events`
- Destination:**Lambda function**
- 選擇你的 Lambda

### 常見問題 3:S3 無法新增事件通知

可能原因:

- Lambda 與 S3 不在相容的 Region
- Lambda 沒有被授權讓 S3 觸發
- Bucket 上已有衝突通知配置

### 排查重點

先確認:

- Lambda policy 中是否存在 S3 invoke 權限
- 事件篩選條件是否過窄,例如只匹配 `.jpg`
- 上傳路徑是否符合 Prefix / Suffix 規則

---

## 十、建立定時任務:使用 EventBridge 觸發 Lambda

如果你的需求是:

- 每 5 分鐘同步一次資料
- 每天凌晨執行備份檢查
- 定時清理暫存資料

可以使用 EventBridge。

### 配置步驟

1. 進入 **EventBridge**
2. 點選 **Rules**
3. 建立新規則
4. Rule type 選擇 **Schedule**
5. 設定頻率,例如:
- `rate(5 minutes)`
- 或 cron 表達式
6. Target 選擇 **Lambda function**
7. 選取你的函數
8. 建立規則

### 常見問題 4:定時任務沒有執行

排查順序:

1. 規則是否啟用
2. Region 是否一致
3. 目標函數是否正確
4. Lambda 是否有執行日誌
5. EventBridge 是否有失敗記錄

---

## 十一、IAM 權限配置:最容易卡住的地方

Lambda 能建立,不代表能正常調用其他 AWS 資源。

### 常見情境

#### 1. Lambda 讀寫 S3

需要對應的 IAM Policy,例如:

```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
```

#### 2. Lambda 寫 CloudWatch Logs

通常由:

- `AWSLambdaBasicExecutionRole`

提供。

#### 3. Lambda 存取 DynamoDB / SQS / SNS / RDS

都需要額外加上對應的 `Action` 與 `Resource`。

### 常見報錯

```text
AccessDeniedException
```

### 排查方法

- 確認 Lambda 使用的是哪個 Execution Role
- 檢查該 Role 綁定的 Policy
- 確認 Resource ARN 是否正確
- 確認是否有明確 Deny

---

## 十二、部署程式碼的幾種方式

### 方式 1:直接在 Console 編輯

適合:

- 測試
- 小型腳本
- Demo

不適合:

- 有多人協作
- 有依賴套件
- 有版本控管需求

### 方式 2:上傳 ZIP 套件

適合 Python、Node.js 等常見場景。

基本流程:

1. 在本地建立專案目錄
2. 安裝依賴到專案資料夾
3. 打包成 zip
4. 上傳到 Lambda

例如 Python:

```bash
mkdir lambda-app
cd lambda-app
pip install requests -t .
```

再把 `lambda_function.py` 放入目錄後打包:

```bash
zip -r function.zip .
```

在 Lambda 中選擇 **Upload from** → `.zip file`

### 常見問題 5:`Unable to import module`

典型原因:

- 依賴沒打進 zip
- 目錄層級錯誤
- 套件版本與 Runtime 不相容
- 本地打包環境與 Lambda 執行環境差異過大

### 修正建議

- 在與 Lambda 相近的 Linux 環境打包
- 確認 handler 路徑正確
- 確認 zip 解壓後,程式檔案在根目錄

---

## 十三、Lambda 常見故障排查清單

這一段最實用,建議直接收藏。

### 問題 1:函數建立成功,但測試失敗

檢查:

- Handler 名稱是否正確
- 程式語法是否錯誤
- Runtime 是否選對
- 測試事件 JSON 是否格式正確

### 問題 2:觸發器顯示已配置,但沒有執行

AWS國際實名帳號 檢查:

- 觸發來源與 Lambda 是否在正確 Region
- 事件條件是否匹配
- Lambda Resource-based policy 是否允許觸發來源調用
- CloudWatch 是否有任何執行記錄

### 問題 3:執行很慢

檢查:

- Memory 是否過低
- 是否存在冷啟動影響
- 是否每次都重新建立外部連線
- 是否在函數內做了不必要的大量初始化

### 問題 4:執行逾時

檢查:

- Timeout 是否太短
- 外部 API 是否回應慢
- 程式是否卡在網路請求
- 是否有死循環或大量資料未分批處理

### 問題 5:API Gateway 回 502 / 500

檢查:

- Lambda 回傳格式
- 程式是否丟出未捕獲例外
- Content-Type 是否設定正確
- 是否有 CORS 問題

### 問題 6:存取 AWS 其他服務失敗

檢查:

- IAM 權限是否足夠
- Resource ARN 是否對
- 服務是否在同區域
- 是否有 VPC 導致網路不可達

---

## 十四、版本與別名管理

當你的 Lambda 要進入正式環境,不建議每次直接覆蓋最新程式。

### 建議做法

使用:

- **Version**
- **Alias**

### 常見發布流程

1. 在 `$LATEST` 測試
2. 發布 Version,例如 `1`
3. 建立 Alias,例如:
- `dev`
- `test`
- `prod`
4. API Gateway 或其他觸發器綁定 Alias,而不是直接綁定 `$LATEST`

AWS國際實名帳號 這樣可以避免更新程式時直接影響線上流量。

---

## 十五、監控與最佳實踐

AWS國際實名帳號 ### 1. 監控指標

在 Lambda Monitor 頁面,重點看:

- Invocations
- Errors
- Duration
- Throttles
- Concurrent executions

### 2. 設定告警

建議在 CloudWatch 中對以下項目建立 Alarm:

- Errors > 0
- Duration 接近 Timeout
- Throttles 出現

### 3. 日誌輸出規範

建議每次執行至少記錄:

- request id
- 事件來源
- 主要參數
- 失敗原因
- 執行耗時

AWS國際實名帳號 ### 4. 不要把所有業務塞進一個函數

若單一 Lambda 同時處理:

- API
- 排程
- 檔案處理
- 資料同步

後續排查會很痛苦。應按功能拆分。

---

## 十六、一個最小可落地的實戰路線

如果你想在 30 分鐘內做出一個可用的事件驅動應用,建議按這個順序操作:

### 路線 A:做 HTTP API

1. 建立 Lambda
2. 撰寫簡單回傳 JSON 的程式
3. 測試函數
4. 查看 CloudWatch Logs
5. 建立 API Gateway HTTP API
6. 綁定 Lambda
7. 用 curl 測試
8. 修正回傳格式與錯誤處理

### 路線 B:做檔案上傳觸發

1. 建立 Lambda
2. 撰寫處理 S3 event 的程式
3. 建立 S3 Bucket
4. 配置 Event Notification
5. 上傳檔案測試
6. 到 CloudWatch Logs 驗證事件是否收到

### 路線 C:做排程任務

1. 建立 Lambda
2. 編寫定時執行邏輯
3. 用 Test 手動驗證
4. 建立 EventBridge Rule
5. 等待排程觸發
6. 查看日誌確認是否成功執行

---

## 十七、結語

AWS Lambda 的入門難點,通常不在建立函數本身,而在於後續幾個實際操作環節:

- Region 選擇不一致
- IAM 權限不完整
- 觸發器配置後沒有真正觸發
- CloudWatch 日誌不會看
- API Gateway 回傳格式不符合要求
- 套件部署與 Runtime 不相容

如果你是第一次實作,最穩的方式不是一開始就做複雜業務,而是先完成這條最短路徑:

**建立 Lambda → 手動測試 → 查看日誌 → 綁定一個觸發器 → 再逐步加上權限與業務邏輯**

照這個順序做,能大幅降低排查成本。

如果你接下來要進一步實作,我會建議下一步優先學這三個方向:

1. Lambda 連接 S3 與 DynamoDB
2. Lambda 搭配 API Gateway 建立 REST API
3. Lambda 的 VPC、併發與部署自動化

AWS國際實名帳號 這樣你就不只是「會建立 Lambda」,而是能把它真正用在日常開發與雲端自動化場景中。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系