Cloud Run에 서버 배포하기

Cloud Run은 Google Cloud에서 제공하는 서버리스 컨테이너 서비스입니다. 간단하게 배포 방법을 알아봅니다.
2022.07.07

사이드 프로젝트를 하면서 도커로 이루어진 API 서버를 관리하기 쉽게 컨테이너 전용 서비스로 옮기고 싶은 마음이 생겼습니다…

Cloud Run을 고려한 이유는 scale to zero, 사이드 프로젝트이기 때문에 트래픽이 오는 경우에만 비용을 지불하고 싶었습니다. 그 중 가장 사용하기 쉬워보였던게 Cloud Run 이었습니다.

기존에 CI/CD도 사용했었기 때문에 이러한 점도 고려해야 했는데요, 이것도 같이 해결해보겠습니다.

그런데, Google Cloud를 이용하려면 계정이 있어야 하겠죠? 계정이 없으신분은 생성해주세요!

Google Cloud 계정 만들기

Cloud Run이란

Cloud Run: 컨테이너를 프로덕션으로 신속히 배포 | Google Cloud

Google Cloud에서 제공하는 서버리스 컨테이너 서비스입니다. 도커같은 컨테이너만 준비해둔다면 매우 쉽게 배포할 수 있습니다.

Zero to scale이 됩니다. 트래픽이 오는 경우에 콜드 스타트가 시작하고 비용이 계산되며, 내부적으로는 Knative라는 것을 사용하고 있습니다.

Knative-based Cloud Run services are GA | Google Cloud Blog

오토 스케일링 또한 최소 최대 인스턴스를 조정할 수 있으며, 인스턴스가 올라간 이후 CPU를 계속해서 작동시킬지 트래픽을 처리할 때만 켜져있을지 같은 설정도 가능합니다.

최소 인스턴스(서비스) | Cloud Run 문서 | Google Cloud

CPU 할당(서비스) | Cloud Run 문서 | Google Cloud

달마다 무료로 제공되는 용량도 있습니다. 자세한 요금은 아래를 참고해주세요.

가격 책정 | Cloud Run | Google Cloud

배포 준비

저는 기존에 팀원이 사용하던 spring boot 서버를 옮겨야 했기 때문에 spring boot로 진행하겠습니다.

https://github.com/Tolluset/cloud-run-sp-boot

위 레포지토리를 클론해주시거나 아래의 사이트 혹은 자신만의 방식 혹은 spring boot 이외에도 기존에 사용하시는 컨테이너가 있다면 사용해주세요.

Spring Initializr

Cloud Run 생성

Cloud Run

Cloud Run 콘솔에서 서비스 만들기로 들어가줍니다.

기존 컨테이너 이미지에서 배포해서 시작할 수도 있지만, 저는 소스 저장소에서 부터 시작해보겠습니다.

SET UP WITH CLOUD BUILD 를 클릭해주시면, 아래와 같은 창이 뜨는데

Manage connected repositories 를 클릭해서 사용하실 레포지토리를 선택하시면 됩니다. 저는 상단에 제가 만들어둔 레포지토리를 사용하겠습니다.

 

 

분기와 Build Type을 설정해주세요. 분기는 편하신대로, Build Type은 Dockerfile을 선택해주시면 됩니다.

그리고 아래와 같이 설정해주시면 되는데요. 리전은 서울로, CPU 할당 및 가격 책정 은 기본적으로 CPU가 요청 처리 중에만 할당됨 을 설정해주시면 됩니다. CPU가 항상 할당됨은 인스턴스가 켜져있는 상태에서 계속해서 켜져 있게 만드는 설정입니다.

자동 확장은 0개로 설정하면 zero to scale이 되고 1개이상으로 설정해두시면 콜드 스타트를 줄일 수 있습니다. 최대 인스턴스는 4개정도로 설정해주세요.

마지막 맨 밑의 인증은 퍼블릭하게 사용할 API 서버이기 때문에 인증되지 않은 호출 허용 으로 선택하겠습니다.

만들게 되면 처음에 실패하게 됩니다.

빌드를 확인하기 위해 Cloud Build로 가봅니다.

실패한 빌드로 들어가서 봅시다.

빌드된 jar 파일이 없어서 에러가 나고 있었네요.

그렇다면 도커파일이 돌아가기전에 jar 파일이 생성되게 빌드를 추가해주면 되겠네요.

왼쪽의 트리거로 이동해서 자동으로 생성된 트리거를 페이지로 들어가주세요.

밑으로 쭉 내리면 스크린 샷 처럼 되어 있을 텐데요, 편집기 열기 버튼을 눌러봅시다.

 

자동으로 ci/cd 스크립트가 작성되어 있는 것을 볼 수 있습니다. 여기서 도커를 빌드하기 전에 어플리케이션을 빌드하는 스크립트를 추가해주죠.

- name: gradle
  args:
    - ./gradlew
    - clean
    - build
  id: Build Application

를 추가해줍시다.

 

완료 버튼을 눌러 완료하고, 페이지로 돌아와 하단에 있는 저장을 눌러 저장해줍시다.

그리고 다시 동작시키기 위해 실행 버튼을 눌러줍니다.

나오는 창에 밑에 트리거 실행을 눌러주시면 실행됩니다.

빌드가 성공되었으니 Cloud Run으로 돌아가봅시다.

잘 작동되는 것을 볼 수 있습니다!

참고로 기본 모니터링도 보기 좋습니다.