Understanding regions and zones
GCP에서 전세계에 가지고 있는 물리적인 데이터 센터는 3개의 단위로 나뉜다. 멀티 리전, 리전, 그리고 컴퓨팅 영역이 바로 그 단위이다.
우선 가장 크게는 멀티 리전(대륙 단위의 구분)으로 나뉘는데, 이는 유럽, 미국, 그리고 아시아 태평양이다. 이 멀티 리전 안에서 독립적인 지리적 위치로 구성되는 구분 단위를 리전이라고 한다. 이때 GCP가 실제로 가지고 있는 물리적인 데이터 센터와 내가 서비스를 호스팅하고 있는 지역이 가까울수록 네트워크 지연이 적기 때문에 리전을 가까운 곳으로 설정하는 것이 중요하다. 내가 한국에서 서비스를 제공하고 있다면, 당연히 Seoul 리전에 인프라를 구성해 놓아야 네트워크 지연이 적어질 것이다. GCP에서는 공식적으로 같은 리전 안에서는 왕복 네트워크 지연 시간이 1 밀리 세컨드 미만이라고 설명하고 있다.
리전 안으로 들어가면 컴퓨팅 영역이 존재한다. 이는 집중된 지리적 위치 내에서 GCP 리소스 위치를 의미하며, 간단하게 생각하자면 하나의 데이터 센터라고 보면 된다. 그런데 위에서 이미 같은 리전 안에서는 네트워크 지연이 거의 없다고 설명했었다. 그럼 같은 이미 같은 리전에 속해있다면, 굳이 컴퓨팅 영역도 똑같이 맞춰 줄 필요가 있을까? 전혀 없다. 오히려 컴퓨팅 영역은 여러 개를 사용하는 것이 좋다.
그 이유는 컴퓨팅 영역을 나누어 놓은 이유가 내결함성과 가용성을 위해서이기 때문이다. 내가 만든 서비스를 여러 컴퓨팅 영역에 걸처 구성해 놓았다면, 하나의 컴퓨팅 영역에 문제가 생겨도 서비스는 여전히 원활하게 제공되게 만들 수 있다. 이러한 의미를 가지고 있기 때문에 똑같은 개념을 AWS에서는 컴퓨팅 영역이 아니라 가용영역(availability zone)이라고 부른다.
Resources sit in projects
물리적인 GCP 리소스는 영역, 리전, 그리고 글로벌 단위에서 작동할 수 있다. Compute engine과 영구 디스크, 그리고 GKE의 노드는 영역 단위에서 작동하며, 해당 영역에 문제가 생길 경우 리소스도 사용할 수 없다. 리전 단위로 작동하는 리소스로는 GKE와 Cloud Datastore 등이 있으며, 글로벌 단위의 리소스로는 로드 밸런서와 VPC 등이 있다.
지금까지 본 리전과 컴퓨팅 영역은 GCP 리소스가 물리적으로 위치하는 곳이다. 그런데 GCP에서는 이 외에도 Proeject라는 단위를 제공하며, 모든 GCP 리소스는 반드시 프로젝트에 속할 것을 강제하고 있다. 그렇다면 프로젝트란 무엇일까? Project는 GCP 리소스들을 논리적으로 구성하는 단위로, 쉽게 생성되고 삭제되며 필요 시 복구할 수도 있다.
Resources have hierarchy
프로젝트는 또한 폴더와 조직 내에 속할 수 있다. 폴더는 각 프로젝트들을 관리하는데 유용하게 사용될 수 있으며, 조직은 엔터프라이즈 전체에 적용하는 정책을 설정할 수 있다. 이러한 계층 구조를 통해 신뢰 경계 및 리소스 격리를 생성하는 계층 구조를 정의할 수 있다. Cloud IAM을 통해 사용하는 모든 GCP 리소스에 대한 액세스 제어를 미세 조정하면 신뢰 경계를 만드는 것이 가능하다.
선택한 수준에서 엑세스 정책을 적용하면, 해당 정책이 하위 수준으로 상속되게 된다. 예를 들어, 조직 수준에서 적용한 IAM 정책은 그 아래의 폴더, 프로젝트, 리소스까지 적용된다.
단, 결제는 프로젝트 단위에서 진행된다.
Billing
GCP에서는 예산 및 알림, 결제 내보내기, 보고서라는 3가지 방법으로 빌링을 관리할 수 있다.
첫 번째인 예산은 결제 계정이나 프로젝트 수준에서 관리할 수 있다. 일정 수준에 다다르면 알림이나 웹훅이 작동하도록 설정할 수 있다. 이를 통해서 결제 알림이 발생할 때 리소스를 종료하는 자동화 스크립트를 트리거할 수 있다.
결제 내보내기를 통해서는 자동으로 해당 날짜의 상세한 결제 데이터와 사용량, 예상 비용 등을 BigQuery를 통해 Cloud Billing 데이터에 액세스하고 세부 분석을 수행할 수 있다.
보고서는 프로젝트 또는 서비스를 기반으로 지출을 모니터링 할 수 있는 콘솔의 추가 기능이다.
또한 임계치를 설정해서 일정 수준 이상으로 리소스를 사용하지 못하게 만들 수 있다. Rate quota를 사용하면 일정 시간 내에 일정 수준에서만 리소스 호출이 가능하게 만들 수 있으며, Allocation quota를 사용하면 한정된 리소스만 할당되도록 만들 수 있다. 물론, Google cloud 팀에게 문의하며 해당 리소스의 임계치를 변경하는 것도 가능하다.
Interacting with Google Cloud
GCP와 상호작용할 수 있는 방법에는 4가지가 있다.
GCP 콘솔(웹 유저 인터페이스)
- 아주 간단하게 클릭 몇 번만으로 리소스를 관리할 수 있다.
Cloud SDK와 Cloud Shell
- Cloud SDK를 컴퓨터에 설치하여 gcloud, kubectl, gsutil, bq 등의 명령줄 도구 모음을 사용하거나, 이러한 명령줄 도구가 이미 다 설치되어 있는 Cloud Shell을 사용할 수 있다. Cloud Shell은 항상 최신 수준으로 유지되고 인증된다.
- Cloud Shell은 사용할 때만 생성되는 compute engine과 5GB 영구 디스크 스토리지로 구성되어 있다. 이는 새 세션이 시작될 때 새롭게 연결된다. 따라서 Cloud Shell에서 웹 서버를 돌리는 것은 권장하지 않는다. Cloud Shell Editor를 사용해서 편리하게 코드를 편집하고 수정할 수 있지만, 이는 모범 사례는 아니다.
Cloud 콘솔 모바일 앱
- 앱을 통해 주요 측정 항목을 그래프로 보거나 리소스를 관리할 수 있으며, 추가 요금은 부여되지 않는다.
REST-based API
- 개발자들을 위해서 주로 사용되며, 애플리케이션 내부에 API를 통한 관리를 구현할 수 있다.