반응형

 

Gitlab에서 PR(Pull Request)이 있을 때마다 AWS의 API Gateway를 호출해서, Lambda까지 연동해본다.

(후속절차가 훨씬 많지만 이번 포스팅의 범위는 여기까지!)

 

0. 아키텍쳐

Gitlab (에서 이벤트 발생 시) -> API Gateway (호출) -> Lambda (호출) 

 

 

1. Lambda 생성

항상 이런 작업을 할 땐 가장 마지막 순서부터 하나씩 만들어놔야 하므로 Lambda를 먼저 생성한다.

event로 뭘 받아올지 궁금하니 event 부터 찍는 간단한 람다를 만들었다. (nodejs)

 

2. API Gateway에서 HTTP API 또는 REST API 생성

- 본인에 맞는 API를 생성한 후 필요한 리소스, 메소드를 설정, 이후 배포

   (나는 해당 api 호출 시 lambda를 trigger할 예정으로 Lambda함수를 선택해주었다.)

  * Lambda 프록시 통합 사용은, event를 받아올 때 요청 및 세부 정보들을 모두 lambda로 프록시한다고 한다. (옆에 i 누르면 설명 나옴)

- 스테이지 메뉴에 가면, URL이 나온다. 이 URL을 Gitlab의 Webhook 부분에 넣어주면 된다. -> 3번

메서드 요청, 메서드 응답은 API 프론트앤드(클라이언트) <-> API gateway간의 인터페이스이며 

통합 요청, 통합 응답은 API와 백엔드(본인의 경우 Lambda)간 인터페이스임.

클라이언트는 API를 사용해서 메서드 요청을 통해 백엔드 기능에 액세스 함. 

 

POST / 는 메서드 요청의 payload가 통합 요청의 페이로드와 같은 형식인 경우, 요청 payload를 수정 없이 통합 요청에 전달 가능.

GET / 은 통합 유형을 사용하며 실제 백엔드에 연동되지 않고 통합 요청을 설정하여 정적인 html을 반환함.

 

참고

API 메서드의 다른 옵션에는 다음이 포함됩니다.

  • POST는 주로 하위 리소스를 생성하는 데 사용됩니다.
  • PUT은 주로 기존 리소스를 업데이트하는 데 사용되며, 권장되지는 않지만 하위 리소스를 생성하는 데에도 사용될 수 있습니다.
  • DELETE는 리소스를 삭제하는 데 사용됩니다.
  • PATCH는 리소스를 업데이트하는 데 사용됩니다.
  • HEAD는 주로 시나리오를 테스트하는 데 사용됩니다. GET와 동일하지만 리소스 표현을 반환하지 않습니다.
  • OPTIONS는 호출자가 타겟 서비스에 사용 가능한 통신 옵션에 대한 정보를 가져오는 데 사용할 수 있습니다.

https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/api-gateway-create-api-from-example.html

 

- 스테이지 메뉴에 가면, URL이 나온다. 이 URL을 Gitlab의 Webhook 부분에 넣어주면 된다. -> 3번

 

 

3. GitLab 설정

- Gitlab에서 본인이 사용하는 Repository settings에 접속하여 Webhooks 메뉴로 간다.

- 여기 URL에, 1에서 생성한 API의 URL을 복붙해준다. 

- 그리고 마지막, Active 설정.

나는 테스트를 위해 Merged, Comment edited가 발생할 때만 webhook이 동작하도록 설정했다.

 

 

Test connection을 눌러 ping을 날려보자.

 

 

4. API 동작 확인 (Gitlab에서 Comment edited)

 - API가 잘 동작하는지 확인하기 위해, Gitlab의 Pull Request에서 (본인은 이미 있었음) Comment를 수정해본다.

     (위에서 Comment edited 조건 만들기)

 

 - Comment edited로 인해 API gateway가 호출되고, lambda까지 동작이 되었는지 로그를 확인한다.

   . 람다 >  모니터링 > Cloudwatch에서 로그보기

 

 

- 실행 되었다. 이제 event에 어떤 값들이 오는지 알았다.

 

+ JSON.stringify(event): event를 json format으로 예쁘게 다시 찍어보자

  // JSON.stringify: JavaScript 값이나 객체를 JSON 문자열로 변환

 

이제 이걸 사용해서 다른 동작들을 만들어보자.  to be continued...

반응형

+ Recent posts