Home GCP Compute Engine 생성 및 설정
Post
Cancel

GCP Compute Engine 생성 및 설정

Compute Engine 개요

  • Google Cloud Platform의 IaaS(Infrastructure as a Service) 서비스
  • 가상 머신(VM) 인스턴스를 생성하고 관리하는 컴퓨팅 서비스
  • DevOps 워크플로우의 기본 인프라 구성 요소



인스턴스 생성 방법

Console UI 기반 생성

image

  • 프로젝트 선택
  • 탐색 메뉴 이동
    • Compute EngineVM 인스턴스인스턴스 만들기 image image
  • 인스턴스 구성 설정 image image
    • 인스턴스명 설정
      • 프로젝트 내 고유한 이름
      • 소문자, 숫자, 하이픈(-) 사용
    • 리전(Region) 및 영역(Zone) 선택
      • 사용자와 가까운 리전 선택하여 레이턴시 최소화
      • 고가용성 필요 시 다중 영역 구성
    • 머신 유형 선택
      • 워크로드에 맞는 머신 패밀리 선택
    • 부팅 디스크 설정
      • OS 이미지 선택
      • 디스크 유형 및 크기 결정
    • 서비스 계정 설정
      • 인스턴스가 사용할 IAM 서비스 계정
    • 네트워크 태그 추가
      • 방화벽 규칙 적용을 위한 태그
  • 만들기 클릭하여 인스턴스 생성



CLI 기반 생성 (권장)

  • 자동화 및 재현 가능한 인프라 구축에 적합
  • gcloud CLI 도구 사용
1
2
3
4
5
6
7
8
9
10
gcloud compute instances create my-web-server \
    --project=my-project-id \
    --zone=us-central1-a \
    --machine-type=e2-medium \
    --image-family=ubuntu-2204-lts \
    --image-project=ubuntu-os-cloud \
    --boot-disk-size=20GB \
    --boot-disk-type=pd-balanced \
    --tags=http-server,https-server \
    --metadata-from-file=startup-script=./startup.sh
  • 주요 옵션 설명
    • --project
      • GCP 프로젝트 ID 지정
    • --zone
      • 인스턴스가 생성될 영역
    • --machine-type
      • 머신 유형 (CPU, 메모리 사양)
    • --image-family
      • OS 이미지 패밀리 (최신 LTS 버전 자동 선택)
    • --image-project
      • 이미지가 속한 프로젝트
    • --boot-disk-size
      • 부팅 디스크 크기 (GB 단위)
    • --boot-disk-type
      • 디스크 유형 (성능 및 비용 결정)
    • --tags
      • 방화벽 규칙 적용을 위한 네트워크 태그
    • --metadata-from-file
      • 시작 스크립트 파일 지정

권장 사항: 프로덕션 환경에서는 보안을 위해 default 네트워크 대신 사용자 정의(Custom) VPC를 생성하여 권한을 격리하는 것이 강력히 권장됩니다. default 네트워크는 기본적으로 모든 방화벽이 열려있거나 관리가 어려울 수 있습니다.



머신 패밀리 선택 가이드



머신 패밀리 비교

패밀리 특징 주요 사용 사례 비용
E2 비용 최적화, 가변 리소스 웹 서버, 개발/테스트 환경, 소규모 DB 가장 저렴
N2 범용, 균형잡힌 성능 일반 프로덕션 워크로드, 애플리케이션 서버 중간
N2D AMD 기반 범용 N2와 유사, 가격 대비 성능 우수 중간
C2 컴퓨팅 최적화, 고성능 CPU 게임 서버, 비디오 인코딩, HPC 높음
M2 메모리 최적화 대규모 인메모리 DB (SAP HANA, Redis) 매우 높음
A2 GPU 탑재 ML 학습, 비디오 렌더링, 과학 시뮬레이션 매우 높음
A2 GPU 탑재 ML 학습, 비디오 렌더링, 과학 시뮬레이션 매우 높음

mermaid-diagram



머신 유형 선택 플로우

image



부팅 디스크 설정



OS 이미지 선택

  • Ubuntu
    • 가장 널리 사용되는 Linux 배포판
    • LTS(Long Term Support) 버전 권장
    • ubuntu-2204-lts (22.04), ubuntu-2004-lts (20.04)
  • Debian
    • 안정성 중시
    • 서버 환경에 최적화
  • CentOS / Rocky Linux
    • RHEL 호환 배포판
    • 엔터프라이즈 환경



디스크 유형 선택

디스크 유형 IOPS 처리량 비용 사용 사례
Standard Persistent Disk 낮음 낮음 가장 저렴 개발/테스트, 백업 데이터
Balanced Persistent Disk 중간 중간 중간 일반 웹 서버, 애플리케이션 서버
SSD Persistent Disk 높음 높음 높음 데이터베이스, 고성능 I/O
Extreme Persistent Disk 매우 높음 매우 높음 매우 높음 미션 크리티컬 DB, 고성능 분석

mermaid-diagram

  • 성능과 비용 트레이드오프
    • 대부분의 경우 Balanced Persistent Disk 권장
    • DB 서버는 SSD Persistent Disk 고려



초기 설정 및 자동화



Startup Script 활용

  • VM 부팅 시 자동 실행되는 스크립트
  • 패키지 설치, 설정 적용, 서비스 시작 등 자동화
  • 일관된 환경 구성 보장



Startup Script 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
# 시스템 업데이트 및 Nginx 설치
apt-get update
apt-get install -y nginx

# 커스텀 홈페이지 설정
echo "Hello from GCP Compute Engine!" > /var/www/html/index.html

# Nginx 서비스 시작 및 부팅 시 자동 시작 설정
systemctl start nginx
systemctl enable nginx

# Cloud Ops Agent 설치 (로깅 및 모니터링)
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install



Metadata 활용

  • VM 메타데이터는 인스턴스 내부에서 동적으로 조회 가능
  • 환경변수처럼 사용하여 유연한 설정 구현
1
2
3
4
5
6
7
8
9
10
11
# VM 내부에서 메타데이터 조회
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/my-key" \
    -H "Metadata-Flavor: Google"

# 프로젝트 ID 조회
PROJECT_ID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" \
    -H "Metadata-Flavor: Google")

# 인스턴스 이름 조회
INSTANCE_NAME=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/name" \
    -H "Metadata-Flavor: Google")



SSH 접속 설정



접속 방법 비교

image



Console 웹 SSH 접속

  • GCP Console에서 우측 SSH 버튼 클릭
  • 브라우저 기반 터미널 즉시 실행
  • 별도 설정 없이 빠른 접속 가능

  • 초기 설정 예시
    1
    2
    3
    4
    5
    6
    7
    8
    
    # root 비밀번호 설정
    sudo passwd
      
    # root 계정으로 전환
    su -
      
    # OS 버전 확인
    cat /etc/*-release
    



gcloud CLI SSH 접속 (권장)

  • SSH 키 자동 생성 및 관리
  • 로컬 터미널 환경 사용 가능
  • 가장 편리하고 안전한 방식
1
2
3
4
5
6
7
8
9
10
# 기본 접속
gcloud compute ssh my-web-server --zone=us-central1-a

# 특정 사용자로 접속
gcloud compute ssh username@my-web-server --zone=us-central1-a

# 프로젝트 지정
gcloud compute ssh my-web-server \
    --zone=us-central1-a \
    --project=my-project-id



수동 SSH 키 등록

  • 전통적인 SSH 키 기반 인증 방식
  • 팀원 간 키 공유 시 유용



SSH 키 생성

1
2
3
4
5
# RSA 키 생성 (권장 4096 비트)
ssh-keygen -t rsa -f ~/.ssh/gcp-instance -C "user@example.com" -b 4096

# ED25519 키 생성 (최신, 더 안전)
ssh-keygen -t ed25519 -f ~/.ssh/gcp-instance -C "user@example.com"
  • 옵션 설명
    • -t
      • 키 생성 타입 선택 (rsa, ed25519 등)
    • -f
      • 생성할 키 파일명
    • -C
      • 주석 (GCP 계정 이메일 권장)
    • -b
      • 키 비트 수 (RSA의 경우 4096 권장)



SSH 키 메타데이터 등록

  • GCP Console 이동
    • Compute Engine메타데이터SSH 키 탭 image
    • 수정항목 추가
    • Public Key 내용 복사 후 입력
      • ~/.ssh/gcp-instance.pub 파일 내용
    • 저장
  • Private 키로 접속
    1
    
    ssh -i ~/.ssh/gcp-instance username@EXTERNAL_IP
    



OS Login 설정 (엔터프라이즈 권장)

  • IAM 기반 접근 제어
  • 개별 SSH 키 관리 불필요
  • 조직 수준 보안 정책 적용 가능

  • 조직 수준 보안 정책 적용 가능

mermaid-diagram



OS Login 활성화

1
2
3
4
5
6
7
8
# 프로젝트 전체에 OS Login 활성화
gcloud compute project-info add-metadata \
    --metadata enable-oslogin=TRUE

# 특정 인스턴스에만 활성화
gcloud compute instances add-metadata my-web-server \
    --zone=us-central1-a \
    --metadata enable-oslogin=TRUE



IAM 역할 부여

역할 권한 사용 시나리오
Compute OS Login 기본 SSH 접속 일반 개발자
Compute OS Admin Login sudo 권한 SSH 접속 시스템 관리자
1
2
3
4
5
6
7
8
9
# OS Login 권한 부여
gcloud projects add-iam-policy-binding my-project-id \
    --member=user:dev@example.com \
    --role=roles/compute.osLogin

# OS Admin Login 권한 부여
gcloud projects add-iam-policy-binding my-project-id \
    --member=user:admin@example.com \
    --role=roles/compute.osAdminLogin



방화벽 및 네트워크 보안



방화벽 규칙 생성

image



Console에서 방화벽 규칙 생성

  • 탐색 메뉴 이동
    • VPC 네트워크방화벽 image
    • 방화벽 규칙 만들기 클릭 image
  • 방화벽 규칙 설정
    • 이름
      • 규칙을 식별할 수 있는 이름 (예: allow-http-https)
    • 네트워크
      • 규칙이 적용될 VPC 네트워크 선택
    • 트래픽 방향
      • 수신(Ingress): 외부 → VM
      • 송신(Egress): VM → 외부
    • 대상
      • 대상 태그: 특정 태그를 가진 인스턴스에만 적용
      • 모든 인스턴스: VPC의 모든 인스턴스에 적용
    • 소스 IP 범위
      • 0.0.0.0/0: 전 세계 모든 IP 허용 (주의 필요)
      • 특정 IP/CIDR: 제한된 접근
    • 프로토콜 및 포트
      • TCP 80 (HTTP)
      • TCP 443 (HTTPS)
      • TCP 22 (SSH)
      • TCP 8080 (커스텀 애플리케이션)

      • TCP 8080 (커스텀 애플리케이션)

mermaid-diagram



CLI로 방화벽 규칙 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# HTTP/HTTPS 허용
gcloud compute firewall-rules create allow-web-traffic \
    --network=default \
    --direction=INGRESS \
    --action=ALLOW \
    --rules=tcp:80,tcp:443 \
    --source-ranges=0.0.0.0/0 \
    --target-tags=http-server,https-server

# SSH 접속 제한 (특정 IP만 허용)
gcloud compute firewall-rules create allow-ssh-restricted \
    --network=default \
    --direction=INGRESS \
    --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=123.456.789.0/24 \
    --target-tags=ssh-restricted

# 애플리케이션 포트 허용
gcloud compute firewall-rules create allow-app-port \
    --network=default \
    --direction=INGRESS \
    --action=ALLOW \
    --rules=tcp:8080 \
    --source-ranges=0.0.0.0/0 \
    --target-tags=app-server



인스턴스에 방화벽 연결

  • 탐색 메뉴 이동
    • Compute EngineVM 인스턴스 image
    • 대상 인스턴스 선택 → 수정 image
  • 네트워크 태그 추가
    • 방화벽 규칙에서 정의한 태그 입력
    • 예: http-server, https-server, app-server image
    • 저장



보안 권장 사항

항목 위험한 설정 안전한 설정
SSH 접근 Source: 0.0.0.0/0 Source: 회사 IP/Bastion Host만 허용
External IP 모든 VM에 공인 IP 할당 필요한 경우만 할당, 나머지는 Private IP
방화벽 규칙 모든 포트 열림 필요한 포트만 최소 권한 원칙
SSH 키 관리 수동 키 관리, 키 공유 OS Login 사용, IAM 기반 제어
서비스 계정 기본 서비스 계정 사용 커스텀 서비스 계정, 최소 권한 부여



IAM 및 접근 제어



주요 IAM 역할

역할 권한 범위 사용 대상
Compute Instance Admin (v1) 인스턴스 전체 제어 (생성/삭제/수정) 인프라 관리자
Compute Viewer 인스턴스 조회만 가능 읽기 전용 사용자
Compute OS Login SSH 접속 (일반 사용자) 개발자
Compute OS Admin Login SSH 접속 (sudo 권한) 시스템 관리자
Service Account User 서비스 계정으로 작업 수행 CI/CD 파이프라인



서비스 계정 설정

  • VM에 할당된 서비스 계정은 해당 VM이 다른 GCP 리소스에 접근할 때 사용
  • 기본 Compute Engine 서비스 계정은 과도한 권한 보유
  • 권장: 커스텀 서비스 계정 생성 및 최소 권한 부여
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 커스텀 서비스 계정 생성
gcloud iam service-accounts create my-vm-sa \
    --display-name="My VM Service Account"

# 필요한 역할만 부여 (예: Cloud Storage 읽기)
gcloud projects add-iam-policy-binding my-project-id \
    --member="serviceAccount:my-vm-sa@my-project-id.iam.gserviceaccount.com" \
    --role="roles/storage.objectViewer"

# 인스턴스 생성 시 서비스 계정 지정
gcloud compute instances create my-secure-vm \
    --zone=us-central1-a \
    --machine-type=e2-medium \
    --service-account=my-vm-sa@my-project-id.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform



비용 최적화 및 운영 팁



비용 절감 전략

image



운영 체크리스트

  • 개발/테스트 환경
    • E2 시리즈 사용하여 비용 절감
    • Spot VM(구 Preemptible VM) 고려
      • 최대 91% 할당 가능
      • 24시간 내 종료될 수 있음
      • 배치 작업, 빅데이터 처리에 적합
  • 프로덕션 환경
    • 적절한 머신 패밀리 선택
    • Committed Use Discounts 검토
      • 1년 약정: 37% 할인
      • 3년 약정: 57% 할인
    • 고가용성 구성
      • 다중 영역(Multi-zone) 배포
      • Load Balancer + Managed Instance Group
  • 네트워크 보안
    • Private IP 우선 사용
      • 외부 접속 불필요한 DB/내부 서버는 External IP 비할당
      • Cloud NAT로 아웃바운드 트래픽만 허용
    • SSH 접속은 Bastion Host 또는 IAP(Identity-Aware Proxy) 사용
    • 최소 권한 원칙 적용
  • 모니터링 및 로깅
    • Cloud Ops Agent 설치
      • Startup Script에 자동 설치 스크립트 포함
      • Cloud Logging 및 Cloud Monitoring 자동 연동
    • 알림 정책 설정
      • CPU/메모리 사용률
      • 디스크 I/O
      • 네트워크 트래픽
  • 자동화
    • Startup Script 활용
    • Infrastructure as Code (Terraform, Deployment Manager)
    • CI/CD 파이프라인 구축



Spot VM 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
# Spot VM 생성
gcloud compute instances create my-spot-vm \
    --zone=us-central1-a \
    --machine-type=e2-medium \
    --provisioning-model=SPOT \
    --instance-termination-action=DELETE \
    --image-family=ubuntu-2204-lts \
    --image-project=ubuntu-os-cloud

# Spot VM 상태 확인
gcloud compute instances describe my-spot-vm \
    --zone=us-central1-a \
    --format="get(scheduling.provisioningModel)"
  • 특징
    • 최대 91% 비용 절감
    • 24시간 내 종료 가능
    • GCP가 리소스 필요 시 언제든 회수
  • 적합한 워크로드
    • 배치 처리
    • 데이터 분석
    • CI/CD 빌드 서버
    • 렌더링 작업
  • 부적합한 워크로드
    • 프로덕션 웹 서버
    • 데이터베이스
    • 실시간 서비스



고급 기능



Instance Template 및 Managed Instance Group

  • 동일한 구성의 인스턴스 여러 개 생성 시 유용
  • 자동 확장(Auto-scaling) 구성 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Instance Template 생성
gcloud compute instance-templates create web-server-template \
    --machine-type=e2-medium \
    --image-family=ubuntu-2204-lts \
    --image-project=ubuntu-os-cloud \
    --tags=http-server \
    --metadata-from-file=startup-script=./startup.sh

# Managed Instance Group 생성 (자동 확장)
gcloud compute instance-groups managed create web-server-group \
    --base-instance-name=web-server \
    --template=web-server-template \
    --size=3 \
    --zone=us-central1-a

# Auto-scaling 설정
gcloud compute instance-groups managed set-autoscaling web-server-group \
    --zone=us-central1-a \
    --max-num-replicas=10 \
    --min-num-replicas=2 \
    --target-cpu-utilization=0.75



Cloud Ops Agent 설치

1
2
3
4
5
6
7
8
9
#!/bin/bash
# Startup Script에 포함

# Cloud Ops Agent 설치 (Logging + Monitoring)
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

# 설치 확인
sudo systemctl status google-cloud-ops-agent



트러블슈팅



일반적인 문제 및 해결

문제 원인 해결 방법
SSH 접속 실패 방화벽 규칙 누락 TCP:22 허용 규칙 추가
웹 서버 접속 불가 방화벽 규칙 또는 네트워크 태그 미적용 인스턴스에 올바른 태그 추가
디스크 용량 부족 부팅 디스크 크기 부족 디스크 확장 또는 추가 디스크 연결
성능 저하 부적절한 머신 타입 더 높은 머신 타입으로 변경
External IP 없음 Ephemeral IP 미할당 Static IP 예약 및 할당



디버깅 명령어

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 인스턴스 상태 확인
gcloud compute instances describe my-web-server \
    --zone=us-central1-a

# 시리얼 포트 로그 확인 (부팅 문제 디버깅)
gcloud compute instances get-serial-port-output my-web-server \
    --zone=us-central1-a

# 방화벽 규칙 확인
gcloud compute firewall-rules list

# 네트워크 연결 테스트
gcloud compute ssh my-web-server \
    --zone=us-central1-a \
    --command="curl -I https://www.google.com"



보안 강화 체크리스트

image



Reference

Contents