Cloud Billing 요약이 포함된 자동 채팅 메시지 설정

이 가이드에서는 Cloud Billing 데이터를 BigQuery로 내보내고 Cloud 함수 및 Cloud Scheduler 작업을 만들어 Cloud Billing 데이터를 요약하는 일일 채팅 메시지를 보냅니다. 모든 청구를 BigQuery로 내보내면 비용 집계를 위해 데이터를 쿼리할 수 있습니다. 이 구성을 사용하면 청구 내역을 매일 찾아보지 않아도 Google Cloud 사용량에 대한 일일 청구 내역을 확인할 수 있습니다.

이 문서는 Google Cloud 지출 관련 정보를 확인하고 싶은 개발자 및 결제 관리자를 대상으로 합니다. 여기서는 Cloud Billing 계정을 만드는 데 익숙하고 이미 행아웃 채팅을 사용하고 있다고 가정합니다.

다음 다이어그램은 이 가이드에 사용된 Google Cloud 구성요소를 보여줍니다.

Cloud Billing에서 행아웃 채팅으로 데이터가 전송되는 방식을 보여주는 아키텍처 다이어그램

데이터는 Cloud Billing에서 BigQuery로 전송되고, Cloud Functions와 BigQuery 사이에 전송되고, 행아웃 채팅 웹훅에 전송됩니다. Cloud Scheduler가 Cloud 함수를 트리거합니다.

목표

  • BigQuery로 Cloud Billing 데이터 내보내기를 사용 설정합니다.
  • Cloud 함수를 만들고 쿼리 결과가 포함된 채팅 메시지를 보냅니다.
  • 서비스를 테스트합니다.
  • Cloud Scheduler 작업을 만들어 Cloud 함수를 매일 호출합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 가이드를 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않게 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Google 계정으로 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Cloud Console의 프로젝트 선택기 페이지에서 Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Cloud Console에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Cloud Console 하단에 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 gcloud 명령줄 도구가 포함되고 Cloud SDK가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

BigQuery로 Cloud Billing 데이터 내보내기 사용 설정

Cloud Billing 데이터를 BigQuery로 내보내려면 BigQuery에서 대상 데이터 세트 테이블을 만들고 이 데이터 세트로 결제 데이터를 내보내도록 Cloud Billing을 구성합니다.

BigQuery에서 데이터 세트 만들기

이 가이드에서는 앱과 동일한 클라우드 프로젝트에 데이터 세트를 만듭니다.

다른 클라우드 프로젝트에 데이터 세트가 이미 있으면 이 데이터 세트를 서비스 계정에 공유하고 다음 섹션으로 건너뛸 수 있습니다.

  1. Cloud Console에서 BigQuery 페이지로 이동합니다.

    BigQuery 페이지로 이동

  2. 리소스에서 Cloud 프로젝트 이름을 클릭합니다.

  3. Cloud Billing 데이터를 저장하기 위해 BigQuery에서 대상 테이블을 만들려면 데이터 세트 만들기를 클릭합니다.

  4. 데이터 세트 ID 필드에 billing_data를 입력합니다.

  5. 데이터 세트 만들기를 클릭합니다.

Cloud Billing 데이터를 BigQuery로 내보내기

  1. Cloud Console에서 결제 페이지로 이동합니다.

    결제 페이지로 이동

  2. Cloud Billing 계정을 선택합니다.

  3. 결제 내보내기를 클릭합니다.

  4. 설정 수정을 클릭합니다.

  5. 이 가이드를 위해 만든 클라우드 프로젝트를 선택합니다.

  6. 이전에 만든 billing_data 데이터 세트를 선택합니다.

  7. 저장을 클릭합니다.

Cloud Billing 계정이 BigQuery로 데이터를 내보내도록 구성됩니다. 내보내기 프로세스는 최대 24시간까지 걸릴 수 있습니다.

데이터 세트 테이블 이름 가져오기

  1. Cloud Console에서 BigQuery 페이지로 이동합니다.

    BigQuery 페이지로 이동

  2. 리소스에서 Cloud 프로젝트 이름을 클릭합니다.

  3. 확장하려면 billing_data를 클릭합니다.

  4. 내보내기 프로세스로 만든 테이블 이름을 클릭합니다. 이름은 gcp_billing_export_v1로 시작합니다.

  5. 테이블 쿼리를 클릭합니다.

  6. 데이터 세트 테이블 이름을 저장합니다. 이 테이블은 이 가이드에서 나중에 index.php 파일을 맞춤설정하기 위해 사용됩니다.

SQL 문에는 project_name.dataset.table_name 형식으로 FROM 키워드 다음에 데이터 세트 테이블 이름이 포함됩니다.

  • project_name은 클라우드 프로젝트의 이름을 나타냅니다.
  • dataset는 데이터 세트의 이름을 나타냅니다.
  • table_name은 테이블의 이름을 나타냅니다.

데이터 세트 테이블 이름 예시는 다음과 같습니다. myproject.billing_data.gcp_billing_export_v1_000000_000000_000000

행아웃 채팅방 만들기

  1. 행아웃 채팅 애플리케이션으로 이동합니다.
  2. 사용자, 채팅방, 봇 검색 검색창을 클릭한 다음 채팅방 만들기를 클릭합니다.
  3. 채팅방 이름 입력란에 GCP_Billing을 입력합니다.
  4. 만들기를 클릭합니다.
  5. GCP_Billing 채팅방 메뉴를 클릭한 다음 웹훅 구성을 선택합니다.

    'GCP_Billing' 채팅방의 웹훅을 구성하는 드롭다운 메뉴

  6. 이름 필드에 gcp_billing_webhook를 입력합니다.

  7. 저장을 클릭합니다. 웹훅의 URL은 이 가이드의 후반부에 필요하므로 기록해 둡니다.

Cloud 함수 만들기

  1. Cloud Console에서 Cloud Functions로 이동합니다.

    Cloud Functions로 이동

  2. 함수 만들기를 클릭합니다.

  3. 이름 필드에 getBillingAlert를 입력합니다.

  4. 할당 메모리 드롭다운 메뉴에서 128 MiB를 선택합니다.

  5. 런타임 드롭다운 메뉴에서 Python 3.7을 선택합니다.

  6. 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),
        )
    

    다음을 바꿉니다.

    • project_name: 프로젝트의 이름
    • dataset: 데이터 세트의 이름
    • tablename: 테이블의 이름
    • hangout_room_url: 이전에 복사한 웹훅 URL
  7. 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
    pytz==2018.7
    
  8. 실행할 함수 필드에 run_rule을 입력합니다.

  9. 만들기를 클릭합니다.

  10. getBillingAlert 함수를 클릭합니다.

  11. 트리거 탭을 클릭합니다.

  12. Cloud 함수 URL을 복사합니다. 이 값은 나중에 실행할 Cloud 함수를 예약하는 데 사용됩니다.

Cloud 함수 테스트

  1. Cloud Console에서 Cloud Functions로 이동합니다.

    Cloud Functions로 이동

  2. getBillingAlert Cloud 함수에서 작업을 클릭합니다.

  3. 함수 테스트를 클릭합니다.

  4. 함수 테스트를 클릭합니다.

    Cloud Billing 데이터가 포함된 메시지가 행아웃 채팅방으로 전송됩니다.

Cloud Scheduler 설정

함수를 실행할 수 있는지 확인한 후 Cloud Scheduler를 사용하여 예약된 간격으로 함수를 실행할 수 있습니다.

이 가이드에서는 매일 오전 10시에 함수를 실행합니다. Cloud Scheduler는 일정에 크론 형식을 사용합니다.

  1. Cloud Console에서 Cloud Scheduler로 이동합니다.

    Cloud Scheduler로 이동

  2. 작업 만들기를 클릭합니다.

  3. 이름 필드에 Billing-BigQuery를 입력합니다.

  4. 설명 필드에 Send Hangout message with Billing summary을 입력합니다.

  5. 빈도 필드에 0 10 * * *를 입력합니다.

  6. 시간대를 선택합니다.

  7. 대상에서 HTTP를 선택합니다.

  8. URL 필드에 함수 URL 엔드포인트를 입력합니다.

  9. 서비스 필드는 비워 둡니다.

  10. 만들기를 클릭합니다.

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 Cloud 프로젝트를 삭제하는 것입니다. 또는 개별 리소스를 삭제할 수 있습니다.

  1. Cloud Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계