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는 호출자가 타겟 서비스에 사용 가능한 통신 옵션에 대한 정보를 가져오는 데 사용할 수 있습니다.
3. GitLab 설정
- Gitlab에서 본인이 사용하는 Repository settings에 접속하여 Webhooks 메뉴로 간다.
- 여기 URL에, 1에서 생성한 API의 URL을 복붙해준다.
- 그리고 마지막, Active 설정.
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...
'직장생활 > AWS, GCP' 카테고리의 다른 글
[AWS] CodePipeline 생성 후 Source staging에서 권한부족(The provided role does not have permissions to perform this action) 이슈 해결 (0) | 2022.05.31 |
---|---|
[AWS] IAM 사용자, 역할, 정책 / User, Role, Policy (0) | 2022.05.31 |
[AWS] EC2 에서 S3 접근하기, 데이터(파일) 가져오기 (0) | 2022.05.25 |
[AWS] ec2 ssh 접속이 안될 때, 도메인으로 접속하면 된다. (0) | 2022.05.25 |
terraform 0.14.6 mac(m1)에 설치하기, terraform 특정 버전 설치하기 (0) | 2022.05.24 |