Google Cloud Run 에 환경변수 넣는 여정

Jaewoong2·2023년 9월 29일

Google Colud Run 이란?

Cloud Run 이란 Google Cloud 에서 대표적으로 제공하는 Serverless 서비스 입니다.

Cloud Run 은 컨테이너 상에 올라가 구동 가능한 모든 것들을 서빙 할 수 있는 서비스 입니다.

Cloud Run 주요기능

왜 Cloud Run 을 사용 했는지?

AWS EC2와 같이 VPC 를 이용해서 직접 서버를 구성하는데에 지식이 부족하다고 생각하였고, DockerFile, app.json 등 Cloud Run을 이용 하는데 필요한 파일들만 추가해주면 온전히 서비스 개발에만 집중 할 수 있다고 생각 하였습니다

그래서 개발에만 집중 할 수 있었는가

넵 몇가지 문제를 제외 하면 어느정도는 집중 할 수 있었습니다, 프론트엔드 개발을 위주로 한 개발자로서, NextJS를 통해 서비스를 개발 하였고 Cloud Run 을 위한 설정파일을 작성 하고 README.md 에 배포를 위한 버튼을 만들면, 버튼 한번 클릭으로 배포까지 완벽하게 되었습니다.

Cloud Run을 통한 배포가 갖고 있는 문제점

제한된 방법의 커스텀 도메인 등록 ...

Cloud Run이 자체적으로 https://newsubs-rp2bw6ixvq-du.a.run.app/ 와 같은 형태로 접근 가능한 Service URL을 제공 합니다. 하지만 안이쁘죠?

그래서 커스텀 도메인을 등록해서 원하는 도메인인 https://newsubs.site 를 등록 하고 싶은데, 서울 region (asia-northeast3) 에서는 커스텀 도메인을 등록 할 수 없어, External Application Load Balancer 를 등록 해야 하더라구요. 아니면 파이어베이스에 서비스를 등록해서 커스텀 도메인을 등록을 해야 합니다.

귀찮죠..?

그래서, 도쿄 리전을 이용하고, 커스텀 도메인을 매핑 하였습니다. 그리고 CDN 을 이용해서 리전 거리가 먼 것을 해결 하였습니다.

그래도 그렇게 어렵지 않으니까.. 넘어갑시다

(중요) Cloud Run 에서 제공하는 환경 변수 구성은 Runtime시 구성 된다.

현재 제 서비스에서 사용되는 환경 변수는 외부 API 요청을 위한 Secret Key 정도가 있습니다.

런타임에서 API를 이용 할때는 큰 문제가 없지만, 외부 API 를 통해 Sitemap 을 만들때 문제가 생겼습니다.

외부 DB에서 아티클, 뉴스레터등의 정보들을 불러와 이를 Sitemap 으로 만들어 줘여 하는데 NextJS 에서 Sitemap 을 만드는 과정은 Build Time에 만들어져 Cloud Run 에서 제공하는 환경 변수 구성이 되지 않는 것이 문제 였습니다..

Build Time에 환경변수 구성하기 - .env 파일 만들기

그렇다고 환경변수를 모아둬 접근할 수 있게 한 .env 파일을 레포지토리에 올려 놓고 빌드 할 때 환경변수에 접근 할 수 있게 하는 것은 아무리 보안상 중요하지 않은 서비스라 하더라도, Secret Key 를 탈취 당하면 API 사용 비용문제도 있고 해서 올려놓는건 아니라고 생각 했습니다.

컨테이너의 이미지로 올라가기전에 만들기

그러면 어떻게? .env 를 컨테이너 이미지 생성전에 만들고 이미지에 올라 갈 수 있게 하면 되지 않을까 생각 했습니다.

그럼 환경 변수를 저장 할 수 있는 것들을 생각 해보다가, github 에서는 github actions 라는 CI/CD 툴을 제공 하고 있다는 것을 생각 했습니다.

또한 actions 에 사용을 위한 secret key 등을 저장 할 수 있도록 하고 있는 것을 이용 하여 .env 파일을 actions 에서 생성 하도록 하고 .env 파일을 포함한 파일을 빌드하고 배포될 수 있도록 이용 하고자 하였습니다.

  • cloud run 배포를 위한 actions가 미리 제공 하고 있어서 ㄱㅊ 했던 방법 인듯함

여기서 워크플로우를 가져와서 세팅을 하고 환경변수를 actions secrets 에 구성 하였습니다.

그리고, yaml 파일에 아래와 같은 작업을 작성 해서, Cloud 에 올라가기전에 .env 이 생성되도록 하였습니다.

구글 클라우드 런에서는 Run Time 시에만 환경변수가 구성 되는데, 이미지(및 코드) 빌드 전에 환경변수를 미리 만들고 빌드가 되도록 하여 환경변수에 접근 할 수 있도록 하였습니다.

Cloud 환경, Serverless 환경, Frontend 환경, Backend 환경 에 대한 모든 용어나 어떻게 구성되는지 100%로 모르지만, 공식문서를 천천히 읽고 대충 원하는 모습을 상상해서 구성을 했더니 문제를 해결 했기 때문에 작성 하였습니다 ^~^

profile
DFF (Development For Fun)

3개의 댓글

comment-user-thumbnail
2024년 5월 10일

안녕하세요! 저도 google cloud 를 쓰게 되었는데요. 포스팅 보니 yml파일이랑 github action사용하신것 같은데 어떻게 하신건지 알려주실수 있나요 ? 저는 기본 깃허브로 지속적 배포 선택하면 yaml파일로 자동으로 말아져서요.
혹시 도커 쓰신건가요 ?

1개의 답글