API Gateway에서 EC2의 application 호출
회사에서 보안문제로, 외부망을 호출할 수 없게하여 EC2 에 다른 포트에 서빙중이었던 서비스에 접근하지 못한다고 proxy 역할을 할 다른 서버를 구축하고자 했다.
그래서 API-Gateway 로 EC2 를 직접 호출하게 했다.
API Gateway를 REST API 유형으로 API 엔드포인트유형을 private으로 생성하기
대상 그룹 생성
EC2에 서비스를 배포해놓았기 때문에, 대상 유형은 인스턴스로 선택
대상 그룹 이름과 프로토콜, VPC 등을 선택한다.
대상은 일단 EC2 앱들을 선택한다.
대상 그룹은 아래와 같이 하는것으로 변경했다
둘 모두 같은 1번 ec2이며
80포트에는 fastapi-server로 /plugin/test 요청 보내면 success를 돌려주는 api가
8002포트에는 /chat?input=hi 이런식으로 보내면 llm 모델 응답을 보내주는 api가 올라가 있다
Network 로드 밸런서 생성
EC2에 가서, 로드밸런서 생성을 선택
기본구성을 해준다.
네트워크 매핑을 해준다, EC2가 있는 VPC를 선택해준다.
-> 주의사항 : 위 캡쳐처럼 app subnet으로 하는것이 아니라 elb를 선택해줘야 한다.
리스너 및 라우팅 설정을 해준다.
대상 그룹으로 연결해준다.
VPC 링크 생성
API Gateway 대시보드로 가서 VPC 링크를 생성한다.
API를 생성한다
VPC 링크 연동 방식으로 API를 생성한다.
-> 주의사항 : 여기서 URL은 NLB의 DNS를 넣어줘야 한다.
주의사항 - NLB의 보안 그룹
NLB의 보안그룹 편집에서, 보안설정 관련하여 PrivateLink 트래픽에 인바운드 규칙 허용을 선택하면 안된다.
메서드 생성 시 vpcLinkId와 vpcNLB 스테이지 변수 활용하기
배포 전 테스트
배포 후 테스트
스테이지에 배포 후 url을 이용하여 외부 접근 테스트를 진행한다
chat api
이번엔 EC2 8002번 포트에 /chat?input=hi 이런식으로 보내면 llm 응답을 돌려주는 api를 호출하도록 API Gateway에 새로운 메서드를 추가해보겠다.
앞의 다른 메서드와 유사하게 만들어준다.
/chat?input=hi 이런식으로 쿼리 문자열 파라미터가 필요하므로 추가해준다
대상 그룹 등록 여부에 따른 호출 결과
현재 8002포트의 /chat api는 에러가 있는데 대상그룹 등록여부에 따라 호출 결과가 다르다
대상 등록 시
대상 등록 취소 시
외부에서 호출
1 | % curl --location 'https://wfz4ol6u28.execute-api.ap-northeast-2.amazonaws.com/dev/chat?input=baseball' |
References
Amzzon API Gateway 기반 VPC Link 활용 방법
AWS API Gateway 에서 EC2 에 서빙중인 application HTTP 로 호출하기
EC2 Instance Connect Endpoint를 통해 private EC2 접속하기
API Gateway에서 EC2의 application 호출
https://hamin7.github.io/2024/08/11/AWS-Call-Application-hosted-on-EC2-from-AWS-API-Gateway/
install_url
to use ShareThis. Please set it in _config.yml
.