[GCP]Serverless 서비스인 Cloud Run 알아보기 4부 — 서버리스 VPC 액세스

이정운 (Jungwoon Lee)
google-cloud-apac
Published in
10 min readMar 19, 2021

안녕하세요 이정운 입니다.

Google Cloud 에서 제공하는 컨테이너 기반의 Serverless 솔루션인 Cloud Run 에 대해서 살펴보고 실제 테스트해보면서 써볼 수 있는 시간을 가져보는 시리즈를 하단과 같이 진행하고 있습니다.

[GCP]Serverless 서비스인 Cloud Run 알아보기 1부 — Cloud Run 개요
[GCP]Serverless 서비스인 Cloud Run 알아보기 2부 — 로컬에서 개발하기(Cloud Code)
[GCP]Serverless 서비스인 Cloud Run 알아보기 3부 — 업데이트 및 트래픽 조정

이번 이야기에서 살펴볼 것은 Cloud Run 을 통해서 GCP 상의 다양한 서비스를 private IP 를 통해서 호출 할 수 있는 서버리스 VPC 액세스(Serverless VPC Access) 입니다. 잘 아시겠지만 퍼블릭 클라우드 환경에서 서비스를 운영할 때 네트워크 분리와 보안적인 목적을 위해서 VPC(Virtual Private Cloud) 환경을 구성해서 수행합니다. VPC 를 사용하게 되면 가장 큰 이점은 네트워크 분리도 있겠지만 같은 VPC 를 사용하는 자원간에는 안전하게 private IP 를 통해서 연동이 가능하다는 이점도 가지고 있습니다.

그런데, Cloud Run 과 같은 완전 관리 형태의 서비스 경우에는 Google 에서 전부 관리를 지원해주기 때문에 사용자가 설정을 수동으로 제어할 수 없으며 Google Cloud 환경 어딘가에 별도로 분리된 환경으로 Google 이 알아서 운영을 해주고 있는 형태입니다. 이는 다시말하면, Cloud Run 과 같은 완전 관리 형태의 서비스는 사용자가 만든 프로젝트의 VPC 안에 넣을 수 없게 되며 그렇기 때문에, Cloud Run 에서 다른 GCP 서비스를 호출할 경우에는 private IP 대신에 인터넷을 이용한 public IP 로 호출해야 한다는 단점이 존재 합니다. 이번에 이러한 제약을 해결하기 위해서 서버리스 VPC 액세스 라는 새로운 기능을 Google Cloud 에서 제공하게 되었고 오늘은 해당 부분을 살펴보고자 합니다.

서버리스 VPC 액세스는 커넥터라는 리소스를 토대로 서버리스 환경과 VPC 네트워크 간의 트래픽 처리가 가능하도록 지원합니다. 즉, Cloud Run 뿐만 아니라 Cloud Functions, Google App Engine 등의 서버리스 환경과 VPC 연결을 지원하여 보다 안전하게 private IP 로 커뮤니케이션 할 수 있도록 지원합니다. 좀 더 자세한 내용이나 구조는 하단 링크의 그림에 잘 설명되어 있습니다.

Serverless VPC Access
https://cloud.google.com/vpc/docs/serverless-vpc-access

그럼 이번에도 역시 설명보다는 실제 테스트를 직접 해보면서 Cloud Run 의 Serverless VPC 에 대해서 살펴보는 시간을 가져보도록 하겠습니다.

#1) 서버리스 VPC 액세스 커넥터 만들기

Configuring Serverless VPC Access
https://cloud.google.com/vpc/docs/configure-serverless-vpc-access

처음에 설명드렸지만 서버리스 VPC 액세스는 커넥터라는 리소스를 토대로 서버리스 환경과 VPC 네트워크 간의 트래픽 처리가 가능하도록 지원합니다. 따라서, 서버리스 VPC 액세스 커넥터를 먼저 만들어보도록 하겠습니다.

“GCP 관리콘솔 > VPC 네트워크 > 서버리스 VPC 액세스” 메뉴로 이동한 후에 “커넥터 만들기”를 클릭합니다.

커넥터 이름이나 리전, 네트워크 등의 필요 정보를 입력합니다. 이때, IP 범위는 VPC 네트워크에서 사용되지 않는 /28 CIDR 범위여야 하며 기존 서브넷과 겹치지 않아야 합니다.

그리고 실제 커넥터를 통해서 전송될 트래픽의 양에 따라 최소 처리량과 최대 처리량 정보를 입력합니다. 특히, 공식 매뉴얼에 명시된 하단의 처리량 부분을 참고하시기 바라겠습니다.

서버리스 VPC 액세스 커넥터
https://cloud.google.com/vpc/docs/configure-serverless-vpc-access#connectors

“서버리스 VPC 액세스는 커넥터를 통해 전송된 트래픽의 양에 따라 커넥터 처리량을 100Mbps 단위로 증분하여 자동 프로비저닝합니다. 자동으로 프로비저닝된 처리량은 확장만 가능하며 축소되지는 않습니다. 커넥터는 항상 200Mbps 이상을 프로비저닝하며 처리량을 1,000Mbps까지 확장할 수 있습니다. 커넥터를 만들 때 처리량 확장 한도를 구성할 수 있습니다. 특히 트래픽 버스트가 짧은 경우 커넥터를 통한 실제 처리량이 프로비저닝된 처리량을 초과할 수 있습니다.”

필요한 정보를 입력 후 ‘만들기’ 버튼을 클릭하면 하단과 같이 서버리스 VPC 액세스 커넥터가 정상적으로 만들어진 것을 확인 가능합니다.

#2) 서버리스 VPC 액세스 커넥터 테스트

서버리스 VPC 액세스 커넥터를 테스트 해보기 위해서는 Cloud Run 이 GCP 의 private IP 로 호출하기 위한 간단한 서비스가 필요합니다. 테스트 목적으로 간단하게 테스트 해보기 위해서 GCE 를 하나 생성합니다.

다만, 생성시에 네트워크 인터페이스 탭을 열어서 “외부 IP” 를 없음으로 선택합니다. 이렇게 하면 해당 GCE 는 public IP 가 할당되지 않으며 커뮤니케이션이 필요한 경우 오로지 private IP 만 가능해집니다.

생성된 GCE 에 간단한 서비스 애플리케이션을 하나 구동시킵니다. REST API 호출이 가능한 아무 애플리케이션도 가능하며 저는 간단하게 node.js 샘플을 하나 작성해서 띄워두었습니다. 해당 샘플은 테스트 결과를 보시면 아시겠지만 간단하게 {“user” : “test”} 라는 결과를 반환하는 샘플입니다.

당연히 기존의 Cloud Run 에 배포된 애플리케이션 소스 코드에도 해당 서버의 private IP 호출 로직을 추가합니다. 기 언급한 것처럼 저는 node.js 샘플을 사용했기 때문에 간단하게 request 모듈을 추가했습니다. (참고로 package.json 에도 request 모듈의 의존성 추가를 해주어야 합니다.)

기존 애플리케이션 소스를 변경하고 Visual Studio Code 도구에서 배포를 시도합니다. 이때, 혼동될 수 있으니 기존 서비스에 배포 하지말고 새로운 서비스를(hello-world-2) 하단과 같이 생성해서 진행을 하도록 하겠습니다.

정상적으로 배포가 완료되면 GCP 관리콘솔 > Cloud Run > 해당 애플리케이션 메뉴로 이동합니다.

해당 메뉴에서 ‘새 버전 수정 및 배포’ 메뉴를 클릭하여 수정모드로 변경한 다음 “고급 설정 > 연결” 탭에 가서 VPC 커넥터 메뉴에 이전 파트에서 작성한 VPC 커넥터를 선택합니다. 그리고, 비공개 IP 에 대한 요청만 라우팅 할 것인지 모든 트래픽을 라우팅을 수행할지에 대한 옵션을 선택하고 배포를 클릭합니다.

변경 배포가 정상적으로 완료되면 하단과 같이 버전v2 서비스를 확인할 수 있습니다.

또한, 서비스 URL 을 통해서 정상적으로 호출이 되는 것을 확인할 수 있습니다.

특히, 해당 서비스의 로그를 확인해보면 하단과 같이 이전에 만들어둔 GCE 의 서비스를 VPC 서버리스 액세스 커넥터를 통해서 정상적으로 private IP 로 호출하고 그 결과를( {“user” : “test”}) 로그로 정상적으로 찍은 것을 확인 가능합니다.

즉, 다시 말씀드려 서버리스 서비스인 Cloud Run 에서 VPC 서비스 액세스 커넥터를 통해서 GCP 프로젝트의 VPC 내의 자원을 private IP 로 정상적으로 호출하였습니다.

추신 #1) 다른 서비스들과 다르게 Cloud Run 에서 Cloud SQL 을 연결하고자 할 때는 VPC 서비스 액세스 커넥터가 아니라 하단의 링크에 언급된 것처럼 별도의 Cloud SQL 연결 메뉴를 통해서 연결 설정을 해야 합니다. 해당 설정을 사용하면 자동으로 Cloud SQL 프록시가 사용 설정되고 구성되어 이를 통해 연결이 가능합니다.

Cloud Run(완전 관리형)에서 Cloud SQL로 연결
https://cloud.google.com/sql/docs/mysql/connect-run

추신 #2) 2020/12월에 Cloud Run 에 할당 가능한 메모리가 8GiB 로 확대되었으며 동시 요청도 최대 250개 까지 처리할 수 있도록 업데이트 되었습니다.
https://cloud.google.com/run/docs/release-notes

지금까지 Cloud Run 을 통해서 GCP 상의 다양한 서비스를 private IP 를 통해서 호출 할 수 있는 서버리스 VPC 액세스를 살펴보고 서버리스 VPC 액세스 커넥터를 생성해서 직접 분리되어 있는 GCE 에 private IP 로 서비스 하는 것을 테스트 해봤습니다. 보시면 아시겠지만 보안이나 성능등 다양한 목적에 의해서 Cloud Run 에서 프로젝트의 VPC 내의 서비스 자원을 호출하는 방법을 쉽게 제공되는 것을 확인할 수 있었습니다.

그럼 이번 포스팅은 여기서 마무리하고 다음에 다른 포스팅으로 다시 돌아오겠습니다.

Disclaimer: 본 글의 작성자는 Google 직원이지만 Google cloud 를 공부하는 한 개인으로서 작성된 글입니다. 본 글의 내용, 입장은 Google 을 대변하지 않으며 Google 이 해당 콘텐츠를 보장하지 않습니다.

참고 자료 #1

Serverless VPC Access
https://cloud.google.com/vpc/docs/serverless-vpc-access

Configuring Serverless VPC Access
https://cloud.google.com/vpc/docs/configure-serverless-vpc-access

Cloud Run(완전 관리형)에서 Cloud SQL로 연결
https://cloud.google.com/sql/docs/mysql/connect-run

--

--

이정운 (Jungwoon Lee)
google-cloud-apac

Technical engineer who dreams better future. (These thoughts are my own personal opinions, and do not reflect or represent Google’s opinions or plans.)