- Serverless 教程
- Serverless - 首頁
- Serverless - 簡介
- Serverless - 安裝
- Serverless - 部署函式
- Serverless - 區域、記憶體大小、超時時間
- Serverless - 服務
- Serverless - 定時 Lambda 函式
- Serverless - API 閘道器觸發的 Lambda 函式
- Serverless - 包含/排除
- Serverless - 外掛
- Serverless - 打包依賴項
- Serverless - 層建立
- Serverless - 使用 DynamoDB 的 REST API
- Serverless - Telegram 回聲機器人
- Serverless 有用資源
- Serverless - 快速指南
- Serverless - 有用資源
- Serverless - 討論
Serverless - 部署函式
建立新專案
導航到您想要建立第一個要部署到無伺服器的專案的資料夾。在該資料夾中,執行以下命令:
sls create --template aws-python3
此命令將建立使用無伺服器和 Python 執行時的部署 Lambda 函式的樣板程式碼。
請注意,您也可以使用其他執行時。執行 sls create --help 以獲取所有模板的列表。
建立樣板程式碼後,您將在資料夾中看到兩個檔案:handler.py 和 serverless.yml。handler.py 是包含 Lambda 函式程式碼的檔案。serverless.yml 是告訴 AWS 如何建立 Lambda 函式的檔案。它是配置檔案或設定檔案,將成為本教程中幾個章節的重點。讓我們先瀏覽 handler.py 檔案。
import json
def hello(event, context):
body = {
"message": "Go Serverless v1.0! Your function executed successfully!", "input": event
}
response = {
"statusCode": 200, "body": json.dumps(body)
}
return response
# Use this code if you don't use the http event with the LAMBDA-PROXY
# integration
"""
return {
"message": "Go Serverless v1.0! Your function executed successfully!", "event": event
}
"""
它包含一個函式 hello。此函式接受兩個引數:event 和 context。這兩個引數對於任何 AWS Lambda 函式都是必需的。每當呼叫 Lambda 函式時,Lambda 執行時都會向函式傳遞兩個引數:event 和 context。
event 引數包含 Lambda 函式要處理的資料。例如,如果您透過 REST API 觸發 Lambda 函式,您在 API 的路徑引數或主體中傳送的任何資料都會在 event 引數中傳送到 Lambda 函式。稍後章節將詳細介紹。需要注意的是,event 通常是 Python 的 dict 型別,儘管也可以是 str、float、int、list 或 NoneType 型別。
context 物件是在執行時傳遞給 Lambda 函式的另一個引數。它不常使用。AWS 官方文件指出,此物件提供方法和屬性,這些方法和屬性提供有關呼叫、函式和執行時環境的資訊。您可以閱讀更多關於 event 和 context 物件的資訊 這裡。
該函式非常簡單。它只是返回一條狀態程式碼為 200 的訊息。底部有一個註釋,如果我們不使用帶有 LAMBDA-PROXY 設定的 HTTP 事件,則應使用該註釋。在 API 觸發的 Lambda 章節中將詳細介紹。
現在,讓我們看看 serverless.yml 檔案。這是一個包含大量註釋的檔案。對於剛開始使用無伺服器的人來說,這些註釋非常有用。建議您仔細閱讀這些註釋。我們將在接下來的章節中介紹許多與 serverless.yml 相關的概念。讓我們在這裡簡單瀏覽一下基本概念。
如果刪除註釋後檢視 serverless.yml 檔案,它將如下所示:
service: aws-serverless
frameworkVersion: '2'
provider:
name: aws
runtime: python3.8
lambdaHashingVersion: 20201221
functions:
hello:
handler: handler.hello
service 欄位確定 Lambda 函式和所有必需資源將在其中建立的 CloudFormation 堆疊的名稱。將 service 視為您的專案。AWS Lambda 函式執行所需的所有內容都將在該服務中建立。您可以設定您選擇的 service 名稱。
框架版本指的是無伺服器框架的版本。這是一個可選欄位,通常用於確保與您共享程式碼的人使用相同的版本號。如果 serverless.yml 中提到的 frameworkVersion 與您的機器上安裝的 serverless 版本不同,您將在部署過程中收到錯誤。您還可以為 frameworkVersion 指定一個範圍,例如 frameworkVersion − >=2.1.0 && <3.0.0。您可以閱讀更多關於 frameworkVersion 的資訊 這裡。
下一部分,provider,可以視為一組全域性設定。我們將在後面的章節中討論 provider 下包含的其他引數。在這裡,我們將重點介紹可用的引數。name 欄位確定平臺環境的名稱,在本例中為 aws。runtime 為 python3.8,因為我們使用了 python3 模板。lambdaHashingVersion 指的是框架應使用的雜湊演算法的名稱。
請注意,如果您在上一章的配置憑證步驟中添加了自定義配置檔案,則需要在 provider 中新增 profile 引數。例如,我將我的配置檔名稱設定為 yash-sanghvi。因此,我的 provider 看起來像這樣:
provider: name: aws runtime: python3.8 lambdaHashingVersion: 20201221 profile: yash-sanghvi
最後,functions 塊定義所有 Lambda 函式。我們這裡只有一個函式,在 handler 檔案中。函式的名稱為 hello。函式的路徑在 handler 欄位中提到。
部署函式
要部署函式,您需要開啟命令提示符,導航到包含 serverless.yml 的資料夾,然後輸入以下命令:
sls deploy -v
-v 是一個可選引數,指示詳細輸出。它可以幫助您更好地瞭解後臺程序。部署函式後,您應該能夠在 us-east-1 區域(預設區域)的 AWS 控制檯中看到它。您可以使用“測試”功能從控制檯呼叫它(您可以保留相同的預設事件,因為我們的 Lambda 函式無論如何都不使用事件輸入)。您也可以使用命令提示符進行測試:
sls invoke --function hello
請注意,如果您的函式與其他 AWS 服務(如 S3 或 dynamoDB)互動,則您無法始終在本地測試它。只有最基本的函式可以在本地測試。
從現有專案部署函式
如果要將現有專案部署到 AWS,請修改現有函式以僅接收 event 和 context 作為引數。接下來,在資料夾中新增一個 serverless.yml 檔案,並在 serverless.yml 中定義您的函式。然後開啟命令提示符,導航到該資料夾,然後點選 sls deploy -v。這樣,您現有的函式也可以部署到 AWS Lambda。