반응형
구글 클라우드 빌링 조회하기 구현
1. 들어가며
IT부서를 제외한 타부서에서 직접 클라우드 사용비용을 확인할 필요가 없으나 직접 업무부서에서 실제 사용금액을 확인해야 하는 경우에 용이하게 사용할 수 있어 빌링 조회하기 기능을 구현해 보았습니다.
2. 조회기능 구현
1) 빌링 전용 빅쿼리 테이블 생성
먼저 Billing > Billing export 메뉴를 선택합니다.
BIGQUERY EXPORT 탭을 선택한 다음 EDIT SETTINGS를 클릭합니다.
CREATE NEW DATASET을 선택하여 빌링데이터가 적재할 새 데이터셋을 만듭니다. 빌링데이터는 명시된 테이블이 있지 않고, 필요시 데이터셋을 생성하여야 합니다. 저는 billing_data라는 데이터셋을 생성하였습니다.
빅쿼리에 들어가서 빌링조회를 생성한 프로젝트를 선택하면, billing_data라는 데이터셋이 생성된 것을 확인할 수 있습니다. 빌링데이터는 추후 자동으로 해당 데이터셋에 적재됩니다.
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) 클라우드 빌링 쿼리
반응형
'Data & MarTech > Google Cloud Platform' 카테고리의 다른 글
Plugin execution not covered by lifecycle configuration (0) | 2015.01.27 |
---|---|
[Google App Engine] Java Project 생성, 로컬 테스트 및 배포 (0) | 2014.10.06 |
[Google App Engine] Index of Features (0) | 2014.10.06 |
[Google App Engine] Google App Engine이란? (0) | 2014.10.06 |