Cloud Shell 명령어의 기본 구조
1. gcloud 기본 구문 패턴
gcloud [Group/Service] [Resource/Component] [Action] [Resource_name] [Flags]
예시:
gcloud compute instances create myvm --zone=asia-northeast-a
- 그룹 자체가 단일 대상을 다루는 경우 Resource를 생략한다.
auth나config같은 그룹은 다루는 대상이 명확하므로 굳이 리소스명을 붙이지 않고 바로 동작을 붙여 사용한다.
- 세부 리소스가 복수 개 존재하는 경우에는 Resource가 필요하다.
compute안에는instances,disks,networks등의 여러 종류의 리소스가 존재하므로 무엇을 제어할지 명시해야 한다.
2. 실제 gcloud 명령어의 3가지 주요 패턴
# 패턴 1: 가장 기본적인 풀 구조 (대부분의 GCP 제품) gcloud [Group] [Resource] [Action] + ([Argument + Flag]) 예: gcloud compute instances list # 패턴 2: 그룹 내 대상이 단일한 경우 (리소스 생략) gcloud [Group] [Action] + ([Argument + Flag]) 예: gcloud auth list, gcloud config list # 패턴 3: 계층이 더 깊은 복잡한 리소스의 경우 (서브 리소스) gcloud [Group] [Resource] [Sub-Resource] [Action] + ([Argument + Flag]) 예: gcloud container clusters node-pools list
Argument vs Flag
- Argument:
--없이 그냥 쓰는 이름이나 필터값- Flag:
--를 붙여서 키-값 형태로 전달하는 설정값
3. 명령어 해석의 핵심 (왼쪽에서 오른쪽으로 구체화)
gcloud config set compute/region us-east1- 해석: 설정을 세팅한다(바꾼다)
compute/region을us-east1으로
- 해석: 설정을 세팅한다(바꾼다)
gcloud config get-value compute/region- 해석: 설정의 값을 가져온다
compute/region의
- 해석: 설정의 값을 가져온다
gcloud config set compute/zone us-east1-d- 해석: 설정을 세팅한다(바꾼다)
compute/zone을us-east1-d로
- 해석: 설정을 세팅한다(바꾼다)
4. Region과 Zone의 차이
- 둘 다 리소스가 존재하는 지역을 의미하나 Region이 더 넓은 개념이다. (예: 미국 동부 사우스캐롤라이나 > 그 안의 물리적 데이터센터)
- 완전히 다른 Zone(
us-east1-avsus-east1-b) 사이에는 전력망, 냉각 장치, 백업 발전기, 네트워크 인프라가 100% 물리적으로 분리되어 있다. - 따라서
us-east1-aZone 데이터센터 전체에 대형 화재나 정전이 발생하더라도,us-east1-bZone은 아무런 영향을 받지 않고 정상 작동한다.
5. 프로젝트 및 환경 변수 설정
- 여기에서
project-info역시 Resource로project-info에는 SSH 키, 기본 네트워크 설정, 리소스 사용량 제한인 Quota 등이 존재한다. $는 뒤에 있는 명령어를 실제값으로 바꿔주는 것이다.- 여기에서 만약 project 이름이 A라면 project의 value를 가져오는 것이므로
--project $(gcloud config get-value project)자리에 A가 들어가는 것이다.
export PROJECT_ID=$(gcloud config get-value project)
- 변수에 값을 할당할 수 있는데 이런 형식으로 쓰면 된다.
PROJECT_ID에 project의 이름을 할당하는 것이다.
export PROJECT\_ID=$(gcloud config get-value project)
ZONE이라는 변수에compute/zone을 할당하는 것이다.- 만약 zone이
us-central1-a라면ZONE에us-central1-a가 할당된다.
echo -e "PROJECT ID: $PROJECT_ID\nZONE: $ZONE"
echo는 출력-e는\n(줄바꿈) 등의 출력 형식에 쓰이는 기호를 인식한다.- 해석: compute의 instances를 만들어라
gcelab2라는 이름으로, machine type은e2-medium으로, zone은ZONE에 할당되었던 값으로 한다.
6. 도움말 및 기본 설정 관리
gcloud compute instances create --help- 명령어 맨 뒤에
--help를 붙이면, 해당 명령어 위치에서 사용할 수 있는 모든 옵션을 보여준다.
- 명령어 맨 뒤에
gcloud -h--help의 줄임말
gcloud config --help와gcloud help config- 동일한 결과를 출력하는 명령어이다.
gcloud config list- 사용자가 직접 설정한 config만 출력
gcloud config list --all- 모든 config를 출력
gcloud components listcomponents: 특정 서비스 전용 추가 도구(kubectl,bq,gsutil,pubsub-emulator등)
7. 인스턴스 및 방화벽 조회 / 필터링
gcloud compute instances list- instance 리스트 출력
gcloud compute instances list --filter="name=('gcelab2')"- instance 중에서 이름이
gcelab2인 것만 출력
- instance 중에서 이름이
gcloud compute firewall-rules list- firewall-rules(방화벽) 리스트 출력
gcloud compute firewall-rules list --filter="network='default'"- firewall-rules 중에서 network가
default인 것만 출력
- firewall-rules 중에서 network가
gcloud compute firewall-rules list --filter="NETWORK:'default' AND ALLOW:'icmp'"- firewall-rules 중에서 network가
default이고 allow가icmp인 것만 출력
- firewall-rules 중에서 network가
‘=’ 와 ‘:’ 의 차이점
=: 문자열이 토씨 하나 틀리지 않고 정확히 똑같아야만 참(True)이 된다.:: 해당 키나 문자열 내에 검색어가 부분적으로 포함되어 있거나 리스트 요소로 존재하면 참(True)이 된다. (대소문자 구분 안 함)
8. SSH 접속 및 웹 서버 설치/검증
gcloud compute ssh gcelab2 --zone $ZONE
$ZONE에 있는gcelab2(instance)를 ssh로 연결한다.--zone을 굳이 명시하는 이유? 서로 다른 존에서 중복된 이름이 있을 수 있기 때문이다!
sudo apt update && sudo apt install -y nginx
sudo: 관리자 권한으로 해당 명령어를 실행한다(패키지 설치/업데이트에는 높은 권한이 필요하기 때문)apt update: 리눅스 저장소에서 최신 패키지 목록 정보를 새로고침한다.&&: 앞의 명령어가 성공할 경우에만 뒤의 명령어를 연속해서 실행한다.apt install: 지정한 패키지를 시스템에 새로 설치한다.-y: 설치 과정에서 물어보는 “계속 진행하시겠습니까? [Y/n]” 질문에 자동으로 ‘Yes’를 입력하고 넘어간다.nginx: 설치하고자 하는 패키지 이름
exit
- SSH 원격 접속을 종료하고 원래 터미널로 돌아오기 위함
curl http://$(gcloud compute instances list --filter=name:gcelab2 --format='value(EXTERNAL_IP)')
- instance에서
gcelab2가 이름인 것만 조회하는데 형식을 제외하고EXTERNAL_IP값만 추출한다. curl: 웹 페이지에 HTTP 요청을 보내서 서버가 돌려주는 결과(HTML 코드 등)를 터미널 화면에 출력하는 도구
9. 방화벽 태그 및 규칙 설정
- GCP의 방화벽 규칙(Firewall Rules)은 기본적으로 “특정 태그가 달린 VM에만 방화벽 통로를 열어준다”는 방식으로 작동하기 때문에 태그를 붙인다. (http와 https는 사용되는 포트가 다르기 때문에 두 개의 태그를 붙임)
--direction: 트래픽 방향--priority: 규칙의 우선순위 (숫자가 작을수록 우선 적용된다)--network: 이 방화벽 규칙을 적용할 VPC 네트워크 이름--action: 조건에 맞는 트래픽을 허용할지, 차단할지 선택--rules: 허용할 프로토콜 및 포트--source-ranges: 출발지 IP 범위--target-tags: 목적지 VM의 태그
10. Cloud Logging
gcloud logging logs list- 모든 로그의 이름 출력
gcloud logging logs list --filter="compute"- compute인 로그만 출력
gcloud logging read "resource.type=gce_instance" --limit 5- resource type이 compute engine의 VM인 로그만 5개로 제한하여 출력
gcloud logging read "resource.type=gce_instance AND labels.instance_name=gcelab2" --limit 5- resource 타입이 compute engine의 VM이며 instance의 이름이
gcelab2인 것만 5개로 제한하여 출력
- resource 타입이 compute engine의 VM이며 instance의 이름이
11. 추가 GCP 주요 명령어 요약
gcloud beta interactive
- 해석: 대화형(Interactive) 모드로 진입한다.
- 특징: 명령어를 작성하는 중에 뒤에 올 수 있는 하위 명령어와 플래그를 실시간으로 보여주어 초보자가 사용하기 편리하다.
gcloud compute instances describe myvm –zone ZONE
- 해석:
myvm이라는 이름의 가상 머신(VM) 인스턴스에 대한 상세 정보를 조회한다. --zone ZONE: 해당 VM이 위치한 실제 존(Zone) 이름을 지정하는 플레이스홀더이다. (예:--zone us-central1-a)
gsutil cp gs://cloud-training/Migrating2gcp/index.js .
gsutil: 구글 클라우드 스토리지(GCS)를 명령어 라인에서 관리하기 위한 도구- 해석: 지정된 GCS 버킷 경로(
gs://cloud-training/Migrating2gcp/index.js)에 있는 파일을 현재 내 컴퓨터(또는 현재 작업 중인 가상 머신 경로.)로 복사(다운로드)한다.
gcloud storage cp gs://cloud-training/Migrating2gcp/index.js .
(최신 권장 방식: gcloud 단일 CLI 통합 및 속도 최적화)
node index.js
- 해석: Node.js 런타임 환경을 이용해 현재 폴더에 있는
index.js자바스크립트 파일을 실행한다.