

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

# 使用 本機叫用 Lambda 函數 AWS SAM
<a name="serverless-sam-cli-using-invoke"></a>

在雲端測試或部署之前，在本機叫用 Lambda 函數可能有各種好處。它可讓您更快地測試函數的邏輯。在本機測試會先降低在雲端或在部署期間測試時識別問題的可能性，這可協助您避免不必要的成本。此外，本機測試可讓您更輕鬆地進行除錯。

您可以使用 [sam local invoke](sam-cli-command-reference-sam-local-invoke.md)命令，並提供函數的邏輯 ID 和事件檔案，在本機叫用 Lambda 函數。 **sam local invoke**也接受 `stdin` 做為事件。如需事件的詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[事件](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-event)。如需不同 AWS 服務的事件訊息格式相關資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[搭配使用 AWS Lambda 與其他 服務](https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html)。

**注意**  
不建議在不受信任的程式碼中使用 SAM CLI 的本機調用功能。若要與本機環境完全隔離，請直接在 Lambda 服務中執行程式碼。

**注意**  
**sam local invoke** 命令對應至 AWS Command Line Interface (AWS CLI) 命令 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html)。您可以使用任一命令來叫用 Lambda 函數。

您必須在專案目錄中執行 **sam local invoke**命令，其中包含您要叫用的 函數。

 範例：

```
# Invoking function with event file
$ sam local invoke "Ratings" -e event.json

# Invoking function with event via stdin
$ echo '{"message": "Hey, are you there?" }' | sam local invoke --event - "Ratings"

# For more options
$ sam local invoke --help
```

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

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

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

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

`--env-vars` 選項支援兩種檔案格式。根據檔案內容自動偵測檔案格式。

### 使用 JSON 宣告環境變數
<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`。

### 使用 .env 檔案宣告環境變數
<a name="serverless-sam-cli-using-invoke-environment-file-dotenv"></a>

您也可以使用 `.env` 檔案來宣告環境變數。`.env` 檔案中宣告的變數會全域套用至所有函數，相當於 JSON 格式的`Parameters`物件。

```
TABLE_NAME=localtable
BUCKET_NAME=amzn-s3-demo-bucket
STAGE=dev
```

`.env` 格式支援註解 （以 開頭的行`#`) 和引號值。

**注意**  
`.env` 格式僅支援全域環境變數。若要宣告函數特定的環境變數，請使用 JSON 格式。

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

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

```
# Using a JSON file
sam local invoke --env-vars env.json

# Using a .env file
sam local invoke --env-vars .env
```

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

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

## 進一步了解
<a name="serverless-sam-cli-using-invoke-learn"></a>

如需在本機叫用 函數的實作範例，請參閱 *完成 AWS SAM 研討會中的*[單元 2 - 在本機執行](https://s12d.com/sam-ws-en-local)。