Cloud Functions 및 Pub/Sub 기반 서버리스 통합 솔루션 배포

이 가이드에서는 Google Marketing Platform용 서버리스 통합 솔루션에 설명된 개념을 기반으로 하는 데이터 통합 솔루션을 설정하고 테스트하는 방법을 보여줍니다.

이 서버리스 솔루션의 데모는 GitHub의 오픈소스 데모에서 확인하세요. 이 솔루션에는 Google Cloud에서 솔루션을 설정하는 데 도움이 되는 API와 셸 스크립트가 함께 제공됩니다.

이 가이드는 API 또는 SFTP 업로드와 같은 다른 프로그래매틱 방식의 통합 옵션을 통해 데이터와 대상 시스템의 통합을 자동화하려는 데이터 엔지니어 또는 설계자를 대상으로 합니다.

목표

  • 서버리스 통합 솔루션 배포
  • 대상 API의 대상 시스템에서 통합 설정
  • CSV 파일을 Google 스프레드시트에 로드하여 이 솔루션 테스트

비용

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

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

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

시작하기 전에

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

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

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

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

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

  4. Cloud Shell을 엽니다.
  5. Cloud Shell 열기

솔루션 설치

  1. Cloud Shell에서 이 가이드에 사용할 코드가 포함된 저장소를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/cloud-for-marketing.git
    
  2. 설치 스크립트를 실행합니다.

    cd cloud-for-marketing/marketing-analytics/activation/gmp-googleads-connector; chmod a+x deploy.sh; ./deploy.sh
    

    이 스크립트는 환경을 확인하고 종속 항목을 컴파일하는 등의 프로세스를 실행합니다.

  3. 메시지가 표시되면 이 가이드에 사용할 Cloud 프로젝트 ID를 입력합니다.

  4. Cloud 함수를 배포할 리전을 선택하고 데이터를 Cloud Storage(예: us-east1)에 저장합니다.

  5. 사용할 기본 제공 API를 선택하거나 Enter를 눌러 모두 선택합니다. 이 솔루션은 다음과 같은 대상 API와 함께 제공됩니다.

    • Google 애널리틱스 측정 프로토콜
    • Google Analytics Management API(데이터 가져오기)
    • Campaign Manager 변환 업로드
    • SFTP 업로드: Search Ads 360에 비즈니스 데이터 업로드
    • Google Sheets API: Google 스프레드시트 기반 Google Ads 변환 예약 업로드
    • Search Ads 360 변환 업로드

    설치 후 사용하는 테스트를 실행하므로 Google Sheets API를 포함하세요. 설치를 수행하는 데 필요한 권한이 있는지 판단하기 위한 확인 절차를 거칩니다. 이 확인이 실패하면 관리자에게 누락된 권한을 요청한 다음 스크립트를 다시 실행해야 합니다.

  6. 데이터를 저장하는 Cloud Storage 버킷의 이름을 입력합니다. 버킷이 없는 경우 리전을 선택하면 스크립트가 버킷을 만듭니다. 이때 Cloud Functions가 배포되는 위치와 일치하는 기본 리전을 사용하는 것이 좋습니다.

  7. 이 솔루션에서 모니터링하는 Cloud Storage 폴더를 입력하거나 Enter를 눌러 기본 폴더를 선택합니다.

  8. Pub/Sub 주제 및 구독의 프리픽스를 입력하거나 Enter를 눌러 기본 프리픽스를 사용합니다.

  9. 메시지가 표시되면 Y를 입력하여 설정을 확인한 후 config.json 파일에 저장합니다.

    Pub/Sub 주제 및 구독이 생성됩니다.

  10. 사용 설정된 API에 서비스 계정이 필요한 경우 서비스 계정의 이름을 입력한 후 키 파일을 다운로드할지 확인합니다.

  11. Cloud Functions가 자동으로 배포되면 스크립트는 Firestore 또는 Datastore 인스턴스가 준비되었는지 여부를 나타냅니다. 준비되지 않은 경우 Firestore를 시작하는 방법에 대한 안내를 인쇄합니다.

데이터 준비

이제 솔루션을 설치했으므로 대상 시스템용 데이터를 준비할 수 있습니다.

파일 형식

이 솔루션에 기본 제공된 API에는 특정 파일 형식이 필요한 경우가 많습니다.

  • SFTP 업로드에는 별도의 형식 요청이 없습니다. 이 통합은 파일 형식에 관계없이 SFTP를 통해 파일을 서버에 업로드합니다.
  • Google Analytics Management API(데이터 가져오기) 및 Google Sheets API에는 CSV 파일이 필요합니다.
  • 다른 모든 API의 경우에는 줄바꿈으로 구분된 JSON(NDJSON)이 필요합니다. 모든 줄은 유효한 JSON 문자열입니다. BigQuery 내보내기 형식에서 예시를 참조하세요.

API 구성

API마다 구성이 다를 수 있으며 1개의 API에는 용도에 따라 2개 이상의 구성이 있을 수 있습니다. 따라서 구성은 API별로 그룹화되고 config_api.json 파일에 단일 JSON 객체를 결합합니다. 이 가이드의 GitHub 저장소에 있는 JSON 템플릿 파일에서 다음 목록은 구성이 구조화되는 방법을 보여줍니다.

{
  "CM": {
    "foo": {
      "cmAccountId": "[YOUR-DCM-ACCOUNT-ID]",
      "cmConfig": {
        "idType": "encryptedUserId",
        "conversion": {
          "floodlightConfigurationId": "[YOUR-FL-CONFIG-ID]",
          "floodlightActivityId": "[YOUR-FL-ACTIVITY-ID]",
          "quantity": 1
        },
        "customVariables": [
          "[YOUR-U-VARIABLES-NAME-1]", "[YOUR-U-VARIABLES-NAME-2]"
        ],
        "encryptionInfo": {
          "encryptionEntityId": "[YOUR-ENCRYPTION-ID]",
          "encryptionEntityType": "DCM_ADVERTISER",
          "encryptionSource": "AD_SERVING"
        }
      }
    }
  },
  "GA": {
    "bar": {
      "dataImportHeader": "[YOUR-DATA-IMPORT-HEADER]",
      "gaConfig": {
        "accountId": "[YOUR-GA-ACCOUNT-ID]",
        "webPropertyId": "[YOUR-WEB-PROPERTY-ID]",
        "customDataSourceId": "[YOUR-CUSTOM-DATASOURCE-ID]"
      }
    }
  },
  "MP": {
    "baz": {
      "mpConfig":{
        "v": "1",
        "t": "transaction",
        "ni": "1",
        "dl": "[YOUR-SOMETHING-URL]",
        "tid": "[YOUR-WEB-PROPERTY-ID]"
      }
    }
  },
  "SFTP": {
    "qux": {
      "sftp":{
        "host": "[YOUR-SFTP-HOST]",
        "port": "[YOUR-SFTP-PORT]",
        "username": "[YOUR-SFTP-USERNAME]",
        "password": "[YOUR-SFTP-PASSWORD]"
      }
    }
  },
  "GS": {
    "foo": {
      "spreadsheetId": "[YOUR-SPREADSHEET-ID]",
      "sheetName": "[YOUR-SHEET-NAME]",
      "sheetHeader": "[ANYTHING-PUT-AHEAD-OF-CSV]",
      "pasteData": {
        "coordinate": {
          "rowIndex": 0,
          "columnIndex": 0
        },
        "delimiter": ","
      }
    }
  },
  "SA": {
    "bar": {
      "saConfig": {
        "currencyCode": "[YOUR-CURRENCY-CODE]",
        "type": "TRANSACTION",
        "segmentationType": "FLOODLIGHT",
        "segmentationId": "[YOUR-SEGMENTATION-ID]",
        "state": "ACTIVE"
      },
      "availabilities": [
        {
          "agencyId": "[YOUR-AGENCY-ID]",
          "advertiserId": "[YOUR-ADVERTISER-ID]",
          "segmentationType": "FLOODLIGHT",
          "segmentationId": "[YOUR-SEGMENTATION-ID]"
        }
      ]
    }
  },
  "ACLC": {
    "foo" : {
      "customerId": "[YOUR-GOOGLE-ADS-ACCOUNT-ID]",
      "loginCustomerId": "[YOUR-LOGIN-GOOGLE-ADS-ACCOUNT-ID]",
      "developerToken": "[YOUR-GOOGLE-ADS-DEV-TOKEN]",
      "adsConfig": {
        "conversion_action": "[YOUR-CONVERSION-ACTION-NAME]",
        "conversion_value": "[YOUR-CONVERSION-VALUE]",
        "currency_code": "[YOUR-CURRENCY-CODE]"
      }
    }
  }
}

템플릿 파일의 이름을 config_api.json으로 변경하고, 타겟팅된 API 섹션만 남기고, 구성의 세부정보를 수정할 수 있습니다. 구성이 2개 이상인 경우 각 구성을 복사한 후 서로 다른 이름을 지정해야 합니다. 그런 다음 Firestore에서 구성을 업데이트합니다.

./deploy.sh update_api_config

파일 이름 규칙

다양한 종류의 API 및 구성을 유연하게 활용하기 위해 이 솔루션에서는 수신 파일의 이름 지정 규칙을 채택합니다. 파일 이름에는 API[X]config[Y] 패턴이 포함되어야 합니다.

  • X는 대상 API의 코드를 나타냅니다. 이 솔루션에서 X는 다음과 같습니다.
    • MP: Google 애널리틱스 측정 프로토콜
    • GA: Google Analytics Management API(데이터 가져오기)
    • CM: DCM/DFA Reporting API 및 Trafficking API
    • SFTP: SFTP 업로드
    • GS: Google Sheets API
    • SA: Search Ads 360 API
  • Y는 구성 이름입니다(예: 템플릿 코드의 foo 또는 bar).

예를 들어 API[GA]_config[bar]_20191111.csv라는 파일은 다음을 나타냅니다.

  • [GA]는 Google 애널리틱스가 대상 시스템이고 데이터 가져오기가 대상 API라는 의미입니다.
  • [bar]는 템플릿 구성 파일에 저장된 JSON 객체의 bar 키를 사용하여 파일이 대상 시스템으로 전송된다는 것을 의미합니다.

파일 이름의 선택적 패턴에는 다음이 포함됩니다.

  • 파일 이름에 dryrun가 포함되어 있으면 프로세스의 모든 단계를 따르지만 데이터를 API 서버로 보내지 않습니다.
  • 파일 이름에 _size[Z] 또는 _size[Zmb]가 포함되어 있으면 수신 파일이 여러 개의 파일로 분할되고 Cloud Storage에서 ZMB 미만의 파일 크기는 일부 API의 파일 크기 제한을 따릅니다. 예를 들어 데이터 가져오기는 1GB로 제한됩니다.

예를 들어 API[GA]_config[bar]_dryrun_20191111.csv라는 파일은 Google 애널리틱스로 전송되지 않지만 전체 통합 시스템을 거칩니다. API[GA]_config[bar]_size[100]_20191111.csv라는 파일은 파일 크기가 100MB 이하인 파일 그룹으로 분할되고 각 파일은 데이터 가져오기를 통해 Google 애널리틱스로 개별적으로 전송됩니다.

솔루션 테스트

솔루션을 설치한 후 CSV 파일을 만들고 이 파일의 데이터를 대상 Google 스프레드시트의 시트로 자동 로드하여 통합을 테스트합니다.

서비스 계정에 권한 부여

  1. 새 Google 스프레드시트의 시트를 만든 다음 이름을 바꿉니다(예: Integration Test).
  2. 공유를 클릭합니다.
  3. Cloud Shell에서 설치 중에 사용한 서비스 계정의 이메일 주소를 가져옵니다.

    ./deploy.sh print_service_account
    
  4. 사용자 필드에서 서비스 계정의 이메일 주소를 복사한 다음 수정 가능을 선택하여 편집자 권한을 할당합니다.

대상 스프레드시트의 ID 가져오기

  • 대상 Google 스프레드시트 시트의 스프레드시트 ID를 복사합니다.

    스프레드시트 ID는 스프레드시트 URL에서 /d//edit 사이의 값입니다(예: spreadsheetId).

    https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0
    

API 구성 업데이트

  1. Cloud Shell에서 솔루션을 설치한 폴더로 이동합니다(예: ~/cloud-for-marketing/marketing-analytics/activation/gmp-googleads-connector).
  2. config_api.json이라는 JSON 파일을 열고 파일 콘텐츠를 다음 코드로 바꿉니다.

    {
      "GS": {
        "foo": {
          "spreadsheetId": "your-spreadsheet-id",
          "sheetName": "your-sheet-name",
          "sheetHeader": "This is a test integration",
          "pasteData": {
            "coordinate": {
              "rowIndex": 0,
              "columnIndex": 0
            },
            "delimiter": ","
          }
        }
      }
    }
    

    다음을 바꿉니다.

    • your-spreadsheet-id: 스프레드시트 ID
    • your-sheet-name: Google 스프레드시트의 시트에서 대상 시트의 이름
  3. 구성을 Firestore 또는 Datastore에 업로드합니다.

    ./deploy.sh update_api_config
    

    출력은 다음과 같습니다.

    Init ApiConfig based on Datastore.
      Import Config for API[GS]_config[foo]
    

전송할 파일 준비

이 테스트에서는 CSV 파일의 데이터를 대상 시트에 로드합니다.

  • Cloud Shell에서 일부 기본 제공 API의 콘텐츠로 CSV 파일을 만듭니다.

    cat > API[GS]_config[foo]_test.csv <<EOF
    #What are Tentacles built in APIs
    Target System, Target API, Code
    Google Analytics, Measurement Protocol, MP
    Google Analytics, Google Analytics Management API, GA
    Campaign Manager, DCM/DFA Reporting and Trafficking API, CM
    Search Ads 360, SFTP, SFTP
    EOF
    

Cloud Storage에 파일 업로드

  • 파일을 Cloud Storage 버킷에 업로드합니다.

    ./deploy.sh copy_file_to_gcs API[GS]_config[foo]_test.csv
    

    출력은 다음과 비슷합니다.

    Copy integration data file to target folder…
    Copying file:...
      Operation completed over...
    

결과 확인

  • 앞에서 만든 Google 스프레드시트의 스프레드시트를 엽니다.

    스프레드시트 1의 크기가 조절되고 CSV 파일의 데이터가 로드되었습니다.

    Google 스프레드시트의 스프레드시트에 업로드된 데이터를 보여주는 스크린샷

삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

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

    리소스 관리로 이동

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

다음 단계