

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

# 를 사용하여 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>

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

```
# 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)을 참조하세요.