티스토리 뷰
안녕하세요. 이번엔 GCP Python을 이용해서 API를 다뤄보는 시간입니다.
사실 업무하면서 gcloud.bat 파일을 바로가기로 만들어서 subprocess로 호출하는 방식으로 사용하려고 했는데 너무 불편하더라구요 -_-;;
먼저 google-api-python-client를 설치해줍니다.(github 링크, Python 외 다른 언어 라이브러리는 여기 참조)
아니 근데 jen-jang 이게 이전 버전의 라이브러리라고 하네요?(글 쓰다가 알았네요 --;;)
뭐 아무튼 잡설은 여기까지 하고 일단 설치해서 사용해봅시다.(나중에 최신꺼 설치해서 사용하는 것도 업로드 할게요)
먼저, google-api-python-client를 설치합시다.(아래 진행하는 내용 관련된 링크)
pip install google-api-python-client
간단하게 설치가 완료되면 아래와 같이 확인해줍니다.
위 그림 설명과 같이 되지 않기를 바라며 여러분은 꼭! 문서를 잘 읽으세요...(자존심만 죽여도 반은 간다)
뭐 암튼 설치를 확인했으니까 이제 API를 사용해봐야겠죠? 근데 여기서 문제가 발생합니다.
1. googleapiclient에 대한 문서
2. 1번에서 불러오는 리소스들에 대한 API 문서
이렇게 두 개가 존재합니다(엌ㅋㅋㅋㅋ 솔직히 이거 처음 검색하면 멘탈 털림 ㅇㅈ? ㅇㅇㅈ~ 반박시 머머...아, 아닙니다)
아무튼 이런 혹독한(?) 과정을(실제로 오래 걸림 ㅠ) 거쳐서 준비가 됐다면 샘플 코드를 보고 테스트를 해봅시다.(명령어 사진 위에 있는 링크에 있는 코드로 테스트 진행 해봅시다. 샘플들 모여있는 github 링크)
#!/usr/bin/env python
# Copyright 2015 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import argparse
import os
import time
import googleapiclient.discovery
from six.moves import input
# [START list_instances]
def list_instances(compute, project, zone):
result = compute.instances().list(project=project, zone=zone).execute()
return result['items'] if 'items' in result else None
# [END list_instances]
# [START wait_for_operation]
def wait_for_operation(compute, project, zone, operation):
print('Waiting for operation to finish...')
while True:
result = compute.zoneOperations().get(
project=project,
zone=zone,
operation=operation).execute()
if result['status'] == 'DONE':
print("done.")
if 'error' in result:
raise Exception(result['error'])
return result
time.sleep(1)
# [END wait_for_operation]
# [START run]
def main(project, zone):
compute = googleapiclient.discovery.build('compute', 'v1')
instances = list_instances(compute, project, zone)
print('Instances in project %s and zone %s:' % (project, zone))
for instance in instances:
print(' - ' + instance['name'])
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('project_id', help='Your Google Cloud project ID.')
parser.add_argument(
'--zone',
default='us-central1-a',
help='Compute Engine zone to deploy to.')
args = parser.parse_args()
main(args.project_id, args.zone)
# [END run]
일단 샘플코드를 list만 사용하도록 수정해서 실행했습니다.
실행하면 위와 같은 결과가 나오고, 실제로 GCP 웹 콘솔에서 확인해보면 아래와 같습니다.
음.. 이게 끝인데요. 처음 사용하려고 할 땐 엄청 삽질해서 오래걸렸는데 여러분은 운이 좋으신 겁니다. 이거 보고 따라하면 1-4-1000-2!
후.. 나란 인간 왜 이렇게 착한건지(me-친)
뭐 아무튼 이건 이렇게 끝이고요.(갑자기 이렇게?!) 위에 실행한거 보시면 경고가 나오는데 저건 저희가 '서비스 계정'이 아닌 실제 사용하는 계정으로 실행했기 때문입니다.
뭐 다양한 이유가 있겠지만 서비스 계정을 사용해야 하는 이유는 아니 사용하면 좋은 이유는 보안성도 높일 수 있고(사용하려는 역할만 부여하고 사용하면 되니까! 게다가 사용 가능한 유저도 지정 가능 ㄱㅇㄷ!), 서비스 계정으로 방화벽도 열 수 있고(......), 키 유출되면 돈도 잃고 욕도 많이 먹을 수 있고(이건 아니지 미1치느노마) 등등 암튼 나쁠게 없습니다.
서비스 계정 관련 포스팅 : https://turtle1000.tistory.com/78
다음 시간엔 실제로 서비스 계정과 키를 발급받아서 API 사용 시에 오류가 나오지 않고 깔끔하게 사용하는 방법을 포스팅 해보겠습니다. 그때까지 모두 ㅂㅂ2!
'퍼블릭클라우드 > GCP' 카테고리의 다른 글
4. IAM Custom Role 생성/부여/관리 (0) | 2019.11.17 |
---|---|
2. 서비스 계정 키 발급 및 링크(연결) (0) | 2019.11.10 |
1. GCP SDK 설치 (0) | 2019.11.10 |
- Total
- Today
- Yesterday
- 4xx
- CIS
- terraform
- 2xx
- platform
- defaulttheme
- steampipe
- compliance
- stateType
- cloudsecurity
- security
- AWS #CIS
- fleet manager
- findinglatestversion
- 계정정보저장
- teplate
- aws
- scp
- IAM
- temlate
- ControlTower
- REACT
- 우주와컴퓨터
- conftest policy
- .get()
- opensource
- Cloud
- JavaScript
- ViaAWSService
- web
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 | 31 |