본문 바로가기
GCP (공부중)

GCP Billing Budget Alert 구글챗으로 받기 (W.Python3.7)

by ohrohi 2023. 3. 30.
반응형

준비사항 및 주의사항.

- 구글 챗에 웹훅 생성 -> GWS 이용계정이 아니면 웹 훅 생성 기능 사용불가 (Cloud ID, gmail 계정 생성불가)

- 설정에 사용될 API들을 사용 설정한다. (Cloud Function, Cloud Scheduler, Bigquery등)

- 테스트로 구축했기 때문에 메세지 수신에 초점을 두고 구축하였다. 보안 설정등은 배제하였기 때문에 실제 셋팅시 보안부분 설정해서 구축해야 한다.

 

0. Google Chat 웹 훅 생성

- 테스트 스페이스를 하나 생성 후 웹훅을 생성해준다. 

이미 테스트시 추가했기 때문에 웹 훅을 하나 더 추가했다.
추가된 웹 훅 확인

 

1. Billing export 받을 BigQuery Dataset 생성

- Billing에서 BigQuery로 Billing 내역을 export하는 기능을 제공하기 때문에 제공받을 데이터셋을 생성한다.

 

2. Billing export 설정

- Billing export 기능을 사용하려면 IAM 권한에서 '결제 계정 관리자', '결제 계정 사용자' 권한이 필요하다. (자세한건 더 확인필요)

- Billing export에서 'Standard usage cost', 'Detailed usage cost', 'Pircing' 부분의 Edit Setting 진입

- 설정에서 알럿을 받을 프로젝트와 미리 생성해놓은 데이터셋에 연결 해준다.

 

3. Cloud Function

3-1. Configuration

- Cloud Function으로 이동해 함수를 생성다.

  - Environment: 1세대로 생성

  - Function name: 함수 이름

  - Region: 사용할 리전 선택

  - Trigger type: HTTP

(테스트이기 때문에 '인증없이 호출 허용', 'HTTPS 필요' 부분 체크 해제 하여 생성했다. 보안에 주의!)

  - Memory allocated: 128MB

  - Timeout: 60s

  - Autoscailing

     - Minimum number of instances: 0 (default값 사용)

     - Maximum number of instances: 3000 (default값 사용)

  - Runtime service account:  default값 사용

3-2. Code.

- Runtime: Python 3.7

- Entry point: run_rule

- main.py: 실행될 코드 기입

from google.cloud import bigquery
from httplib2 import Http
from json import dumps
from datetime import datetime

def run_rule(request):
    client = bigquery.Client()
    query_job = client.query("""
            SELECT sum(cost) as total_cost FROM
`project_name.dataset.tablename`""")

    for row in query_job:
        tcost = row["total_cost"]

    url = 'hangout_room_url'
    now = datetime.now()
    msg_content = "GCP Cost: {}".format(tcost) + " [date]: " + now.strftime("%m/%d/%Y, %H:%M:%S")
    bot_message = {
        'text' : msg_content}

    message_headers = { 'Content-Type': 'application/json; charset=UTF-8'}

    http_obj = Http()

    response = http_obj.request(
        uri=url,
        method='POST',
        headers=message_headers,
        body=dumps(bot_message),
    )

- requirements.txt: 사용될 패키지명 & 버전 기입

# Function dependencies, for example:
# package>=version
google-cloud-pubsub==0.34.0
google-cloud-storage==1.13.1
google-cloud-bigquery==1.8.1
google-cloud-core==0.29.1
google-api-core==1.33.2
pytz==2018.7

 

4. 테스트

- 테스트 탭으로 이동하여 '함수 테스트' 실행

 

5. Cloud Scheduler 설정

- 'Create Job' 선택하여 스케줄링 생성

 

- Define the schedule

  - Description: 스케줄링 설명

  - Frequency: */1 * * * * (실행될 스케줄링 시간 설정)

  - Timezone: KST (Timezone 설정)

- Configure the execution

  - Target type: HTTP

  - URL: Cloud Function 트리거 URL 기입

  - HTTP method: POST

  - HTTP headers: default값 사용

 

- Configure optional settings

필요에 따라 셋팅 진행 (여기선 default값 사용)

 

5. Google Chat 확인

 

* 참고

https://cloud.google.com/architecture/automated-hangout-chat-cloud-billing-summary?hl=ko 

https://stackoverflow.com/questions/74673148/bigquery-client-using-python-timeout-and-polling-issues

https://velog.io/@minbrok/GCP-Billing-Google-Chat-%EC%97%B0%EB%8F%99

반응형