본문 바로가기

Data & MarTech/Google Cloud Platform

[GCP] 구글 클라우드 빌링 금액 조회하기

반응형


구글 클라우드 빌링 조회하기 구현


 

1. 들어가며

IT부서를 제외한 타부서에서 직접 클라우드 사용비용을 확인할 필요가 없으나 직접 업무부서에서 실제 사용금액을 확인해야 하는 경우에 용이하게 사용할 수 있어 빌링 조회하기 기능을 구현해 보았습니다.

2. 조회기능 구현

1) 빌링 전용 빅쿼리 테이블 생성

먼저 Billing > Billing export 메뉴를 선택합니다.

Billing export

 

BIGQUERY EXPORT 탭을 선택한 다음 EDIT SETTINGS를 클릭합니다.

Billing Export - EDIT SETTINGS

 

CREATE NEW DATASET을 선택하여 빌링데이터가 적재할 새 데이터셋을 만듭니다. 빌링데이터는 명시된 테이블이 있지 않고, 필요시 데이터셋을 생성하여야 합니다. 저는 billing_data라는 데이터셋을 생성하였습니다.

CREATE NEW DATASET

빅쿼리에 들어가서 빌링조회를 생성한 프로젝트를 선택하면, billing_data라는 데이터셋이 생성된 것을 확인할 수 있습니다. 빌링데이터는 추후 자동으로 해당 데이터셋에 적재됩니다.

billing dataset 생성

 

2) 조회 모듈 구현

이번 코드는 node.js로 구현하였습니다. 빅쿼리 모듈을 사용하고 service account는 로컬 컴퓨터 개발환경에 Export하였습니다.
빅쿼리에서 제공하는 시간대로 인해 데이터가 맞지 않을 경우 아래와 같이 DATE CAST에 "PST8PDT"를 선언하세요.
'use strict';

const { BigQuery } = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

function main() {

    function getSum(total, {tot_cost}) {
        return total + tot_cost;
    }

    async function query() {
        // Queries the U.S. given names dataset for the state of Texas.

        const query = `
        SELECT CAST(DATE(usage_start_time, "PST8PDT") AS STRING) as start_dt, cast(round(sum(cost)) as INT64 ) as tot_cost 
        FROM \`<billing project>.<billing dataset>.<billing table>\` 
        WHERE 
        project.name='<your project name>'
        AND DATE(usage_start_time, "PST8PDT") BETWEEN '2023-05-23' AND '2023-05-29'
        GROUP BY project.name, start_dt
        ORDER BY project.name, start_dt asc
        ;`;

        // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
        const options = {
            query: query,
            // Location must match that of the dataset(s) referenced in the query.
            location: 'asia-northeast3',
        };

        // Run the query as a job
        const [job] = await bigquery.createQueryJob(options);
        console.log(`Job ${job.id} started.`);

        // Wait for the query to finish
        const [rows] = await job.getQueryResults();

        // map        
        const result = await rows.reduce(getSum, 0);
        console.log('tot_cost: ', result);

        // Print the results
        console.log(JSON.stringify(rows));
    }

    query();
}
main(...process.argv.slice(2));
빅쿼리 SQL 예시 - 인보이스당 모든 비용 합계(링크)
SELECT
  invoice.month,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project.dataset.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
GROUP BY 1
ORDER BY 1 ASC
;

 

3. 마치며

구글 빌링 데이터 구현은 많은 경우에 사용하지 않지만 앞서 말한 것처럼 구현된 서비스비용을 부담하는 부서에게 공유하기 위한 대시보드 구현등에 용이하게 사용할 수 있습니다. 쿼리 자체는 간단한 부분이지만 설정에서 몇몇 단계가 생소할 수 있으니 이 블로그 및 구글 공식문서를 참고하여 필요시 구현에 활용하시기 바랍니다.

 

4. 참고자료

1) 클라우드 빌링 쿼리 

 

Cloud Billing 데이터 내보내기의 쿼리 예시  |  Google Cloud

의견 보내기 Cloud Billing 데이터 내보내기의 쿼리 예시 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에서는 BigQuery로 내보내 BigQuery에 저장된 Cloud

cloud.google.com

 

반응형