本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立第一個 Lambda 函數
若要開始使用 Lambda,請使用 Lambda 主控台來建立函數。您可以在幾分鐘內建立和部署函數,並在主控台中加以測試。
進行教學課程時,您會學到一些基本 Lambda 概念,例如如何使用 Lambda「事件物件」,將引數傳遞給函數。您也會學到如何從函數傳回日誌輸出,以及如何在 Amazon CloudWatch Logs 中查看函數的調用日誌。
為了簡化,您可以使用 Python 或 Node.js 執行期建立函數。您可以使用這些轉譯語言,直接在主控台的內建程式碼編輯器中編輯函數程式碼。使用 Java 和 C# 等編譯語言,您必須在本機建置機器上建立部署套件,並將其上傳至 Lambda。若要了解如何使用其他執行期,將函數部署至 Lambda,請參閱其他資源和後續步驟一節中的連結。
必要條件
如果您沒有 AWS 帳戶,請完成下列步驟來建立一個 。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 https://aws.amazon.com/ 並選擇我的帳戶,以檢視您目前的帳戶活動並管理帳戶。
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者,以免將根使用者用於日常任務。
指派存取權給其他使用者
-
在 IAM Identity Center 中,建立一個許可集來遵循套用最低權限的最佳實務。
如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集。
-
將使用者指派至群組,然後對該群組指派單一登入存取權。
如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組。
使用主控台建立一個 Lambda 函數
在此範例中,您的函數會使用 JSON 物件,其中包含兩個標示 "length"
和 "width"
的整數值。函數會將這些值相乘以計算區域,並以 JSON 字串傳回。
您的函數也會列印計算出的區域,以及其 CloudWatch 日誌群組的名稱。稍後在本教學課程中,您會學到如何使用 CloudWatch Logs 查看函數調用的記錄。
若要使用主控台建立 Hello world Lambda 函數
開啟 Lambda 主控台中的 函數頁面。
-
選擇建立函數。
-
選取從頭開始撰寫。
-
在基本資訊窗格中,為函數名稱輸入 myLambdaFunction
。
-
針對執行時期,選擇 Node.js 22.x 或 Python 3.13。
-
將架構設定為 x86_64,然後選擇建立函數。
除了可傳回 Hello from Lambda!
訊息的簡單函數之外,Lambda 還可為函數建立執行角色。執行角色是 AWS Identity and Access Management (IAM) 角色,授予 Lambda 函數存取 AWS 服務 和資源的許可。對於您的函數,Lambda 建立的角色會授予寫入 CloudWatch Logs 的基本許可。
使用主控台的內建程式碼編輯器,將 Lambda 建立的 Hello world 程式碼取代為您自己的函數程式碼。
- Node.js
-
若要在主控台中修改程式碼
-
選擇 程式碼 標籤。
在主控台的內建程式碼編輯器中,您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 index.mjs 標籤,請在檔案總管中選取 index.mjs,如下圖所示。
-
將以下程式碼貼到 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;
}
};
-
在 DEPLOY 區段中,選擇部署以更新函數的程式碼:
了解函數程式碼
在進行下一步之前,讓我們花一點時間看看函數程式碼,並了解一些重要 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
函數會使用兩個引數,event
和 context
。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.log
和 console.error
等主控台方法,將資訊傳送到函數的日誌。範例程式碼使用 console.log
陳述式,輸出計算出的區域及函數的 CloudWatch Logs 群組名稱。您也可以使用任何寫入 stdout
或 stderr
的記錄程式庫。
如需進一步了解,請參閱 記錄和監控 Node.js Lambda 函數。若要了解如何在其他執行期中記錄,請參閱您有興趣之執行期的「建置方式」頁面。
- Python
-
若要在主控台中修改程式碼
-
選擇 程式碼 標籤。
在主控台的內建程式碼編輯器中,您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 lambda_function.py,請在檔案總管中選取 lambda_function.py,如下圖所示。
-
將以下程式碼貼到 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
-
在 DEPLOY 區段中,選擇部署以更新函數的程式碼:
了解函數程式碼
在進行下一步之前,讓我們花一點時間看看函數程式碼,並了解一些重要 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
函數會使用兩個引數,event
和 context
。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"
。
若要建立測試事件
-
在主控台程式碼編輯器的 TEST EVENTS 區段中,選擇建立測試事件。
-
Event Name (事件名稱) 輸入 myTestEvent
。
-
在事件 JSON 區段中,將預設 JSON 取代為下列項目:
{
"length": 6,
"width": 7
}
-
選擇 Save (儲存)。
若要測試函數並檢視調用記錄
在主控台程式碼編輯器的 TEST EVENTS 區段中,選擇測試事件旁邊的執行圖示:
當函數完成執行時,回應和函數日誌會顯示在 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 中檢視函數的調用記錄
-
開啟 CloudWatch 主控台的 日誌群組 頁面。
-
為函數 (/aws/lambda/myLambdaFunction
) 選擇日誌群組名稱。這是您的函數列印至主控台的日誌群組名稱。
-
向下捲動並選擇要查看的函數調用日誌串流。
您應該會看到類似下列的輸出:
- 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 函數
-
開啟 Lambda 主控台中的 函數頁面。
-
選擇您建立的函數。
-
選擇 Actions (動作)、Delete (刪除)。
-
在文字輸入欄位中輸入 confirm
,然後選擇刪除。
刪除日誌群組
-
開啟 CloudWatch 主控台的 日誌群組 頁面。
-
選取函數的日誌群組 (/aws/lambda/myLambdaFunction
)。
-
選擇 動作 、刪除日誌群組 。
-
在 刪除日誌群組 對話方塊中,選擇 刪除 。
刪除執行角色
-
開啟 AWS Identity and Access Management (IAM) 主控台的角色頁面。
-
選取函數的執行角色,(例如 myLambdaFunction-role-31exxmpl
)。
-
選擇 刪除 。
-
在刪除角色對話方塊中輸入角色名稱,然後選擇刪除。
其他資源和後續步驟
既然您已使用主控台建立並測試簡單的 Lambda 函數,接著請採取下列後續步驟: