API Gateway를 사용하여 로컬에서 실행 AWS SAM - AWS Serverless Application Model

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

API Gateway를 사용하여 로컬에서 실행 AWS SAM

Amazon API Gateway를 로컬에서 실행하면 다양한 이점을 얻을 수 있습니다. 예를 들어 API Gateway를 로컬에서 실행하면 AWS 클라우드에 배포하기 전에 로컬에서 API 엔드포인트를 테스트할 수 있습니다. 로컬에서 먼저 테스트하면 종종 클라우드에서의 테스트 및 개발을 줄일 수 있으며, 이는 비용 절감에 도움이 될 수 있습니다. 또한 로컬에서 실행하면 디버깅이 더 쉬워집니다.

HTTP 요청/응답 기능을 테스트하는 데 사용할 수 있는 API Gateway의 로컬 인스턴스를 시작하려면 명령을 사용합니다. sam local start-api AWS SAMCLI 이 기능에는 핫 리로딩 기능이 있어 함수를 빠르게 개발하고 반복할 수 있습니다.

참고

핫 리로딩은 변경된 파일만 새로 고치고 애플리케이션 상태는 동일하게 유지되는 것을 말합니다. 반대로 라이브 재로드는 전체 애플리케이션을 새로 고치고 애플리케이션의 당시 상태가 손실되는 경우입니다.

sam local start-api 명령을 사용하는 방법은 를 사용한 테스트 소개 sam local start-api 섹션을 참조하세요.

기본적으로 AWS Lambda 프록시 통합을 AWS SAM 사용하며 리소스 유형과 리소스 유형을 모두 HttpApi 지원합니다. Api HttpApi리소스 유형의 프록시 통합에 대한 자세한 내용은 API Gateway 개발자 안내서의 HTTP API용 AWS Lambda 프록시 통합 작업을 참조하십시오. 이러한 Api 리소스 유형으로 실행하는 프록시 통합에 대한 자세한 내용은 API Gateway 개발자 안내서API Gateway Lambda 프록시 통합을 참조하세요.

예:

$ sam local start-api

AWS SAM AWS SAM 템플릿 내에서 Api 이벤트 소스가 HttpApi 정의되었거나 정의된 모든 함수를 자동으로 찾습니다. 그런 다음 정의된 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 명령을 실행하여 변경 내용을 감지하십시오.

환경 변수 파일

템플릿에 정의된 값을 재정의하는 환경 변수를 로컬에서 선언하려면 다음을 수행하십시오.

  1. 재정의할 환경 변수가 포함된 JSON 파일을 만듭니다.

  2. --env-vars 인수를 사용하여 템플릿에 정의된 값을 재정의합니다.

환경 변수 선언

모든 리소스에 전체적으로 적용되는 환경 변수를 선언하려면 다음과 같이 Parameters 객체를 지정합니다.

{ "Parameters": { "TABLE_NAME": "localtable", "BUCKET_NAME": "testBucket", "STAGE": "dev" } }

각 리소스에 대해 서로 다른 환경 변수를 선언하려면 다음과 같이 각 리소스에 대하여 객체를 지정합니다.

{ "MyFunction1": { "TABLE_NAME": "localtable", "BUCKET_NAME": "testBucket", }, "MyFunction2": { "TABLE_NAME": "localtable", "STAGE": "dev" } }

각 리소스에 객체를 지정할 때는 우선 순위가 높은 순위에서 가장 낮은 순으로 나열된 다음 식별자를 사용할 수 있습니다.

  1. logical_id

  2. function_id

  3. function_name

  4. 완전 경로 식별자

단일 파일에서 환경 변수를 선언하는 위의 두 가지 방법을 모두 함께 사용할 수 있습니다. 이렇게 하면 특정 리소스에 대해 제공한 환경 변수가 글로벌 환경 변수보다 우선합니다.

귀하의 환경 변수를 JSON 파일(예:env.json)에 저장합니다.

환경 변수 값 재정의

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

$ sam local start-api --env-vars env.json

계층

귀하의 애플리케이션에 레이어가 포함된 경우 로컬 호스트의 레이어 관련 문제를 디버깅하는 방법에 대한 자세한 내용은을 참조하세요다음과 같은 Lambda 계층을 사용하여 효율성을 높이십시오. AWS SAM.