

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

# を使用して API Gateway をローカルで実行する AWS SAM
<a name="serverless-sam-cli-using-start-api"></a>

Amazon API Gateway をローカルで実行することには、さまざまな利点があります。例えば、API Gateway をローカルで実行すると、 AWS クラウドにデプロイする前に API エンドポイントをローカルでテストできます。最初にローカルでテストすれば、多くの場合クラウドでのテストと開発を減らすことができ、コスト削減に役立ちます。さらに、ローカルでの実行はデバッグを容易にします。

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 Lambda プロキシ統合 AWS SAM を使用し、 および `HttpApi``Api`リソースタイプの両方をサポートします。`HttpApi` リソースタイプのプロキシ統合の詳細については、*API Gateway デベロッパーガイド*の[「HTTP API の AWS Lambda プロキシ統合の使用 APIs](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 は、 `HttpApi`または `Api`イベントソースが定義されている AWS SAM テンプレート内の関数を自動的に検出します。関数は、定義された HTTP パスにマウントされます。

以下の `Api` 例では、`Ratings` 関数が `GET` リクエストの `/ratings` で `ratings.py:handler()` をマウントします。

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

アプリケーションにレイヤーが含まれている場合、ローカルホスト上のレイヤーの問題をデバッグする方法の詳細については、「[で Lambda レイヤーを使用して効率を向上させる AWS SAM](serverless-sam-cli-layers.md)」を参照してください。