당시 원하던 목표는 외부 API 요청시에 param으로 요구되는 key 값들을 숨기는 것과 환경변수를 사용할 수 없는 상황이었다. 그래서 AWS Lambda와 API Gateway를 사용하여 API를 Wrapping하였다.
만들고자 하는 Wrapping API
- 캐릭터 리스트 (
/api/characters
)- 캐릭터 상세 데이터 (
/api/character/${characterId}
)
API GateWay 생성하기 버튼을 누르게 되면 아래의 선택 항목을 확인할 수 있다.
나는 GET 요청만을 할 두 개의 API를 만들것이기 때문에 HTTP API를 선택했다.
만약 어떤것을 골라야할 지 고민이 된다면 해당 링크의 설명을 확인하면 된다. : API Gateway 사용 사례
API 유형 선택 | API생성 : 통합 생성 및 구성 |
---|---|
API이름은 API GateWay에서 구분하기 위함으로 사용된다.
위의 통합 추가는 이미 만들어 둔 것과 연결할 때 사용한다. (이미 만들어져있다면 사용 무관)
구축 버튼을 클릭한 후 진행되는 세번째 단계인 스테이지 구성에서는 API 엔드포인트의 URL의 일부로 설정된다.
APi라는 것을 명시하기위해서 그냥 api로 설정했다. Base URL는 아래와 같이 된다.
https://####.execute-api.ap-northeast-2.amazonaws.com/[api]
: (https://jttiazmtv9.execute-api.ap-northeast-2.amazonaws.com/api)/엔드포인트
API GateWay 구축 첫 단계에서 스테이지 구성에서 스테이지 이름을 marvel로 설정했었다.
생성 버튼을 통해 아래와 같이 원하는 엔드포인트에 맞는 메서드를 생성한다.
경로 및 메서드 생성 | 생성된 API 경로 |
---|---|
처음 빌드해보는 것이며, 빠르게 진행하기 위해 Node.js를 사용하였다.
TypesSript로도 빌드할수 있기 때문에 타입안정성이 우선시 되어야한다면 TypesSript로 진행할 것 같다.
AWS Lambda 함수 내의 node.js 런타임에서 fetch 를 사용할 경우,
/* global fetch */
문구 추가 필요
Lambda 함수에서 환경 변수를 설정하려면, AWS Lambda 콘솔에서 "환경 변수" 섹션에서 추가할 수 있다.
AWS Lambda 함수의 코드에서 의존하는 추가 패키지 및 모듈을 사용하려면 Lambda Layers 생성해주어야 한다.
추가된 Lambda Layers | Lambda함수에 Layer 연결 |
---|---|
Lambda Layers를 생성하여 각각의 Lambda 함수에 추가해준다.
만들어둔 API GateWay에서 “통합 연결”버튼을 클릭하여 엔드포인트와 Lambda 함수를 연결시킵니다.
만들어둔 API GateWay | “통합 연결”버튼을 클릭 후 화면 |
---|---|
캐릭터 리스트 | 캐릭터 상세 데이터 |
---|---|
캐릭터 리스트 (/api/characters ) | 캐릭터 상세 데이터 (/api/character/${characterId} ) |
---|---|
wrapping API는 Next.js 로 밖에 만들어 보질 않았어서 EC2를 띄워야하나 고민했었다. 하지만, EC2 숙련도가 낮았고 가격이 부담스러웠다. 찾아보니 AWS Lambda + API GateWay 조합으로 많이 사용한다는 것을 알고 시도하게되었다.
사실 기록해두고싶어 블로그 포스팅을 한다. 레퍼런스란에서 참고한 글을 보고 진행하는 것이 훨씬 더 편할 수 있다.
진행하면서 깃이슈에 기록하면서 진행했다. 위의 내용과는 크게 다르지 않다.
두려움이 있어 시도 조차 해보지않았던 AWS의 서비스들을 하나씩 해보고 있는데, 도장깨기 같아서 재밌다. 사실 도장이 잘 안깨져서 고민이기도하다.