

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 를 사용하여 로컬로 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 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 local start-api`를 위한 `sam build` 명령을 실행하여 변경 내용을 감지하십시오.

## 환경 변수 파일
<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 파일에 정의된 변수로 재정의하려면 **invoke** 또는 **start-api** 명령과 함께 `--env-vars` 인수를 사용합니다. 예제:

```
$ 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).