Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

GCP SDK를 사용하면 Command Line Interface(CLI)를 통해 GCP내 작업들을 쉽게 수행 가능합니다.

https://cloud.google.com/sdk

  • 각 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

애플리케이션 인증 관련한 문서 : https://sysadmin.atlassian.net/wiki/pages/createpage.action?spaceKey=CLOUD&title=%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%20%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC%20%EC%9C%84%ED%95%9C%20GCP%20%EC%97%90%EC%84%9C%EC%9D%98%20%EC%9D%B8%EC%A6%9D&linkCreation=true&fromPageId=2275836166

애플리케이션에서는  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

  • No labels