ファイルストレージの連携
このページでは、クラウドデータ取り込みを設定し、Amazon S3またはGoogle Cloud StorageからBrazeにデータを同期する方法について説明します。
仕組み
Cloud Data Ingestion(CDI)を使用すると、クラウドアカウント内の1つ以上のストレージバケットをBrazeと直接統合できます。バケットに新しいファイルが追加されると、クラウドプロバイダーが通知を発行し、Braze Cloud Data Ingestionがデータを同期します。
通知の仕組みはプロバイダーによって異なります。
- Amazon S3: S3に新しいファイルが公開されると、Amazon Simple Queue Service(SQS)キューにメッセージが投稿され、Brazeがそのメッセージを消費して新しいファイルを取り込みます。
- Google Cloud Storage(GCS): バケットで新しいファイルがファイナライズされると、GCSが
OBJECT_FINALIZE通知をPub/Subトピックに発行します。BrazeはPub/Subサブスクリプションからそれらの通知を消費して新しいファイルを取り込みます。
Cloud Data Ingestionは以下をサポートしています。
- JSONファイル
- CSVファイル
- Parquetファイル
- 属性、カスタมイベント、購入イベント、ユーザー削除、およびカタログデータ
クラウドデータ取り込みの設定
設定手順はファイルストレージプロバイダーによって異なります。プロバイダーのタブを選択してから、続くセクションの共有設定を完了してください。
この連携には以下のリソースが必要です。
- データストレージ用のS3バケット
- 新しいファイル通知用のSQSキュー
- Brazeアクセス用のIAMロール
AWSの定義
| 用語 | 定義 |
|---|---|
| Amazon リソースネーム (ARN) | ARNはAWSリソースの一意の識別子です。 |
| Identity and Access Management (IAM) | IAMはAWSリソースへのアクセスを安全に制御するためのWebサービスです。このチュートリアルでは、IAMポリシーを作成してIAMロールに割り当て、S3バケットをBrazeクラウドデータ取り込みと連携します。 |
| Amazon Simple Queue Service (SQS) | SQSは、分散型ソフトウェアシステムとコンポーネントを連携するためのホスト型キューです。 |
AWSでのクラウドデータ取り込みの設定
ステップ1:ソースバケットを作成する
AWSアカウントでデフォルト設定の汎用S3バケットを作成します。S3バケットはフォルダが一意であれば、複数の同期で再利用できます。
デフォルト設定は以下のとおりです。
- ACL無効
- パブリックアクセスをすべてブロック
- バケットのバージョニングを無効化
- SSE-S3暗号化
- SSE-S3は唯一サポートされているサーバーサイド暗号化タイプです。Amazon KMS暗号化はサポートされていません。
バケットを作成したリージョンをメモしてください。次のステップで同じリージョンにSQSキューを作成します。
ステップ2:SQSキューを作成する
作成したバケットにオブジェクトが追加されたことを追跡するためのSQSキューを作成します。現時点ではデフォルトの設定を使用してください。
SQSキューはグローバルに一意である必要があります(たとえば、1つのCDI同期にのみ使用でき、別のワークスペースで再利用することはできません)。

SQSはバケットを作成したリージョンと同じリージョンに作成してください。
SQSキューのARNとURLをメモしてください。この設定中に頻繁に必要になります。

ステップ3:アクセスポリシーを設定する
アクセスポリシーを設定するには、Advanced optionsを選択します。
以下のステートメントをキューのアクセスポリシーに追加します。YOUR-BUCKET-NAME-HEREをバケット名に、YOUR-SQS-ARNをSQSキューのARNに、YOUR-AWS-ACCOUNT-IDをAWSアカウントIDにそれぞれ置き換えてください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"Sid": "braze-cdi-s3-sqs-publish",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "SQS:SendMessage",
"Resource": "YOUR-SQS-ARN",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "YOUR-AWS-ACCOUNT-ID"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:::YOUR-BUCKET-NAME-HERE"
}
}
}
ステップ4:S3バケットにイベント通知を追加する
- ステップ1で作成したバケットで、Properties > Event notificationsに移動します。
- 設定に名前を付けます。Brazeに取り込むファイルのサブセットのみを対象にしたい場合は、オプションでプレフィックスまたはサフィックスを指定します。
- DestinationでSQS queueを選択し、ステップ2で作成したSQSのARNを入力します。

S3バケットのルートフォルダにファイルをアップロードしてから、一部のファイルをバケット内の特定のフォルダに移動すると、予期しないエラーが発生する場合があります。代わりに、プレフィックス内のファイルのみに対してイベント通知を送信するように変更するか、そのプレフィックス外にS3バケットにファイルを配置しないようにするか、プレフィックスなしで連携を更新してすべてのファイルを取り込むようにしてください。
ステップ5:IAMポリシーを作成する
Brazeがソースバケットとやり取りできるようにするためのIAMポリシーを作成します。開始するには、アカウント管理者としてAWS管理コンソールにサインインします。
-
AWSコンソールのIAMセクションに移動し、ナビゲーションバーでPoliciesを選択してから、Create Policyを選択します。

-
JSONタブを開き、以下のコードスニペットをPolicy Documentセクションに入力します。
YOUR-BUCKET-NAME-HEREをバケット名に、YOUR-SQS-ARN-HEREをSQSキュー名にそれぞれ置き換えてください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetObjectAttributes", "s3:GetObject"],
"Resource": ["arn:aws:s3:::YOUR-BUCKET-NAME-HERE"]
},
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetObjectAttributes", "s3:GetObject"],
"Resource": ["arn:aws:s3:::YOUR-BUCKET-NAME-HERE/*"]
},
{
"Effect": "Allow",
"Action": [
"sqs:DeleteMessage",
"sqs:GetQueueUrl",
"sqs:ReceiveMessage",
"sqs:GetQueueAttributes"
],
"Resource": "YOUR-SQS-ARN-HERE"
}
]
}
-
完了したらReview Policyを選択します。
-
ポリシーに名前と説明を付けてから、Create Policyを選択します。


ステップ6:IAMロールを作成する
AWSでの設定を完了するには、IAMロールを作成し、ステップ5のIAMポリシーをアタッチします。
- IAMポリシーを作成したコンソールの同じIAMセクションで、Roles > Create Roleに移動します。

- AWSで、信頼されたエンティティセレクタータイプとしてAnother AWS Accountを選択します。BrazeアカウントIDを入力します。Require external IDチェックボックスを選択します。
- Brazeで、Data Settings > Cloud Data Ingestion > Sourcesに移動し、Add data sourceを選択してから、ファイルソースセクションでAmazon S3を選択します。
- 自動生成されたBraze Account IDをコピーします。

- AWSでアカウントIDを貼り付けてから、Nextを選択します。

- ステップ4で作成したポリシーをロールにアタッチします。検索バーでポリシーを検索し、ポリシーの横にあるチェックマークを選択してアタッチします。完了したらNextを選択します。

ロールに名前と説明を付けてから、Create Roleを選択します。

- 作成したロールのARNと生成した外部IDをメモしてください。クラウドデータ取り込み連携の作成に必要になります。
Brazeでのクラウドデータ取り込みの設定
- まず、Brazeダッシュボードで新しいソースを作成します。Data Settings > Cloud Data Ingestion > Sourcesに移動し、Add data sourceを選択してから、Amazon S3を選択します。
- ソースの名前を選択し、AWSの設定プロセスで取得した情報を入力して新しいソースを作成します。以下を指定してください。
- ロールARN
- 外部ID
- バケット名
- リージョン

- Test connectionを選択して、Brazeがバケットにアクセスできることを確認します。テストが成功したら、Connect to Sourceを選択します。接続に失敗した場合は、問題のトラブルシューティングに役立つエラーメッセージが表示されます。
- 次に、新しい同期を作成します。Data Settings > Cloud Data Ingestion > Syncsに移動し、Create data syncを選択します。
- 同期の名前を選択します。次に、アクティブなS3ソースを選択し、同期のソーステーブルを入力します。データタイプを選択し、Test Connectionを選択します。

- AWSの設定プロセスで取得した残りの情報を入力します。以下を指定してください。
- SQS URL(新しい連携ごとに一意である必要があります)
- フォルダパス(オプション、ワークスペース内の同期間で一意である必要があります)
- データタイプを選択し、Test Connectionを選択して、Brazeが取り込み可能なファイルを一覧表示できることを確認します(ファイル内のデータではありません)。成功したら、Next: Notificationsを選択します。
- アクセスや権限の問題で同期が中断された場合の通知用に、連絡先メールアドレスを追加します。オプションで、ユーザーレベルのエラーや同期成功の通知を有効にできます。
- 同期を作成します。
この連携には以下のリソースが必要です。
- データストレージ用のCloud Storageバケット
- 新しいファイル通知用のPub/Subトピックとサブスクリプション
- JSONキーをBrazeにアップロードするサービスアカウント
GCPの定義
| 用語 | 定義 |
|---|---|
| Google Cloudプロジェクト | プロジェクトはすべてのGoogle Cloudリソースを整理するもので、一意のプロジェクトIDとプロジェクト番号で識別されます。 |
| Cloud Storageバケット | バケットは、Brazeに取り込むデータファイルを保持するコンテナです。 |
| Pub/Subトピック | トピックは、Cloud Storageバケットから新しいファイルの通知を受け取る名前付きリソースです。 |
| Pub/Subサブスクリプション | サブスクリプションはトピックにアタッチされ、メッセージを配信します。Brazeはプルサブスクリプションから新しいファイルの通知を受け取ります。 |
| サービスアカウント | サービスアカウントは、Brazeがバケットとサブスクリプションにアクセスするために使用する非人間IDです。JSONキーをBrazeにアップロードします。 |
| IAMロール | Identity and Access Management (IAM) ロールは、バケットとサブスクリプションのサービスアカウントに割り当てる権限の集合です。 |
Google Cloudでのクラウドデータ取り込みの設定
ステップ1:Cloud Storageバケットを作成する
Google Cloudコンソールで、Cloud Storage > Buckets > Createに移動します。プロジェクトIDとバケット名をメモしてください。Brazeでソースを設定する際に必要になります。権限がIAMで管理されるように、均一なバケットレベルアクセスを有効にすることをお勧めします。
または、gcloudでバケットを作成できます。
1
2
3
4
gcloud storage buckets create gs://YOUR-BUCKET-NAME \
--project=YOUR-PROJECT-ID \
--location=YOUR-REGION \
--uniform-bucket-level-access
ステップ2:Pub/Subトピックとサブスクリプションを作成する
Google Cloudコンソールで、Pub/Sub > Topics > Create topicに移動します。Googleにデフォルトのサブスクリプションを作成させるか、別途作成できます。次に、そのトピックにプルサブスクリプションを作成します。
または、gcloudを使用します。
1
2
3
gcloud pubsub topics create YOUR-TOPIC --project=YOUR-PROJECT-ID
gcloud pubsub subscriptions create YOUR-SUBSCRIPTION \
--topic=YOUR-TOPIC --project=YOUR-PROJECT-ID --ack-deadline=60
サブスクリプションIDをメモしてください。Brazeでは同期作成時にサブスクリプション(トピックではなく)が必要です。サブスクリプションはプルサブスクリプションである必要があります。

このサブスクリプションにデッドレターキューを設定しないでください。Brazeはクラウドデータ取り込みサブスクリプションのデッドレターキューをサポートしていません。詳しくは、Google Cloudドキュメントのデッドレタートピックを参照してください。
ステップ3:バケット通知をトピックに送信する

Cloud StorageからPub/Subへの通知の作成は、Google Cloudコンソールでは利用できません。gcloud(ここに示す)、Terraform、またはJSON APIを使用する必要があります。詳しくは、Google CloudドキュメントのCloud StorageのPub/Sub通知を設定するを参照してください。
まず、Cloud Storageサービスエージェントにトピックへの公開権限を割り当ててから、OBJECT_FINALIZEの通知を作成します。OBJECT_FINALIZEイベントは、バケットに新しいオブジェクトが作成またはファイナライズされるたびに発火します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Get the Cloud Storage service agent for your project
gcloud storage service-agent --project=YOUR-PROJECT-ID
# Assign it Pub/Sub Publisher on the topic
gcloud pubsub topics add-iam-policy-binding YOUR-TOPIC \
--project=YOUR-PROJECT-ID \
--member="serviceAccount:service-YOUR-PROJECT-NUMBER@gs-project-accounts.iam.gserviceaccount.com" \
--role="roles/pubsub.publisher"
# Create the OBJECT_FINALIZE notification (optionally scope to a folder with --object-prefix)
gcloud storage buckets notifications create gs://YOUR-BUCKET-NAME \
--topic=YOUR-TOPIC \
--event-types=OBJECT_FINALIZE \
--payload-format=json
これらのコマンドの以下のプレースホルダーを置き換えてください。
YOUR-PROJECT-ID: Google CloudプロジェクトID。人間が読める識別子です(例:my-gcp-project)。YOUR-TOPIC: ステップ2で作成したPub/Subトピック。YOUR-BUCKET-NAME: Cloud Storageバケット名。YOUR-PROJECT-NUMBER: プロジェクト番号。Cloud Storageサービスエージェントのメールアドレスで使用される数値の識別子です。プロジェクトIDとは異なります。Google CloudコンソールのDashboardで確認するか、以下のコマンドを実行してください。
1
gcloud projects describe YOUR-PROJECT-ID --format="value(projectNumber)"
ステップ4:サービスアカウントを作成する
Google Cloudコンソールで、IAM & Admin > Service Accounts > Create service accountに移動します。
または、gcloudを使用します。
1
2
3
gcloud iam service-accounts create braze-cdi-gcs \
--project=YOUR-PROJECT-ID \
--display-name="Braze CDI GCS"
ステップ5:権限を割り当てる
コネクタには次の権限が必要です: バケットに対するstorage.buckets.get、storage.objects.get、storage.objects.list、およびサブスクリプションに対するpubsub.subscriptions.consume。カスタムロールまたは事前定義ロールで割り当てることができます。
カスタムロール: これらの権限を持つカスタムロールを作成し、バケットとサブスクリプションにバインドします。
1
2
3
4
5
6
7
8
9
10
11
12
13
gcloud iam roles create brazeCdiGcs --project=YOUR-PROJECT-ID \
--title="Braze CDI GCS" \
--permissions=storage.buckets.get,storage.objects.get,storage.objects.list,pubsub.subscriptions.consume \
--stage=GA
gcloud storage buckets add-iam-policy-binding gs://YOUR-BUCKET-NAME \
--member="serviceAccount:[email protected]" \
--role="projects/YOUR-PROJECT-ID/roles/brazeCdiGcs"
gcloud pubsub subscriptions add-iam-policy-binding YOUR-SUBSCRIPTION \
--project=YOUR-PROJECT-ID \
--member="serviceAccount:[email protected]" \
--role="projects/YOUR-PROJECT-ID/roles/brazeCdiGcs"
事前定義ロール: バケットにroles/storage.objectViewerとroles/storage.legacyBucketReaderを、サブスクリプションにroles/pubsub.subscriberを割り当てます。objectViewerロールはstorage.objects.getとstorage.objects.listを提供し、legacyBucketReaderはstorage.buckets.getを提供します。
1
2
3
4
5
6
7
8
9
10
gcloud storage buckets add-iam-policy-binding gs://YOUR-BUCKET-NAME \
--member="serviceAccount:[email protected]" \
--role="roles/storage.objectViewer"
gcloud storage buckets add-iam-policy-binding gs://YOUR-BUCKET-NAME \
--member="serviceAccount:[email protected]" \
--role="roles/storage.legacyBucketReader"
gcloud pubsub subscriptions add-iam-policy-binding YOUR-SUBSCRIPTION \
--project=YOUR-PROJECT-ID \
--member="serviceAccount:[email protected]" \
--role="roles/pubsub.subscriber"
ステップ6:JSONキーを作成する
Google Cloudコンソールでサービスアカウントを開き、Keys > Add key > Create new keyに移動して、JSONを選択します。
または、gcloudを使用します。
1
2
gcloud iam service-accounts keys create braze-cdi-gcs-key.json \
--iam-account=[email protected]
Brazeでのクラウドデータ取り込みの設定
- Brazeで、Data Settings > Cloud Data Ingestion > Sourcesに移動し、Add data sourceを選択してから、Google Cloud Storageを選択します。

- ソースフィールドに入力します。
- Bucket — バケット名
- Project ID — GCPプロジェクトID
- Service account JSON key — ステップ6のキーファイルをアップロードし、認証情報に名前を付けます

- Test connectionを選択してから、Connect to Sourceを選択します。
- 同期を作成します。Data Settings > Cloud Data Ingestion > Syncsに移動し、Create data syncを選択します。同期名とData Type(User Attributes、Custom Events、Purchase Events、Catalog、Delete Usersなど)を選択してから、Nextを選択します。
- Data definitionステップで、GCSソースを選択してから、以下を指定します。
- Pub/Sub subscription ID — ステップ2のサブスクリプションID(トピックではありません)
- Folder path(オプション)— バケット内のパスプレフィックス(共有バケット内のフォルダを同期するを参照)

- Preview and validateを選択して、Brazeがサブスクリプションにアクセスし、取り込み可能なファイルを一覧表示できることを確認します。テストが成功すると、バケット内の既存ファイルが一覧表示されますが、それらのファイルは自動的に同期されません。
- エラー通知用の連絡先メールアドレスを追加します。Google Cloud Storageの同期はイベント駆動型であるため、スケジュールは必要ありません。Brazeはファイルがアップロードされると取り込みます。サマリーを確認してから、Create syncを選択します。
共有バケット内のフォルダを同期する
1つのバケットを複数の同期で再利用できますが、各同期は個別のフォルダを対象とし、かつ専用のPub/Subサブスクリプションを持つ必要があります。

フォルダパスとサブスクリプションは、同じソースバケットを共有する複数の同期のワークスペース内で一意である必要があります。ステップ2と同様に、これらのサブスクリプションにデッドレターキューを設定しないでください。
共有バケット内で同期したいフォルダごとに:
- 同期のFolderフィールドをパスプレフィックスに設定します(例:
attributes/)。Brazeはそのプレフィックスで始まるパスのオブジェクトのみを一覧表示して取り込みます。 -
そのフォルダ用に専用のトピックとプレフィックススコープの通知を作成し、そのトピックにサブスクリプションを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# One topic per folder gcloud pubsub topics create YOUR-ATTRIBUTES-TOPIC --project=YOUR-PROJECT-ID # Assign the Cloud Storage service agent publisher on the topic gcloud pubsub topics add-iam-policy-binding YOUR-ATTRIBUTES-TOPIC \ --project=YOUR-PROJECT-ID \ --member="serviceAccount:service-YOUR-PROJECT-NUMBER@gs-project-accounts.iam.gserviceaccount.com" \ --role="roles/pubsub.publisher" # Notification scoped to the folder with --object-prefix gcloud storage buckets notifications create gs://YOUR-BUCKET-NAME \ --topic=YOUR-ATTRIBUTES-TOPIC --event-types=OBJECT_FINALIZE \ --payload-format=json --object-prefix=attributes/ # One subscription per sync gcloud pubsub subscriptions create YOUR-ATTRIBUTES-SUBSCRIPTION \ --topic=YOUR-ATTRIBUTES-TOPIC --project=YOUR-PROJECT-ID --ack-deadline=60
-
ステップ5と同様に、Brazeサービスアカウントにそのサブスクリプションの消費権限を割り当てます。
1 2 3 4
gcloud pubsub subscriptions add-iam-policy-binding YOUR-ATTRIBUTES-SUBSCRIPTION \ --project=YOUR-PROJECT-ID \ --member="serviceAccount:[email protected]" \ --role="roles/pubsub.subscriber"
ステップ5でカスタムロールを作成した場合は、代わりに
--role="projects/YOUR-PROJECT-ID/roles/brazeCdiGcs"を使用してください。 - Brazeで同期を作成する際に、このフォルダの新しいPub/Sub subscription IDとFolder pathを入力して、そのフォルダのファイルのみを取り込むようにします。
必要なファイル形式
必要なファイル形式は Amazon S3 と Google Cloud Storage で共通です。Cloud Data Ingestion は JSON、CSV、Parquet ファイルをサポートしています。必要なカラムはデータタイプによって異なります。
- ユーザーデータ(属性、カスタムイベント、購入イベント)はユーザー識別子とペイロードを使用します
- カタログデータはカタログ識別子を使用します
カタログデータにファイルストレージを使用している場合は、このページとカタログデータの同期と削除を併せて参照し、カタログ固有の要件と動作を確認してください。
Braze は、ファイルストレージプロバイダーが適用する要件以外に、追加のファイル名要件を適用しません。ファイル名は一意である必要があります。タイムスタンプを付加すると一意性を確保しやすくなります。
サポートされているすべてのファイルタイプ(属性、カスタムイベント、購入、カタログ、ユーザー削除)の例については、braze-examples のサンプルファイルを参照してください。
ユーザー識別子
ユーザーデータの同期(属性、カスタムイベント、購入イベント)では、ソースファイルの各行に正確に1つのユーザー識別子と PAYLOAD カラムが必要です。ソースファイルには異なる識別子タイプの行を含めることができますが、各行では1つの識別子のみを使用してください。
| 識別子 | 説明 |
|---|---|
EXTERNAL_ID |
更新するユーザーを識別します。Brazeで使用される external_id の値と一致する必要があります。 |
ALIAS_NAME と ALIAS_LABEL |
この2つのカラムでユーザーエイリアスオブジェクトを作成します。alias_name は一意の識別子で、alias_label はエイリアスのタイプを指定します。ユーザーは異なるラベルを持つ複数のエイリアスを持つことができますが、alias_label ごとに設定できる alias_name は1つだけです。 |
BRAZE_ID |
Brazeユーザー識別子です。Braze SDKによって生成され、Cloud Data Ingestion を通じて Braze ID で新しいユーザーを作成することはできません。新しいユーザーを作成するには、external ID またはユーザーエイリアスを指定してください。 |
EMAIL |
ユーザーのメールアドレスです。同じメールアドレスを持つ複数のプロファイルが存在する場合、最後に更新されたプロファイルが優先されます。メールと電話番号の両方を含む場合、Brazeはメールを主要な識別子として使用します。 |
PHONE |
ユーザーの電話番号です。同じ電話番号を持つ複数のプロファイルが存在する場合、最後に更新されたプロファイルが優先されます。 |
識別子に加えて、各行には Braze のユーザーに同期するフィールドの JSON 文字列を含む PAYLOAD カラムが必要です。

データウェアハウスソースとは異なり、UPDATED_AT カラムはファイルストレージ同期では必要なく、サポートもされていません。
カタログ識別子
カタログ同期の場合、ソースファイルには以下のカラムが必要です。カタログファイルはユーザーデータファイルとは異なる識別子を使用します。
| カラム | 必須 | 説明 |
|---|---|---|
ID |
はい | カタログアイテムの一意の識別子です。Brazeでのアイテムの作成、更新、削除に使用されます。 |
PAYLOAD |
はい | 同期するカタログフィールドと値の JSON 文字列です。Brazeのカタログのスキーマと一致する必要があります。 |
DELETED |
いいえ | true の場合、一致する ID のカタログアイテムが Braze のカタログから削除されます。作成または更新操作ではこのカラムを省略するか、false に設定してください。 |
例
1
2
3
4
5
6
7
{"external_id":"s3-qa-0","payload":"{\"name\": \"GT896\", \"age\": 74, \"subscriber\": true, \"retention\": {\"previous_purchases\": 21, \"vip\": false}, \"last_visit\": \"2023-08-08T16:03:26.600803\"}"}
{"external_id":"s3-qa-1","payload":"{\"name\": \"HSCJC\", \"age\": 86, \"subscriber\": false, \"retention\": {\"previous_purchases\": 0, \"vip\": false}, \"last_visit\": \"2023-08-08T16:03:26.600824\"}"}
{"external_id":"s3-qa-2","payload":"{\"name\": \"YTMQZ\", \"age\": 43, \"subscriber\": false, \"retention\": {\"previous_purchases\": 23, \"vip\": true}, \"last_visit\": \"2023-08-08T16:03:26.600831\"}"}
{"external_id":"s3-qa-3","payload":"{\"name\": \"5P44M\", \"age\": 15, \"subscriber\": true, \"retention\": {\"previous_purchases\": 7, \"vip\": true}, \"last_visit\": \"2023-08-08T16:03:26.600838\"}"}
{"external_id":"s3-qa-4","payload":"{\"name\": \"WMYS7\", \"age\": 11, \"subscriber\": true, \"retention\": {\"previous_purchases\": 0, \"vip\": false}, \"last_visit\": \"2023-08-08T16:03:26.600844\"}"}
{"external_id":"s3-qa-5","payload":"{\"name\": \"KCBLK\", \"age\": 47, \"subscriber\": true, \"retention\": {\"previous_purchases\": 11, \"vip\": true}, \"last_visit\": \"2023-08-08T16:03:26.600850\"}"}
{"external_id":"s3-qa-6","payload":"{\"name\": \"T93MJ\", \"age\": 47, \"subscriber\": true, \"retention\": {\"previous_purchases\": 10, \"vip\": false}, \"last_visit\": \"2023-08-08T16:03:26.600856\"}"}

ソースファイルの各行には有効な JSON が含まれている必要があります。含まれていない場合、そのファイルはスキップされます。
1
2
{"external_id":"s3-qa-0","payload":"{\"app_id\": \"YOUR_APP_ID\", \"name\": \"view-206\", \"time\": \"2024-04-02T14:34:08\", \"properties\": {\"bool_value\": false, \"preceding_event\": \"unsubscribe\", \"important_number\": 206}}"}
{"external_id":"s3-qa-1","payload":"{\"app_id\": \"YOUR_APP_ID\", \"name\": \"view-206\", \"time\": \"2024-04-02T14:34:08\", \"properties\": {\"bool_value\": false, \"preceding_event\": \"unsubscribe\", \"important_number\": 206}}"}

ソースファイルの各行には有効な JSON が含まれている必要があります。含まれていない場合、そのファイルはスキップされます。
1
2
{"external_id":"s3-qa-0","payload":"{\"app_id\": \"YOUR_APP_ID\", \"product_id\": \"product-11\", \"currency\": \"BSD\", \"price\": 8.511527858335066, \"time\": \"2024-04-02T14:34:08\", \"quantity\": 19, \"properties\": {\"is_a_boolean\": true, \"important_number\": 40, \"preceding_event\": \"click\"}}"}
{"external_id":"s3-qa-1","payload":"{\"app_id\": \"YOUR_APP_ID\", \"product_id\": \"product-11\", \"currency\": \"BSD\", \"price\": 8.511527858335066, \"time\": \"2024-04-02T14:34:08\", \"quantity\": 19, \"properties\": {\"is_a_boolean\": true, \"important_number\": 40, \"preceding_event\": \"click\"}}"}

ソースファイルの各行には有効な JSON が含まれている必要があります。含まれていない場合、そのファイルはスキップされます。
1
2
3
4
external_id,payload
s3-qa-load-0-d0daa196-cdf5-4a69-84ae-4797303aee75,"{""name"": ""SNXIM"", ""age"": 54, ""subscriber"": true, ""retention"": {""previous_purchases"": 19, ""vip"": true}, ""last_visit"": ""2023-08-08T16:03:26.598806""}"
s3-qa-load-1-d0daa196-cdf5-4a69-84ae-4797303aee75,"{""name"": ""0J747"", ""age"": 73, ""subscriber"": false, ""retention"": {""previous_purchases"": 22, ""vip"": false}, ""last_visit"": ""2023-08-08T16:03:26.598816""}"
s3-qa-load-2-d0daa196-cdf5-4a69-84ae-4797303aee75,"{""name"": ""EP1U0"", ""age"": 99, ""subscriber"": false, ""retention"": {""previous_purchases"": 23, ""vip"": false}, ""last_visit"": ""2023-08-08T16:03:26.598822""}"
1
2
3
ID,PAYLOAD,DELETED
85,"{""product_name"": ""Product 85"", ""price"": 85.85}",false
1,"{""product_name"": ""Product 1"", ""price"": 1.01}",true
オプションの DELETED カラムを含めることができます。DELETED が true の場合、そのカタログアイテムは Braze のカタログから削除されます。必要なカラムの完全なリストについては、カタログ識別子を参照してください。削除の動作については、カタログアイテムの削除を参照してください。エンドツーエンドのカタログ設定フロー(対象カタログの作成と同期動作を含む)については、カタログデータの同期と削除を参照してください。
データの削除
ファイルストレージ向けのCloud Data Ingestionでは、ファイルアップロードを通じてユーザーやカタログアイテムを削除できます。それぞれ別の同期とファイル形式を使用してください。
- ユーザーの削除 – データタイプをDelete Usersに設定した同期を作成し、ユーザー識別子のみを含むファイル(ペイロードなし)をアップロードします。
- カタログアイテムの削除 – 既存のカタログ同期を使用し、
deleted(またはDELETED)カラムを追加して削除対象のアイテムをマークします。
ユーザーの削除
ソースバケット内のファイルを使用してBrazeのユーザープロファイルを削除するには、次の手順を実行します。
- 新しいCloud Data Ingestion同期を作成します(他の同期と同じ設定です)。
- Brazeで同期を構成する際、Data TypeをDelete Usersに設定します。
- ユーザー識別子カラムのみを含むファイルをソースバケットにアップロードします。
PAYLOADカラムは含めないでください。誤った削除を防ぐため、ペイロードが存在すると同期が失敗します。
ファイル内の各行は、以下のいずれかを使用して正確に1人のユーザーを識別する必要があります。
| 識別子 | 説明 |
|---|---|
EXTERNAL_ID |
Brazeで使用されるexternal_idと一致します。 |
ALIAS_NAMEとALIAS_LABEL |
両方のカラムを組み合わせて、エイリアスでユーザーを識別します。 |
BRAZE_ID |
Brazeが生成したユーザーID(既存ユーザーのみ)。 |

ユーザーの削除は永続的であり、元に戻すことはできません。削除する予定のユーザーのみを含めてください。詳細については、Cloud Data Ingestionでユーザーを削除するを参照してください。
例 – JSON(ユーザー削除):
{"external_id":"user-to-delete-001"}
{"external_id":"user-to-delete-002"}
{"braze_id":"braze-id-from-profile"}
例 – CSV(ユーザー削除):
1
2
3
external_id
user-to-delete-001
user-to-delete-002
同期が実行されると、Brazeはバケット内の新しいファイルを処理し、対応するユーザープロファイルを削除します。
カタログアイテムの削除
ファイルストレージを使用してカタログからアイテムを削除するには、次の手順を実行します。
- カタログデータの同期に使用しているものと同じ同期(データタイプCatalogs)を使用します。
- CSVまたはJSONファイルに、オプションの
deleted(またはDELETED)カラムを追加します。 - Brazeのカタログから削除したいカタログアイテムに対して、
deletedをtrueに設定します。
各行には引き続きIDとPAYLOADが必要です。削除対象としてマークされた行については、ペイロードは最小限で構いません。BrazeはIDによってアイテムを削除します。
例 – JSON(カタログアイテムの削除):
{"id":"85","payload":"{\"product_name\": \"Product 85\", \"price\": 85.85}"}
{"id":"1","payload":"{\"product_name\": \"Product 1\", \"price\": 1.01}","deleted":true}
例 – CSV(カタログアイテムの削除):
1
2
3
ID,PAYLOAD,DELETED
85,"{""product_name"": ""Product 85"", ""price"": 85.85}",false
1,"{""product_name"": ""Product 1"", ""price"": 1.01}",true
同期が実行されると、deleted: trueが設定された行に対応するカタログアイテムがBrazeで削除されます。カタログの同期と削除の動作の詳細については、カタログデータの同期と削除を参照してください。
知っておくべきこと
- ソースバケットに追加するファイルは512 MBを超えないようにしてください。この制限はAmazon S3とGoogle Cloud Storageの両方に適用されます。512 MBを超えるファイルはエラーとなり、Brazeに同期されません。
- 1ファイルあたりの行数に追加の制限はありませんが、同期の実行速度を向上させるために、より小さいファイルを使用することをお勧めします。例えば、500 MBのファイル1つを取り込むよりも、100 MBのファイル5つに分割した方がかなり速くなります。
- 一定時間内にアップロードできるファイル数に追加の制限はありません。
- ファイル内およびファイル間での順序付けはサポートされていません。予想される競合を監視している場合は、定期的に更新をバッチ処理することをお勧めします。
トラブルシューティング
ファイルのアップロードと処理
CDIは、同期が作成された後に追加されたファイルのみを処理します。このプロセスでは、Brazeが新しいファイルの追加を検出し、新しい通知をトリガーします。これにより、新しいファイルを処理するための新しい同期が開始されます。Amazon S3の場合、通知はSQSへのメッセージです。Google Cloud Storageの場合、Pub/SubへのOBJECT_FINALIZEメッセージです。
既存のファイルを使用して、Brazeがバケットにアクセスし、取り込むファイルを検出できることを検証できますが、それらのファイルはBrazeに同期されません。CDIでそれらを処理するには、同期したい既存のファイルをソースバケットに再アップロードする必要があります。
予期しないファイルエラーの処理(Amazon S3)
多数のエラーや失敗したファイルが発生している場合、CDIのターゲットフォルダ以外のフォルダでS3バケットにファイルを追加している別のプロセスが存在する可能性があります。
ファイルがソースバケットにアップロードされたがソースフォルダ内ではない場合、CDIはSQS通知を処理しますが、そのファイルに対してアクションを実行しないため、エラーとして表示される場合があります。
問題がS3通知やSQS送信先の権限に関連している場合(送信先の検証エラーなど)、AWSのドキュメントを参照してください:
予期しないファイルエラーの処理(Google Cloud Storage)
Amazon S3と同様に、CDIは同期が作成された後にアップロードされたファイルのみを処理します。新しいオブジェクトごとにPub/SubトピックへのOBJECT_FINALIZEメッセージがトリガーされます。バケットに既に存在するファイルを取り込むには、それらを再アップロードしてください。
ファイルが取り込まれない場合は、以下を確認してください:
- バケット通知が存在すること。
gcloud storage buckets notifications list gs://YOUR-BUCKET-NAMEを使用してバケットの通知を一覧表示できます。 - Cloud Storageサービスエージェントがトピックに対して
roles/pubsub.publisherの権限を持っていること。 - Brazeサービスアカウントがサブスクリプションに対する使用権限(
pubsub.subscriptions.consume、カスタムロールまたはroles/pubsub.subscriberを通じて割り当て)を持っていること。 - サブスクリプションにデッドレターキューが設定されていないこと。BrazeはCloud Data Ingestionサブスクリプションのデッドレターキューをサポートしていません。
詳細については、Google CloudドキュメントのCloud StorageのPub/Sub通知を参照してください。