

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# を使用して Lambda 関数をローカルに呼び出す AWS SAM
<a name="serverless-sam-cli-using-invoke"></a>

クラウドでのテストまたはデプロイの前に Lambda 関数をローカルで呼び出すことには、まざまな利点があります。これにより、関数のロジックをより迅速にテストできます。最初にローカルでテストすることで、クラウドでのテスト時やデプロイ時に問題が見つかる可能性を低くでき、不要なコストを回避するのにも役立ちます。さらに、ローカルでテストすることでデバッグが楽になります。

Lambda 関数は、[sam local invoke](sam-cli-command-reference-sam-local-invoke.md) コマンドを使用して関数の論理 ID とイベントファイルを指定することによってローカルで呼び出せます。また、**sam local invoke** は `stdin` をイベントとして受け取ります。イベントの詳細については、*AWS Lambda デベロッパーガイド*の「[イベント](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-event)」を参照してください。さまざまな AWS サービスのイベントメッセージ形式の詳細については、「 *AWS Lambda デベロッパーガイド*」の[「Using AWS Lambda with other services](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` オプションは 2 つのファイル形式をサポートしています。ファイル形式は、ファイルの内容に基づいて自動的に検出されます。

### 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>

アプリケーションにレイヤーが含まれている場合、ローカルホスト上のレイヤーの問題をデバッグする方法の詳細については、「[で 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)」を参照してください。