Build a Website on Google Cloud

목록
- Deploy Your Website on Cloud Run ⬅️ 오늘의 Lab!
- Hosting a Web App on Google Cloud using Compute Engine (video)
- Host a Web App on Google Cloud Using Compute Engine
- Deploy, Scale, and Update Your Website on Google Kubernetes Engine
- Migrating a Monolithic Website to Microservices on Google Kubernetes Engine
- Case Study: Hosting Scalable web apps on Google Cloud
- Build a Website on Google Cloud: Challenge Lab
Cloud Build를 사용하여 Docker 이미지를 빌드하고, Artifact Registry에 업로드하고, Cloud Run에 Docker 이미지를 배포를 해보자! 그리고 Cloud Run의 애플리케이션에 대한 엔드포인트를 설정해보자.
참고✨
기존 웹사이트를 배포하는 실습이기 때문에, 소스는 Clone 하기만 하고 Docker 이미지를 만들고 Cloud Run에 배포하는 과정을 중점으로 진행

git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices

./setup.sh
➡️ 배포하기 전에 애플리케이션을 테스트 하기 위해서 실행

cd ~/monolith-to-microservices/monolith
npm start

참고
Cloud Shell에서
Ctrl + C를 누르면 웹 서버 프로세스가 중지된다.

과정
- 검색창에
Artifact Registry입력 후 클릭Create repository클릭- Name:
monolith-demo입력- Format:
Docker선택- Region: 실습용 계정에 맞는 Region 선택
- 하단의 Create 버튼 클릭

#Region에는 실습용으로 발급받은 Region을 입력해야 한다.
gcloud auth configure-docker Region-docker.pkg.dev
왜 하는거지?
이미지를 푸시하거나 가져오려면 Docker가 Artifact Registry에 대한 요청을 인증하는 데 Google Cloud CLI를 사용하도록 구성해야 하기 때문이다.

# Dockerfile이 있는 ~/monolith-to-microservices/monolith에서 실행
gcloud services enable artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com
➡️ Cloud Build, Artifact Registry, Cloud Run API 사용 설정

#Region에는 2-2에서 사용했던 Region과 동일하다.
gcloud builds submit --tag Region-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0

➡️ Cloud Build > History에서 빌드된 모든 목록을 볼 수 있다.
➡️ 빌드 세부정보 페이지 > 실행 세부정보 탭 > 이미지 링크 > 생성된 컨테이너 이미지 확인 가능
참고✨
Cloud Run에 배포하는 방법에는 두 가지가 있다.
1. 관리형 Cloud Run: 모든 컨테이너 수명 주기가 Cloud Run 제품 자체에 의해 관리되는Platform as a Service이다. ⬅️ 이 방식으로 실습 진행!
2. GKE의 Cloud Run: 제어 계층이 추가된 Cloud Run으로, GKE에서 자체 클러스터와 포드를 가져올 수 있다.

# Region 수정 필요
gcloud run deploy monolith --image Region-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region Region
➡️ [monolith]에 대한 인증되지 않은 호출을 허용할지 묻는 메시지는 'Y' 선택

gcloud run services list
➡️ 배포를 비롯하여 배포한 사용자 정보, 앱에 액세스 시 사용할 수 있는 URL 등 정보 제공

➡️ URL 주소로 접속 시, 로컬에서 미리 본 것과 동일한 웹사이트 표시!
참고✨
동시 실행 수란, 각 컨테이너 인스턴스가 한 번에 최대 요청 처리 가능한 개수이다. 이는 하나의 인스턴스가 한 번에 하나의 요청을 처리하는
Functions as a Service모델과는 크게 다른 방식이다.

gcloud run deploy monolith --image Region-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region Region --concurrency 1
➡️ --concurrency 옵션을 사용하여 한 번에 하나의 작업만 수행(순차 처리)하도록 제한


➡️ Cloud Run > Services > monolith > 최근 배포의 수정 버전 클릭 > 동시 실행 값(Concurrency)이 1 로 감소했음을 알 수 있다.

# Region 수정 필요
gcloud run deploy monolith --image Region-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:1.0.0 --region Region --concurrency 80
➡️ 동시 실행 값을 1 -> 80 으로 변경
문제상황📝
- 시나리오: 마케팅팀에서 사이트의 홈페이지를 변경해 달라고 요청했습니다. 마케팅팀은 홈페이지에서 어떤 회사이며 무엇을 판매하는지에 대해 더 많은 정보를 제공해야 한다고 생각합니다.
- 작업: 마케팅팀이 만족할 수 있도록 홈페이지에 텍스트를 추가합니다. 개발자 한 명이 이미
index.js.new라는 파일 이름에 변경사항을 작성했습니다. 이 파일을index.js에 복사하기만 하면 변경사항이 적용됩니다. 아래 안내를 따라 적절하게 변경하세요.

cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js

cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

cd ~/monolith-to-microservices/react-app
npm run build:monolith
➡️ React 앱 빌드 후, monolith 공개 디렉터리에 복사하여 기존의 거대한 Monolith(모놀리스) 구조를 배포 가능한 상태로 묶는다.

# Region 수정 필요
cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag Region-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:2.0.0

# Region 수정 필요
gcloud run deploy monolith --image Region-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/monolith-demo/monolith:2.0.0 --region Region
참고
- Cloud Run은 각 배포를 새로운 버전으로 취급하고, 이 버전은 먼저 온라인 상태가 된 다음 트래픽이 리디렉션 된다.
- 기본적으로 최신 버전에는 서비스의 인바운드 트래픽이 100% 할당된다.
- '경로'를 사용하여 서비스 내의 여러 버전에 서로 다른 비율의 트래픽을 할당 가능하다.

# Region 수정 필요
gcloud run services describe monolith --platform managed --region Region
➡️ 이미지가 2.0.0 버전임을 확인할 수 있다.

gcloud beta run services list

➡️ URL을 클릭하여 배포된 웹사이트를 띄운 후, 내용이 수정되었는지 확인