본문 바로가기
AI 빅데이터/Google Cloud Platform

[GCP] BigQuery로 외부에서 조직의 결제 정보 받아오기

by 마고커 2020. 3. 4.


GCP를 조직의 구성원들이 각기 다른 조직에서 다른 계정으로 사용하다보면, 관리가 제대로 되지 않을 수 있다. 아래 포스팅처럼 권한을 제어하는 것이 한가지 방법이고, 또 하나는 주기적으로 과금을 모니터링 해야 할 수도 있다.

 

[GCP] Cloud IAM과 Cloud ID로 사용자 계정 권한 주기

AWS도 마찬가지지만 GCP도 Cloud IAM(Identity and Authentication Management)라는 조직관리도구를 갖고 있다. 이를 사용하면 조직원의 계정이 사용할 수 있는 리소스나 권한을 제한할 수 있고, 과금도 한 계정에..

ml-cloud.tistory.com

위 포스팅에서처럼 결제를 연결하게 되면 아래와 같이 하나로 묶여 관리할 수 있다. 

과제별 결제 내역 - Credit만 사용하였다

그런데, 누구나 Google Console에 익숙한 것은 아니므로, 결제 내역만 따로 전달할 필요가 있다. '결제 내보내기'를 통해 BigQuery나 CSV 형태로 내보낼 수 있다. 다른 시스템에서 그 내용을 확인한다고 가정하고 BigQuery로 내보내기로 한다. 

결제 내보내기

BigQuery 메뉴에서 결제를 내보내고 싶은 프로젝트에 데이터세트 하나 만들어서 위와 같이 지정만 해주면 된다. 어차피 하나의 결제 계정으로 묶여 있어서 Organization 내 프로젝트들의 결제 정보는 모두 이 안에 들어가게 되므로, 프로젝트는 임의의 프로젝트로 지정해도 관계없다. 결제 정보가 생성되면 지정된 데이터세트 아래 'gcp_billing_export_v1_xxx' 형태의 테이블이 생성된다. 이제 여기 있는 정보들을 외부의 서버에서 가져가 보여주기로 한다.  외부의 서버에서 GCP를 접근하려면 해당 프로젝트의 서비스 계정을 생성해야 한다. Cloud IAM의 서비스 계정을 하나 만든다. BigQuery 테이블에 접근할 수 있는 권한을 주면 되는데, 편의상 관리자 권한을 주었다. 주의할 점은 외부서버에서 Credential을 사용해야 하므로 서비스 계정 만드는 과정에서 키를 json 형태로 만들어 외부서버에 넣어둔다.

서비스 계정 설정

Python으로 BigQuery에 접근해서 결제 정보를 가져오기로 한다.

import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="./bq-billing-aws.json"

from google.cloud import bigquery

client = bigquery.Client()

# Perform a query.
QUERY = ('select invoice.month, cost_type, project.name as prj_name ,project.id as prj_id,  service.description, service.id as svc_id,  sum(
cost) as cost from `serene-anagram-268601`.billing.gcp_billing_export_v1_01CF3E_7D3AE2_9700B0 group by invoice.month, cost_type, project.nam
e,project.id,  service.description, service.id')

query_job = client.query(QUERY)
rows = query_job.result()

for row in rows:
    print(row.month, row.cost_type, row.prj_name,row.prj_id, row.description, row.cost)


bq-billing-aws.json이 서비스 계정 만들 때 생성해 둔 credential이고, GCP에서는 GOOGLE_APPLICATION_CREDENTIALS에 해당 정보를 넣어주면, 서비스 계정 인증이 된다. bigquery package를 통해 위 쿼리를 수행하면 아래와 같은 결과를 보여준다. 

[ec2-user@ip-172-31-16-32 ~]$ python3 test_billing.py
202002 regular ai-hub ai-hub-264612 Cloud DNS 0.011792999999999998
202002 regular ai-hub ai-hub-264612 BigQuery 0.0
202002 regular Natural-Language-Process serene-anagram-268601 BigQuery 0.0
202002 regular Natural-Language-Process serene-anagram-268601 Stackdriver Logging 0.0
202002 regular ai-infra-project-1 ai-infra-project-1 BigQuery 0.0
202002 regular ai-infra-project-1 ai-infra-project-1 Stackdriver Logging 0.0
202002 regular ai-infra-project-1 ai-infra-project-1 Compute Engine 2.641863999999999

AWS 서버에서 GCP Organization 내 프로젝트들의 결제 정보를 리소스별로 가져올 수 있었다.



댓글