

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

# 使用 本機執行 API Gateway AWS SAM
<a name="serverless-sam-cli-using-start-api"></a>

在本機執行的 Amazon API Gateway 可能有各種優點。例如，在本機執行 API Gateway 可讓您在本機測試 API 端點，然後再部署到 AWS 雲端。如果您先在本機進行測試，通常可以減少雲端的測試和開發，這有助於降低成本。此外，在本機執行 可讓偵錯更容易。

若要啟動可用於測試 HTTP 請求/回應功能的 API Gateway 本機執行個體，請使用`sam local start-api` AWS SAM CLI命令。此功能具有熱重新載入功能，讓您可以快速開發和迭代函數。

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

如需使用 `sam local start-api`命令的指示，請參閱 [使用 進行測試的簡介 sam local start-api](using-sam-cli-local-start-api.md)。

根據預設， AWS SAM 會使用 AWS Lambda 代理整合，並支援 `HttpApi`和 `Api` 資源類型。如需`HttpApi`資源類型的代理整合詳細資訊，請參閱*《 API Gateway 開發人員指南*》中的[使用 HTTP APIs AWS Lambda 代理整合](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html)。如需與`Api`資源類型進行代理整合的詳細資訊，請參閱《 [API Gateway 開發人員指南》中的了解 API Gateway Lambda 代理整合](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-create-api-as-simple-proxy)。 **

**範例**：

```
$ sam local start-api
```

AWS SAM 會自動尋找 AWS SAM 範本中已定義 `HttpApi`或 `Api`事件來源的任何函數。然後，它會將函數掛載在定義的 HTTP 路徑。

在下列`Api`範例中， `Ratings`函數`ratings.py:handler()`會在 掛載`/ratings``GET`請求：

```
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`來偵測您的變更。

## 環境變數檔案
<a name="serverless-sam-cli-using-start-api-environment-variable"></a>

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

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

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

### 宣告環境變數
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

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

```
{
    "Parameters": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
        "STAGE": "dev"
    }
}
```

若要宣告每個資源的不同環境變數，請為每個資源指定物件，如下所示：

```
{
    "MyFunction1": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
    },
    "MyFunction2": {
        "TABLE_NAME": "localtable",
        "STAGE": "dev"
    }
}
```

為每個資源指定物件時，您可以使用下列識別符，依最高至最低優先順序列出：

1. `logical_id`

1. `function_id`

1. `function_name`

1. 完整路徑識別符

您可以使用上述兩種在單一檔案中同時宣告環境變數的方法。執行此操作時，您提供給特定資源的環境變數優先於全域環境變數。

將您的環境變數儲存在 JSON 檔案中，例如 `env.json`。

### 覆寫環境變數值
<a name="serverless-sam-cli-using-start-api-environment-file-override"></a>

若要使用 JSON 檔案中定義的變數覆寫環境變數，請使用 `--env-vars`引數搭配 **invoke**或 **start-api**命令。例如：

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

## 層
<a name="serverless-sam-cli-using-start-api-layers"></a>

如果您的應用程式包含 layer，如需如何偵錯本機主機上 layer 問題的相關資訊，請參閱 [透過 使用 Lambda 層提高效率 AWS SAM](serverless-sam-cli-layers.md)。