在本機執行 API Gateway AWS SAM - AWS Serverless Application Model

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

在本機執行 API Gateway AWS SAM

在本機執行 Amazon API Gateway 可以有多種好處。例如,在本機執行 API Gateway 可讓您在部署到 AWS 雲端之前在本機測試 API 端點。如果您先在本機測試,通常可以減少雲端中的測試和開發,這有助於降低成本。此外,在本機執行可讓偵錯更容易。

若要啟動可用來測試 HTTP 要求/回應功能的 API Gateway 本機執行個體,請使用指sam local start-api AWS SAMCLI令。此功能具有熱重新加載功能,因此您可以快速開發和迭代函數。

注意

熱重新載入是指只重新整理變更的檔案,且應用程式的狀態保持不變。相反地,即時重新載入是重新整理整個應用程式,而且應用程式的狀態會遺失。

如需使用sam local start-api指令的指示,請參閱測試簡介 sam local start-api

依預設, AWS SAM 會使用 AWS Lambda Proxy 整合並支援HttpApiApi資源類型。如需有關資HttpApi源類型之代理整合的詳細資訊,請參閱 API Gateway 開發人員指南中的使用 HTTP API 的 AWS Lambda 代理整合。如需有關代理與Api資源類型整合的詳細資訊,請參閱《API Gateway 開發人員指南》中的了解 API Gateway Lambda 代理整合

範例:

$ sam local start-api

AWS SAM 會自動尋找 AWS SAM 範本中已定義HttpApiApi事件來源的任何函數。然後,它會在定義的 HTTP 路徑上掛載函數。

在下列Api範例中,Ratings函數會掛載ratings.py:handler()/ratingsGET要求:

Ratings: Type: AWS::Serverless::Function Properties: Handler: ratings.handler Runtime: python3.9 Events: Api: Type: Api Properties: Path: /ratings Method: get

這是一個示例Api響應:

// Example of a Proxy Integration response exports.handler = (event, context, callback) => { callback(null, { statusCode: 200, headers: { "x-custom-header" : "my custom header value" }, body: "hello world" }); }

如果您修改函數的程式碼,請執行的sam build命令sam local start-api以偵測變更。

環境變數檔案

若要在本機宣告覆寫範本中定義的值的環境變數,請執行下列動作:

  1. 建立包含要覆寫之環境變數的 JSON 檔案。

  2. 使用--env-vars引數覆寫範本中定義的值。

聲明環境變量

若要宣告全域套用至所有資源的環境變數,請指定如下所示的Parameters物件:

{ "Parameters": { "TABLE_NAME": "localtable", "BUCKET_NAME": "testBucket", "STAGE": "dev" } }

要為每個資源聲明不同的環境變量,請為每個資源指定對象,如下所示:

{ "MyFunction1": { "TABLE_NAME": "localtable", "BUCKET_NAME": "testBucket", }, "MyFunction2": { "TABLE_NAME": "localtable", "STAGE": "dev" } }

為每個資源指定物件時,您可以使用下列識別碼,以最高到最低的優先順序列出:

  1. logical_id

  2. function_id

  3. function_name

  4. 完整路徑識別碼

您可以使用上述兩種方法,在單一檔案中一起宣告環境變數。這樣做時,您為特定資源提供的環境變數優先於全域環境變數。

將環境變數儲存在 JSON 檔案中,例如env.json.

覆寫環境變數值

若要以 JSON 檔案中定義的環境變數覆寫環境變--env-vars數,請搭配invokestart-api指令使用引數。例如:

$ sam local start-api --env-vars env.json

圖層

如果您的應用程式包含層,如需有關如何偵錯本機主機上層問題的資訊,請參閱使用 Lambda 層來提高效率 AWS SAM