TwilioからのイベントをVantageにロードする方法

著者 [Adam Tworkiewicz](adam.tworkiewicz@teradata.com)
最終更新日 2022年1月18日

:::note warn
警告
本記事はTeradata Corporationによる[Getting Started](https://quickstarts.teradata.com/index.html#getting-access-to-vantage)に掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
:::

# 概要
このソリューションは、Twilio Segmentからのイベントをリッスンし、Teradata Vantageインスタンスにデータを書き込むものです。この例ではGoogle Cloudを使用していますが、どのようなクラウドプラットフォームにも対応できます。

# アーキテクチャ
このソリューションでは、Twilio Segmentは生のイベントデータをGoogle Cloud Pub/Subに書き込みます。Pub/SubはイベントをCloud Runアプリケーションに転送します。Cloud Runアプリケーションは、Teradata Vantageデータベースにデータを書き込む。これは、VMの割り当てや管理を必要としないサーバーレス・ソリューションです。

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/c083b760-287a-3990-b1c6-ee87974e812a.png)

# デプロイメント

# 前提条件
①	Google Cloudのアカウント。アカウントがない場合は、[https://console.cloud.google.com/](https://console.cloud.google.com/) から作成できます。
②	gcloudがインストールされていること。[https://cloud.google.com/sdk/docs/install](https://cloud.google.com/sdk/docs/install) を参照してください。
③	Google Cloud Runが対話できるTeradata Vantageインスタンス。

::: note info
メモ！
Vantageの新しいインスタンスが必要な場合は、[Google Cloud](https://quickstarts.teradata.com/vantage.express.gcp.html)、[Azure](https://quickstarts.teradata.com/run-vantage-express-on-microsoft-azure.html)、[AWS](https://quickstarts.teradata.com/run-vantage-express-on-aws.html)のクラウドにVantage Expressという無料版をインストールすることができます。また、[VMware](https://quickstarts.teradata.com/getting.started.vmware.html)、[VirtualBox](https://quickstarts.teradata.com/getting.started.vbox.html)、または[UTM](https://quickstarts.teradata.com/getting.started.utm.html)を使用して、ローカルマシン上でVantage Expressを実行することもできます。
:::


# ビルドとデプロイ
①	サンプルリポジトリをクローンします。

```:git_clone
git clone git@github.com:Teradata/segment-integration-tutorial.git
```

②	レポには、データベースをセットアップする segment.sql ファイルが含まれています。SQL IDE、[TeradataStudio][https://downloads.teradata.com/download/tools/teradata-studio](https://downloads.teradata.com/download/tools/teradata-studio) または bteq ([Windows](https://downloads.teradata.com/node/7314), [Linux](https://downloads.teradata.com/node/200442), [macOS](https://downloads.teradata.com/node/201214) 用ダウンロード) というコマンドラインツールで Vantage db にこのスクリプトを実行します。このSQLスクリプトは、Segmentという新しいデータベースとSegmentイベントを格納するためのテーブル群を作成します。

③	デフォルトのプロジェクトとリージョンを設定します。

```:set_project
gcloud config set project <PROJECT_ID>
gcloud config set compute/region <REGION>
```

④	プロジェクト ID と番号を取得します。この後のステップで必要になります。

```:export_id
export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list \
  --filter="$(gcloud config get-value project)" \
  --format="value(PROJECT_NUMBER)")
```

⑤	必要なGoogle Cloudのサービスを有効にします。

```:enable_services
gcloud services enable cloudbuild.googleapis.com containerregistry.googleapis.com run.googleapis.com secretmanager.googleapis.com pubsub.googleapis.com
```

⑥	アプリケーションを構築する。

```:build
gcloud builds submit --tag gcr.io/$PROJECT_ID/segment-listener
```

⑦	Segmentと共有するAPIキーを定義します。Google Cloud Secret ManagerにAPIキーを保存します。

```:set_secret_key
gcloud secrets create VANTAGE_USER_SECRET
echo -n 'dbc' > /tmp/vantage_user.txt
gcloud secrets versions add VANTAGE_USER_SECRET --data-file=/tmp/vantage_user.txt

gcloud secrets create VANTAGE_PASSWORD_SECRET
echo -n 'dbc' > /tmp/vantage_password.txt
gcloud secrets versions add VANTAGE_PASSWORD_SECRET --data-file=/tmp/vantage_password.txt
```

⑧	Vantage に Segment データを書き込むアプリケーションは、Cloud Run を使用します。まず、Cloud Runがシークレットにアクセスできるようにする必要があります。

```:set_authorization
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member=serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
     --role=roles/secretmanager.secretAccessor
```

⑨	アプリをCloud Runにデプロイします（**VANTAGE_HOST**をTeradata Vantageデータベースのホスト名またはIPに置き換えてください）。2つ目のexport文は、後続のコマンドで必要となるサービスURLを保存します。

```:run
gcloud run deploy --image gcr.io/$PROJECT_ID/segment-listener segment-listener \
  --region $(gcloud config get-value compute/region) \
  --update-env-vars VANTAGE_HOST=35.239.251.1 \
  --update-secrets 'VANTAGE_USER=VANTAGE_USER_SECRET:1, VANTAGE_PASSWORD=VANTAGE_PASSWORD_SECRET:1' \
  --no-allow-unauthenticated

export SERVICE_URL=$(gcloud run services describe segment-listener --platform managed --region $(gcloud config get-value compute/region) --format 'value(status.url)')
```

⑩	Segmentからイベントを受信するPub/Subトピックを作成します。

```:create_topics
gcloud pubsub topics create segment-events
```

⑪	Pub/SubがCloud Runアプリを呼び出すために使用するサービスアカウントを作成します。

```:create_account
gcloud iam service-accounts create cloud-run-pubsub-invoker \
     --display-name "Cloud Run Pub/Sub Invoker"
```

⑫	サービスアカウントにCloud Runを呼び出す権限を与えます。

```:set_grant2account
gcloud run services add-iam-policy-binding segment-listener \
  --region $(gcloud config get-value compute/region) \
  --member=serviceAccount:cloud-run-pubsub-invoker@$PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/run.invoker
```

⑬	Pub/Subがプロジェクト内で認証トークンを作成できるようにする。

```:set_grant4createtoken
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
  --role=roles/iam.serviceAccountTokenCreator
```
⑭	サービスアカウントでPub/Subサブスクリプションを作成する。

```:create_subscription
gcloud pubsub subscriptions create segment-events-cloudrun-subscription --topic projects/$PROJECT_ID/topics/segment-events \
   --push-endpoint=$SERVICE_URL \
   --push-auth-service-account=cloud-run-pubsub-invoker@$PROJECT_ID.iam.gserviceaccount.com \
   --max-retry-delay 600 \
   --min-retry-delay 30
```

⑮	Segmentがあなたのトピックに公開できるようにします。そのためには、プロジェクトで **pubsub@segment-integrations.iam.gserviceaccount.com** ロール**Pub/Sub Publisher**を [https://console.cloud.google.com/cloudpubsub/topic/list](https://console.cloud.google.com/cloudpubsub/topic/list) で割り当てます。詳しくは、[Segmentのマニュアル](https://segment.com/docs/connections/destinations/catalog/google-cloud-pubsub/#authentication)を参照してください。


⑯	Google Cloud Pub/SubをSegmentの宛先として設定します。フルトピックの**projects/<PROJECT_ID>/topics/segment-events**を使用し、すべてのSegmentイベントタイプ（*文字を使用）をトピックにマップします。


# 試してみよう
①	Segment の Event Tester 機能を使用して、サンプルペイロードをトピックに送信します。サンプルデータがVantageに保存されていることを確認します。

# 制限事項
・この例では、1 つの地域にアプリをデプロイする方法を示しています。多くの場合、このセットアップでは十分なアップタイムが保証されません。Cloud Run アプリは、グローバル ロード バランサーの背後にある複数のリージョンにデプロイする必要があります。

# まとめ
このハウツーでは、SegmentのイベントをTeradata Vantageに送信する方法を説明しました。この構成では、SegmentからGoogle Cloud Pub/Subにイベントを転送し、その後Cloud Runアプリケーションに転送します。このアプリケーションは、Teradata Vantageにデータを書き込む。

# 参考資料
・[Segment Pub/Sub destination documentation](https://segment.com/docs/connections/destinations/catalog/google-cloud-pubsub/)

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)