EMD Blog

[GCP] Compute Engine에 대해 알아보자(4) - 스테이트풀 MIG/리소스 정리 본문

Public Cloud/GCP

[GCP] Compute Engine에 대해 알아보자(4) - 스테이트풀 MIG/리소스 정리

EmaDam 2022. 2. 5. 22:33

이전 포스팅에서는 스테이트풀 구성 중 디스크를 스테이트풀로 구성하는 방법에 대해 알아 보았다. 하지만 이전 글에서 윈도우로 새 스테이트풀 MIG를 구성한다는 것을 기존 스테이트리스 MIG(Linux)를 수정하는 방식으로 진행하는 바람에 리눅스로 진행해버리고 말았고, 원래 진행 하고 싶었던 것은 스테이트리스 MIG(Linux) + 스테이트풀 MIG(Windows) 구성이였기 때문에 이참에 IaC의 장점도 짚고 갈겸 리소스들을 정리하고 가보도록 하자. 

잠깐 다른 얘기를 하면, 나 같은 경우 글 작성이 굉장히 느린 편이기 때문에 글을 작성하면서 생성해 놓은 리소스들로 인해 과금이 될 우려가 있다. 그래서 매일 글을 작성하고 나서는 리소스를 전부 지워버리고 글을 이어서 작성할 때 포스팅에 적어둔 CLI를 그대로 실행하고 있다. 내가 말하고자 하는 것은 이렇게 리소스들을 코드나 명령어로 관리하는 것이 일관성있는 인프라를 유지하는 것에 얼마나 편리한 것인지 말씀드리기 위함이다. 이미 IaC가 활성화 되어 있는 조직에서 일하고 계신 분들이라면 그 장점에 대해 충분히 알고 있겠지만 만약에 본인 IaC에 대해 잘 모르고 왜 써야하는지도 모르겠다라고 한다면 나처럼 명령어를 사용해 매번 리소스들을 갈아 엎거나 아니면 이 참에 Terraform같은 도구를 사용해 보길 권장한다. Terraform의 경우 튜토리얼이 굉장히 잘 되어 있고 명령어를 참고한다면 코드를 작성하는 것도 굉장히 쉽다. 물론 구조를 잘 나누는 것은 다른 문제지만 익숙해지는 것에는 전혀 문제가 없다. 

 사실 지금 포스팅에서 하는 것은 그냥 리소스 스펙을 기록만 해둔 수준이라 IaC(Infrastructure as Code, IaC)라고 할 수는 없다. 하지만 이 정도로 관리만 해주더라도 굉장히 많은 장점들을 누릴 수 있다. 지금 리소스를 정리하면서 그 장점들을 한번 살펴보고 제대로 IaC를 도입할 경우 얼마나 편리해질지 한번 생각해보자. (참고 : 코드형 인프라(IaC)란? )

 

먼저, 스테이트리스 MIG에 대한 명령어를 나열해보자. 

# 인스턴스 템플릿 생성
gcloud compute instance-templates create study-web-dev-2 \
--machine-type=f1-micro \
--image=ubuntu-minimal-2004-focal-v20211209 \
--image-project=ubuntu-os-cloud \
--boot-disk-size=10GB \
--boot-disk-type=pd-balanced \
--boot-disk-device-name=study-web-dev-2 \
--metadata-from-file=startup-script=<PATH>/start_script.sh

# health check를 위한 방화벽 구성
gcloud compute firewall-rules create allow-http-ingress-from-healthcheck \
    --action allow \
    --direction ingress \
    --rules tcp:80 \
    --source-ranges 130.211.0.0/22,35.191.0.0/16

# health-check 생성
gcloud compute health-checks create http http-health-check \
    --request-path=/ \
    --check-interval=30s \
    --port 80

# MIG 생성
gcloud compute instance-groups managed create study-managed-instance-group \
--base-instance-name=study-web-dev \
--template=study-web-dev-2 \
--size=1 \
--zone=asia-northeast3-a \
--health-check=http-health-check \
--initial-delay=300

# Auto-Scaling 구성
gcloud compute instance-groups managed set-autoscaling study-managed-instance-group \
--zone asia-northeast3-a \
--cool-down-period "60" \
--max-num-replicas "3" \
--min-num-replicas "1" \
--set-schedule "business-hours" \
--schedule-cron "0 9 * * 1-5" \
--schedule-min-required-replicas 2 \
--target-cpu-utilization "0.6" \
--schedule-duration-sec 32400 \
--schedule-time-zone "Asia/Seoul" \
--mode "on"

 

이 명령어들만 실행 시키면 [GCP] Compute Engine에 대해 알아보자(2) - 스테이트리스 MIG 포스팅에서 구성했었던 스테이트리스 MIG가 구성된다. 참고로 Instance Template 생성시 지정한 start_script.sh 내용은 아래와 같다.

#! /bin/bash
sudo apt-get update
sudo apt-get install -y apache2
sudo service apache2 restart

여기까지 하면 우리가 원했던 리눅스 인스턴스 기반의 스테이트리스 MIG가 구성된다. 만약 이 MIG를 스테이트풀로 구성하고 싶다면 아래 코드를 추가로 실행하자. (현재는 디스크만 스테이트풀이다.)

gcloud compute instance-groups managed update study-managed-instance-group \
--zone=asia-northeast3-a \
--stateful-disk device-name=study-web-dev-2,auto-delete=on-permanent-instance-deletion

그러면 스테이트풀 디스크가 적용된 MIG가 구성된다. 

 

이제 위 코드들을 살짝만 변경해서 윈도우 기반의 스테이트풀 MIG를 생성해보자. 

gcloud compute instance-templates create study-web-dev-3 \
--machine-type=f1-micro \
--image=windows-server-2019-dc-v20211216 \
--image-project=windows-cloud \
--boot-disk-size=50GB \
--boot-disk-type=pd-balanced \
--boot-disk-device-name=study-web-dev-3
   
gcloud compute health-checks create http http-health-check \
    --request-path=/ \
    --check-interval=30s \
    --port 80

gcloud compute instance-groups managed create study-managed-instance-group-windows \
--base-instance-name=study-web-dev \
--template=study-web-dev-3 \
--size=1 \
--zone=asia-northeast3-a \
--health-check=http-health-check \
--initial-delay=300

gcloud compute instance-groups managed update study-managed-instance-group-windows \
--zone=asia-northeast3-a \
--stateful-disk device-name=study-web-dev-3,auto-delete=on-permanent-instance-deletion

정말 몇 가지 정보만 변경해서 리눅스에서 윈도우 기반으로 변경했다. 아마 콘솔로 했다면 굉장히 지루한 작업이 되었을 것이다. 

 

이렇게 명령어로 작성했을 때의 장점을 알아보았다. 포스팅이 조금 심플한데 그 만큼 간단한 작업이라는 뜻이다.

다음 포스팅에서는 스테이트풀 구성을 마저 진행하도록 하자.