GCP SDK를 사용하면 Command Line Interface(CLI)를 통해 GCP내 작업들을 쉽게 수행 가능합니다.
각 OS별 프로그램 설치
gcloud init : gcloud 초기화시 project, region, zone 을 아래와 같이 선택함
region : asia-northeast3
zone : asia-northeast3-a
project : vntg-gw-dev-324106
gcloud 작동 확인 :
gcloud compute instances list
gcloud 환경설정
https://cloud.google.com/sdk/gcloud/reference/init
https://cloud.google.com/sdk/gcloud/reference/config/set
$ gcloud init --project=vntg-gw-dev-324106 --skip-diagnostics $ gcloud config set project vntg-gw-dev-324106 $ gcloud config set compute/region asia-northeast3 $ gcloud config set compute/zone asia-northeast3-a
macOS에서의 설정
Cloud SDK를 설치하고 사용하기 위해서는 python3 (3.7, 3.8), python2 (2.7.9 이상)가 필요합니다.
$ python -V Python 3.8.12
macOS Big sur 기준으로 xcode와 Homebrew가 설치되어 있다면 3.9버전으로 설정되어 있을 확률이 높습니다. 버전이 맞지 않으면 에러가 발생하니 꼭 확인해야합니다.
버전을 확인 했으면 SDK를 다운로드 합니다.
https://cloud.google.com/sdk/docs/install
파일 목록 중 자신의 플랫폼에 맞는 파일을 다운로드 합니다. 그 다음 다운로드 받은 SDK 압축파일을 원하는 위치에 옮겨 놓고 압축을 해제합니다.
그 다음 환경변수를 설정합니다. bash면 .bashrc, zsh면 .zshrc
export PATH=$PATH:<GOOGLE_CLOUD_SDK_PATH>/bin
<GOOGLE_CLOUD_SDK_PATH>를 압축해제한 경로로 바꿔주면 됩니다.
$ source .zshrc $ gcloud -v Google Cloud SDK 308.0.0 bq 2.0.60 core 2020.08.28 gsutil 4.53
주의사항
설치와 설정이 끝난 후 gcloud를 실행시키면 아래와 같은 에러가 발생하는 상황이 생길 수 있습니다.
Unable to connect to the server: error executing access token command "/usr/lib64/google-cloud-sdk/bin/gcloud config config-helper --format=json": err=exit status 1 output= stderr=Traceback (most recent call last): File "/usr/lib64/google-cloud-sdk/lib/gcloud.py", line 104, in main() File "/usr/lib64/google-cloud-sdk/lib/gcloud.py", line 62, in main from googlecloudsdk.core.util import encoding File "/usr/lib64/google-cloud-sdk/lib/googlecloudsdk/init.py", line 23, in from googlecloudsdk.core.util import importing File "/usr/lib64/google-cloud-sdk/lib/googlecloudsdk/core/util/importing.py", line 23, in import imp File "/usr/lib64/python3.9/imp.py", line 23, in from importlib import util File "/usr/lib64/python3.9/importlib/util.py", line 2, in from . import abc File "/usr/lib64/python3.9/importlib/abc.py", line 17, in from typing import Protocol, runtime_checkable File "/usr/lib64/python3.9/typing.py", line 26, in import re as stdlib_re # Avoid confusion with the re we export. File "/usr/lib64/python3.9/re.py", line 124, in import enum File "/usr/lib64/google-cloud-sdk/lib/third_party/enum/init.py", line 26, in spec = importlib.util.find_spec('enum') AttributeError: module 'importlib' has no attribute 'util'
이 같은 에러는 python 버전이 맞지 않아 발생하는 에러로 위 로그를 보면 python3.9를 사용해서 실행하고 있습니다.
하지만 gcloud는 3.7, 3.8만 지원하므로 버전을 바꿔주어야 정상적으로 사용할 수 있습니다.
먼저 python3.8이 설치되어 있는지 확인합니다.
$ ls -l /usr/local/opt/ | grep python 또는 $ brew list | grep python
만약에 python3.7 또는 3.8이 없다면 설치해줍니다.
$ brew install python@3.8
설치가 끝났으면 3.8버전을 사용하도록 환경변수를 설정해주고 python 명령어가 python3.8 버전을 가리키도록 alias를 설정해줍니다.
.zshrc 또는 .bashrc에 아래 내용을 추가해줍니다.
export PATH="/usr/local/opt/python@3.8/bin:$PATH" alias python=/usr/local/opt/python@3.8/bin/python3
이후 수정한 내용을 반영 후 작동여부를 확인합니다.
$ source .zshrc $ gcloud -v Google Cloud SDK 308.0.0 bq 2.0.60 core 2020.08.28 gsutil 4.53
Ubuntu 에서 설치
https://cloud.google.com/sdk/docs/quickstart#deb
Cloud SDK 설치
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" \ | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list sudo apt-get install -y apt-transport-https ca-certificates gnupg curl https://packages.cloud.google.com/apt/doc/apt-key.gpg \ | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - sudo apt-get update && sudo apt-get install -y google-cloud-sdk
Cloud SDK 초기화 및 설정
Ubuntu 20.04 LTS 에서는 python 관련해서 따로 설정은 필요 없었음 (내장된 python3 - Python 3.8.5 를 사용하는 것으로 보임)
해당 문서 참고하여 나오는 질문에 답을 해줌. gcloud config list
명령을 이용하여 설정한 것 확인할 수 있음
$ gcloud init $ gcloud config list [compute] region = asia-northeast3 zone = asia-northeast3-a [core] account = tjmoon@vntgcorp.com disable_usage_reporting = True project = vntg-gw-dev-324106 Your active configuration is: [default]
설정하기
$ gcloud config set project vntg-gw-dev-324106 $ gcloud config set compute/region asia-northeast3
Windows
https://cloud.google.com/sdk/docs/quickstart-windows
Quickstart 가이드를 따라서 진행을 하면 됨.
https://cloud.google.com/sdk/docs/install 문서를 보면 윈도우즈의 경우 Cloud SDK는 기본적으로 Python 3가 번들로 함께 제공됩니다.
gcloud 도구 명령어 스크립팅
출력 필터링 및 형식 지정 : --filter
및 --format
플래그를 이용하여 원하는 정보를 뽑아낼 수 있음.
기초 가이드 : https://cloud.google.com/sdk/docs/scripting-gcloud
블로그에서 출력 필터링 및 형식 지정 예제 : https://cloud.google.com/blog/products/it-ops/filtering-and-formatting-fun-with
https://cloud.google.com/sdk/gcloud/reference/topic/formats
특정한 값 하나만 가져오려면 format에서 아래 형태를 이용하는 것이 간단함
$ gcloud projects describe vntg-gw-dev-324106 --format='value(projectNumber)' 446928390800 $ gcloud compute instances list --filter=name:gw-was-dev-1 --format='value(INTERNAL_IP)' 172.19.1.2
Python 사용하기
Python 세팅하기. 일반적인 Python 세팅을 하면 됨. Python용 Cloud 클라이언트 라이브러리는 아직 설치하지 않아도 됨. Python 개발환경 구성
sudo apt update sudo apt install -y python3 python3-dev python3-venv python3-pip mkdir -p ~/.env/python3 python3 -m venv ~/.env/python3 source ~/.env/python3/bin/activate
애플리케이션에서는 Google Cloud 클라이언트 라이브러리 를 이용하면 애플리케이션 기본 사용자 인증 정보(ADC)를 이용하여 필요한 사용자 인증 정보를 자동으로 찾아 애플리케이션을 인증할 수 있음.
GCP python 샘플예제
https://github.com/GoogleCloudPlatform/python-docs-samples
python application login 예제
https://cloud.google.com/docs/authentication/best-practices-applications 문서에서 애플리케이션 인증용 예제로 나온 프로그램을 이용한 것임. 소스코드에서 여러가지 인증방식을 이용하고 있음.
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git gcloud auth application-default login cd auth/cloud-client pip install -r requirements.txt $ python snippets.py implicit [<Bucket: staging.vntg-gw-dev-324106.appspot.com>, <Bucket: vntg-gw-attachment-dev>, <Bucket: vntg-gw-dev-324106.appspot.com>, <Bucket: vntg-gw-operation-dev>, <Bucket: vntg-gw-tm-operation-dev>]
python IAM 예제
https://github.com/GoogleCloudPlatform/python-docs-samples/blob/HEAD/iam/api-client/access.py )
소스코드에서 GOOGLE_APPLICATION_CREDENTIALS 를 이용하고 있음. 서비스 계정에서 api 키를 만들었다. 서비스 계정에서 만든 api 키를 환경변수 GOOGLE_APPLICATION_CREDENTIALS 에 설정을 해 주었다
AM 정책 관련한 아래 작업을 하는 경우에는 "Policy update access denied." 에러가 나왔다.
https://github.com/GoogleCloudPlatform/python-docs-samples/blob/HEAD/iam/api-client/access.py
https://stackoverflow.com/questions/65661144/getting-error-while-allowing-accounts-and-roles-in-terraform-for-gcp 등의 문서를 참고해서 서비스 계정을 만들 때 resourcemanager.projects.setIamPolicy
권한을 추가해 주었다. 해당 소스코드에서 권한이 필요해서 에러가 나왔을 것이다.
https://cloud.google.com/iam/docs/granting-changing-revoking-access#iam-get-policy-python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git export GOOGLE_APPLICATION_CREDENTIALS="/root/service_account/vntg-gw-dev-324106-22a44b2dcdd9.json" cd iam/api-client/ pip install -r requirements.txt python3 access.py get vntg-gw-dev-324106
0 Comments