- AWS Lambda 教程
- AWS Lambda - 首頁
- AWS Lambda - 概覽
- AWS Lambda - 環境設定
- AWS Lambda - 簡介
- 構建 Lambda 函式
- NodeJS 中的函式
- Java 中的函式
- Python 中的函式
- Go 中的函式
- C# 中的函式
- 配置 Lambda 函式
- 使用 AWS 控制檯建立和部署
- 使用 AWS CLI 建立和部署
- 使用 Serverless Framework 建立和部署
- AWS 執行和呼叫 Lambda 函式
- 刪除 Lambda 函式
- 使用 Amazon API Gateway
- 帶有 Amazon S3 的 Lambda 函式
- 帶有 Amazon DynamoDB 的 Lambda 函式
- 帶有計劃事件的 Lambda 函式
- 帶有 Amazon SNS 的 Lambda 函式
- 帶有 CloudTrail 的 Lambda 函式
- 帶有 Amazon Kinesis 的 Lambda 函式
- 帶有自定義使用者應用程式的 Lambda 函式
- AWS Lambda@Edge 與 CloudFront
- 使用 CloudWatch 監控和故障排除
- AWS Lambda - 其他示例
- AWS Lambda 有用資源
- AWS Lambda - 快速指南
- AWS Lambda - 有用資源
- AWS Lambda - 討論
構建 Lambda 函式
AWS Lambda 函式在被呼叫時執行程式碼。本章詳細討論了 AWS Lambda 函式生命週期中涉及的所有這些步驟。
構建 Lambda 函式的步驟
Lambda 函式的生命週期包括四個必要的步驟 -
- 創作
- 部署
- 監控
- 故障排除
創作 Lambda 程式碼
AWS Lambda 函式程式碼可以用以下語言編寫 -
- NodeJS
- Java
- Python
- C#
- Go。
我們可以使用 AWS 控制檯、AWS CLI、Eclipse IDE、Visual Studio IDE、Serverless Framework 等編寫 AWS Lambda 的程式碼。
下表顯示了語言列表以及可用於編寫 Lambda 函式的不同工具和 IDE -
| 語言 | 用於創作 Lambda 程式碼的 IDE |
|---|---|
| NodeJS | AWS Lambda 控制檯 Visual Studio IDE |
| Java | Eclipse IDE |
| Python | AWS Lambda 控制檯 |
| C# | Visual Studio IDE .NET Core |
| Go | AWS Lambda 控制檯 |
部署 Lambda 程式碼
一旦您確定要使用哪種語言編寫 Lambda 函式,就有兩種方法可以部署程式碼 -
- 直接在 AWS 控制檯中編寫程式碼
- 將所有檔案和依賴項打包成 zip 或 jar 檔案
但是,請記住,必須為 zip 檔案授予正確的許可權。
測試 Lambda 程式碼
Lambda 程式碼可以在 AWS Lambda 控制檯中針對事件進行測試。也可以從 AWS CLI 和 Serverless CLI 測試 Lambda 函式。AWS 控制檯還具有事件資料,這些資料可用作測試 AWS Lambda 函式時的示例事件。
監控 Lambda 函式
可以使用 AWS CloudWatch 監控 Lambda 函式。我們可以在選擇的語言中新增必要的日誌訊息,並在 AWS CloudWatch 中檢視這些訊息。
要開始編寫 Lambda 函式,需要遵循一定的模式。以下是編寫 Lambda 函式需要遵循的主要核心概念 -
處理程式
處理程式是 AWS Lambda 函式的名稱,從這裡開始執行。它在 AWS 控制檯中顯示如下 -
請注意,這裡我們將預設處理程式更改為另一個名稱,並在處理程式中更新了該名稱 -
請注意,處理程式的呼叫方式因選定的執行時語言而異。
傳遞給處理程式的引數
如果您觀察處理程式函式,傳遞的引數為event、context和回撥函式,如下所示 -
Event引數包含用於觸發器的所有詳細資訊。
Context引數主要負責 Lambda 函式執行的執行時詳細資訊。我們可以使用context引數與 Lambda 函式進行互動。它包含諸如 AWS Lambda 終止函式之前剩餘的時間(即建立 Lambda 函式時指定的超時)、Lambda 函式的名稱、CloudWatch 組名稱、ARN 詳細資訊等資訊。
示例
讓我們藉助一個示例來了解從 AWS Lambda context 物件獲得的詳細資訊 -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log("context object details");
console.log(JSON.stringify(context));
callback(null, 'Lambda test');
};
當您執行上面顯示的 Lambda 函式時,您會看到以下輸出 -
輸出
context詳細資訊如下所示 -
{
"callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/myfirstlambdafunction",
"logStreamName":"2018/05/20/[$LATEST]04f17ee4ff7048d5bb1fedffaa807c71","functionName":
"myfirstlambdafunction","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":
"c931e21c-5bf3-11e8-acfe-47fdbb39eee9","awsRequestId":"c931e21c-5bf3-11e8-acfe-47fdbb39eee9",
"invokedFunctionArn":"arn:aws:lambda:us-east-1:625297745038:function:myfirstlambdafunction"
}
請注意,它包含 functionName、memoryLimit、requestId 等詳細資訊。
日誌記錄
AWS 函式執行時,在 Lambda 函式內部新增的日誌將顯示在 AWS CloudWatch 中。日誌語法會因所選語言而異。例如,在nodejs中,它是 console.log。
這是您可以在 AWSCloudWatch 中看到的輸出 -
錯誤處理
AWS Lambda 函式提供了一個回撥函式,用於通知 Lambda 函式已發生錯誤或成功。請注意,這裡我們使用 nodejs 作為執行時。錯誤處理會根據所選語言而異。
請觀察此處提供的示例以更好地理解 -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
var error = new Error("There is error in code");
callback(error);
};
輸出
當您測試 Lambda 程式碼時,您可以找到如下所示的輸出 -
日誌詳細資訊如下 -