- 빠른 시작 풀 크기 자동 증감 예약
- 정기적으로 워크스테이션 자동 시작
이 튜토리얼을 통해 일반적인 영업시간에 맞게 빠른 시작 풀 크기를 늘리거나 줄일 수 있습니다.
목표
- 워크스테이션 구성의 빠른 시작 풀 크기를 업데이트하는 Cloud Run 서비스를 작성하고 배포하기
- PST 영업시간에 맞게 월~금 오전 9시~오후 5시에 실행되도록 1단계에서 만든 서비스를 예약하는 Cloud Scheduler 작업을 구성하기
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- Cloud Scheduler
- Cloud Run
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
환경 준비
나중에 만드는 자동 스크립트에서 사용하게 될 다음 환경 변수를 설정합니다.
사용할
PROJECT_ID
및REGION
변수를 설정하세요.PROJECT_ID=$PROJECT_ID REGION=$REGION
$REGION을 사용하려는 리전 이름으로 바꿉니다(예:
us-central1
).사용 가능한 리전에 대한 자세한 내용은 Cloud Workstations 위치를 참조하세요.
애플리케이션 아키텍처
이 솔루션에는 다음과 같은 Google Cloud 구성요소가 포함됩니다.
- Cloud Run을 사용하여
WorkstationConfig
의 빠른 시작 풀 크기를 업데이트합니다. - Cloud Scheduler 작업을 사용하여 설정된 일정에 따라 호출을 수행하여
WorkstationConfig
를 업데이트합니다.
Cloud Run 서비스 만들기
첫 번째 단계에서는 포트 8080에서 수신하는 HTTP 요청을 리슨하는 간단한 웹 서버를 설정합니다. 애플리케이션이 컨테이너화되어 있으므로 모든 언어로 서버를 작성할 수 있습니다.
Python으로 웹 서버 리스너 애플리케이션을 작성하려면 다음을 수행합니다.
workstation-config-updater
라는 새 디렉터리를 만들고 이 디렉터리로 이동합니다.mkdir workstation-config-updater cd workstation-config-updater
app.py
라는 파일을 만들고 이 파일에 다음 코드를 붙여넣습니다.import os, subprocess from flask import Flask, request, abort app = Flask(__name__) @app.route("/", methods=["POST"]) def update(): app.logger.info("Update request received.") data = request.json cluster = data["cluster"] region = data["region"] pool_size = data["pool-size"] path = os.path.join(app.root_path, "update_config.sh") o = subprocess.run( [path, cluster, region, pool_size], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True ) app.logger.info("Sending response:", o.stdout) return o.stdout if __name__ == "__main__": app.run(host="0.0.0.0", port=8080, debug=True)
이 코드는
PORT
환경 변수에서 정의된 포트를 리슨하고update_config.sh
스크립트를 실행하는 기본 웹 서버를 만듭니다.update_config.sh
라는 파일을 만들고 이 파일에 다음 코드를 붙여넣습니다.#!/bin/bash set -e if [ $# -ne 3 ] then echo "Usage: update_config.sh CLUSTER REGION POOL_SIZE" exit 1 fi CLUSTER=$1 REGION=$2 POOL_SIZE=$3 # list workstation configs echo "Attempting to list workstation configs in cluster $CLUSTER and region $REGION ..." for CONFIG in $(gcloud workstations configs list --cluster $CLUSTER --region $REGION --format="value(NAME)"); do echo "Attempting to update Quick Pool Size to $POOL_SIZE for config $CONFIG ..." # update the workstation config pool-size RET=$(gcloud workstations configs update $CONFIG --cluster $CLUSTER --region $REGION --pool-size=$POOL_SIZE) if [[ $RET -eq 0 ]]; then echo "Workstation config $CONFIG updated." else echo "Workstation config $CONFIG update failed." fi done
이 스크립트는
gcloud
명령어를 사용하여 지정된 클러스터의 모든WorkstationConfig
를 나열하고 빠른 시작 풀 크기를POOL_SIZE
로 업데이트합니다.Dockerfile
라는 파일을 만들고 이 파일에 다음 코드를 붙여넣습니다.FROM google/cloud-sdk RUN apt-get update && apt-get install -y python3-pip python3 # Copy local code to the container image. ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ RUN /bin/bash -c 'ls -la; chmod +x ./update_config.sh' # Install production dependencies. RUN pip3 install Flask gunicorn # Run the web service on container startup CMD exec gunicorn --bind :8080 --workers 1 --threads 8 app:app
이 코드는 애플리케이션을 컨테이너화하여 Cloud Run에 배포할 준비를 합니다.
Cloud Run에 배포
Cloud Run에 배포하려면 다음 명령어를 실행합니다.
gcloud run deploy --source . --project $PROJECT_ID --region $REGION
서비스 이름을 입력하라는 메시지가 표시되면 Enter 키를 눌러 기본 이름인
workstation-config-updater
를 사용합니다.Artifact Registry API를 사용 설정하거나 Artifact Registry 저장소 만들기를 허용하라는 메시지가 표시되면 y를 누릅니다.
인증되지 않은 호출을 허용하라는 메시지가 표시되면 n을 누릅니다.
배포가 완료될 때까지 기다립니다.
서비스 URL이 다음 형식으로 표시되면 복사합니다.
SERVICE_URL=$SERVICE_URL
Cloud Run을 호출하도록 서비스 계정 구성
배포한 workstation-config-updater 서비스는 인증되지 않은 호출을 허용하지 않습니다.
Cloud Scheduler에는 workstation-config-updater 서비스를 호출하는 데 적절한 사용자 인증 정보가 있는 서비스 계정이 필요합니다.
서비스 계정 설정
Cloud Scheduler 작업에 사용할 서비스 계정이 아직 없으면 새 서비스 계정을 만듭니다.
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"
서비스 계정에서 Cloud Run을 호출할 수 있도록 필수 IAM 역할 바인딩을 추가합니다.
gcloud run services add-iam-policy-binding workstation-config-updater \ --member=serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --region $REGION \ --role=roles/run.invoker
인증을 사용하여 Cloud Scheduler 구성 만들기
작업을 만들고 Cloud Run에 배포에서 복사한
URL
을 지정합니다.gcloud scheduler jobs create http workstation-pool-increaser-cron \ --http-method=POST \ --location=us-central1 \ --schedule="0 9 * * 1-5" \ --time-zone="America/Los_Angeles" \ --headers "Content-Type=application/json" \ --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "2"}' \ --uri=$SERVICE_URL \ --oidc-service-account-email=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com
이 명령어는
WorkstationCluster
$CLUSTER의 모든WorkstationConfigs
에 대해 빠른 시작 풀 크기를 월요일부터 금요일 오전 9시(PST)에 2로 늘리는 작업을 예약합니다.자세한 내용은 작업 일정 구성을 참조하세요.
마찬가지로 영업일이 끝날 때 워크스테이션 구성의 풀 크기를 0으로 줄이려면 다음을 실행합니다.
gcloud scheduler jobs create http workstation-pool-decreaser-cron \ --http-method=POST \ --location=$REGION \ --schedule="0 17 * * 1-5" \ --time-zone="America/Los_Angeles" \ --headers "Content-Type=application/json" \ --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "0"}' \ --uri=$SERVICE_URL \ --oidc-service-account-email=$SERVICE-ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
(선택사항) 작업 확인
작업이 예상대로 작동하는지 확인하려면 작업을 확인하면 됩니다.
Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.
workstation-pool-increaser-cron
이 작업 목록에 표시됩니다.workstation-pool-increaser-cron
작업 행에서 작업 > 작업 강제 실행을 클릭합니다.프로젝트에 생성된 첫 번째 작업이 실행되는 데 몇 분 정도 걸릴 수 있습니다.
최종 실행 상태 열에서
Success
상태는 작업이 성공적으로 실행되었음을 나타냅니다.
워크스테이션 구성이 업데이트되었는지 확인하려면 다음을 수행합니다.
Google Cloud 콘솔에서 워크스테이션 구성 페이지로 이동합니다.
빠른 시작 풀 크기가 2인지 확인합니다.
Cloud Run 서비스의 로그를 확인합니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
테스트 프로젝트 삭제
Cloud Run에서는 서비스를 사용하지 않을 때 비용이 청구되지 않지만 Artifact Registry에 컨테이너 이미지를 저장하는 데 요금이 청구될 수 있습니다. 비용이 청구되지 않도록 컨테이너 이미지를 삭제하거나 Google Cloud 프로젝트를 삭제할 수 있습니다. Google Cloud 프로젝트를 삭제하면 프로젝트 내에서 사용되는 모든 리소스에 대한 비용 청구가 중지됩니다.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Cloud Scheduler 작업 삭제
개별 Cloud Scheduler 리소스를 삭제하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.
작업 옆에 있는 체크박스를 클릭합니다.
페이지 상단의 삭제 버튼을 클릭하고 삭제를 확인합니다.
다음 단계
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기. Cloud 아키텍처 센터를 살펴보세요.