ファイルストレージの連携
このページでは、クラウドデータ取り込みを設定し、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がPub/Subトピックに
OBJECT_FINALIZE通知を発行します。BrazeはPub/Subサブスクリプションからこれらの通知を消費して、新しいファイルを取り込みます。
Cloud Data Ingestionは以下をサポートしています。
- JSONファイル
- CSVファイル
- Parquetファイル
- 属性、カスタムイベント、購入イベント、ユーザー削除、およびカタログデータ
クラウドデータ取り込みの設定
設定手順はファイルストレージプロバイダーによって異なります。お使いのプロバイダーのタブを選択し、その後に続く共通設定セクションを完了してください。
この連携には以下のリソースが必要です。
- データ保存用のS3バケット
- 新しいファイル通知用のSQSキュー
- Brazeアクセス用のIAMロール
AWSの定義
| 用語 | 定義 |
|---|---|
| Amazon Resource Name (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キューはグローバルに一意でなければなりません(例えば、CDI同期には1つしか使用できず、別のワークスペースで再利用することはできません)。

このSQSは、バケットを作成したリージョンと同じリージョンに必ず作成してください。
この設定ではARNとSQSのURLを頻繁に使用するため、それらを必ずメモしてください。

ステップ3:アクセスポリシーの設定
アクセスポリシーを設定するには、詳細オプションを選択します。
次のステートメントをキューのアクセスポリシーに追加します。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で、データ設定 > クラウドデータ取り込み > ソースに移動し、データソースを追加を選択して、ファイルソースセクションからAmazon S3を選択します。
- 自動生成されたBrazeアカウントIDをコピーします。

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

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

ロールに名前と説明を指定し、Create Roleを選択します。

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

- 接続テストを選択して、Brazeがバケットにアクセスできることを確認します。テストが成功したら、ソースに接続を選択します。接続に失敗した場合は、問題のトラブルシューティングに役立つエラーメッセージが表示されます。
- 次に、新しい同期を作成します。データ設定 > クラウドデータ取り込み > 同期に移動し、データ同期を作成を選択します。
- 同期の名前を選択します。次に、アクティブなS3ソースを選択し、同期のソーステーブルを入力します。データタイプを選択し、接続テストを選択します。

- AWSの設定プロセスで取得した残りの情報を入力します。以下を指定してください。
- SQS URL(新しい連携ごとに一意である必要があります)
- フォルダーパス(オプション、ワークスペース内の同期間で一意である必要があります)
- データタイプを選択し、接続テストを選択して、Brazeが取り込み可能なファイルの一覧を表示できることを確認します(ファイル内のデータではありません)。成功したら、次へ:通知を選択します。
- アクセスや権限の問題で同期が中断した場合の通知用に、連絡先メールアドレスを追加します。オプションで、ユーザーレベルのエラーや同期成功の通知を有効にできます。
- 同期を作成します。
この連携には以下のリソースが必要です。
- データ保存用の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コンソールのダッシュボードで確認するか、以下のコマンドを実行してください。
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:braze-cdi-gcs@YOUR-PROJECT-ID.iam.gserviceaccount.com" \
--role="projects/YOUR-PROJECT-ID/roles/brazeCdiGcs"
gcloud pubsub subscriptions add-iam-policy-binding YOUR-SUBSCRIPTION \
--project=YOUR-PROJECT-ID \
--member="serviceAccount:braze-cdi-gcs@YOUR-PROJECT-ID.iam.gserviceaccount.com" \
--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:braze-cdi-gcs@YOUR-PROJECT-ID.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
gcloud storage buckets add-iam-policy-binding gs://YOUR-BUCKET-NAME \
--member="serviceAccount:braze-cdi-gcs@YOUR-PROJECT-ID.iam.gserviceaccount.com" \
--role="roles/storage.legacyBucketReader"
gcloud pubsub subscriptions add-iam-policy-binding YOUR-SUBSCRIPTION \
--project=YOUR-PROJECT-ID \
--member="serviceAccount:braze-cdi-gcs@YOUR-PROJECT-ID.iam.gserviceaccount.com" \
--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=braze-cdi-gcs@YOUR-PROJECT-ID.iam.gserviceaccount.com
Brazeでのクラウドデータ取り込みの設定
- Brazeで、データ設定 > クラウドデータ取り込み > ソースに移動し、データソースを追加を選択してからGoogle Cloud Storageを選択します。

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

- 接続テストを選択してから、ソースに接続を選択します。
- 同期を作成します。データ設定 > クラウドデータ取り込み > 同期に移動し、データ同期を作成を選択します。同期名とデータタイプ(ユーザー属性、カスタムイベント、購入イベント、カタログ、ユーザーの削除など)を選択してから、次へを選択します。
- データ定義ステップで、GCSソースを選択し、以下を指定します。
- Pub/SubサブスクリプションID — ステップ2のサブスクリプションID(トピックではありません)
- フォルダーパス(オプション)— バケット内のパスプレフィックス(共有バケット内のフォルダーの同期を参照)

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

同じソースバケットを共有する複数の同期では、フォルダーパスとサブスクリプションの両方がワークスペース内の同期間で一意である必要があります。ステップ2と同様に、これらのサブスクリプションにデッドレターキューを設定しないでください。
共有バケット内で同期したいフォルダーごとに、以下を行います。
- 同期のFolderフィールドをパスプレフィックスに設定します(例:
attributes/)。Brazeはそのプレフィックスで始まるパスのオブジェクトのみを一覧表示し、取り込みます。 -
そのフォルダー用に専用のトピックとプレフィックススコープの通知を作成し、次にそのトピックにサブスクリプションを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# フォルダーごとに1つのトピック gcloud pubsub topics create YOUR-ATTRIBUTES-TOPIC --project=YOUR-PROJECT-ID # トピックにCloud Storageサービスエージェントのpublisher権限を割り当てる 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" # --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/ # 同期ごとに1つのサブスクリプション gcloud pubsub subscriptions create YOUR-ATTRIBUTES-SUBSCRIPTION \ --topic=YOUR-ATTRIBUTES-TOPIC --project=YOUR-PROJECT-ID --ack-deadline=60
-
ステップ5と同様に、Brazeサービスアカウントにそのサブスクリプションのconsume権限を割り当てます。
1 2 3 4
gcloud pubsub subscriptions add-iam-policy-binding YOUR-ATTRIBUTES-SUBSCRIPTION \ --project=YOUR-PROJECT-ID \ --member="serviceAccount:braze-cdi-gcs@YOUR-PROJECT-ID.iam.gserviceaccount.com" \ --role="roles/pubsub.subscriber"
ステップ5でカスタムロールを作成した場合は、代わりに
--role="projects/YOUR-PROJECT-ID/roles/brazeCdiGcs"を使用してください。 - Brazeで同期を作成する際に、このフォルダーの新しいPub/SubサブスクリプションIDとフォルダーパスを入力して、そのフォルダーのファイルのみを取り込むようにします。
必須ファイル形式
必須ファイル形式は 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に同期されません。
- ファイルあたりの行数に追加の制限はありませんが、同期の実行速度を向上させるために、より小さなファイルを使用することをお勧めします。たとえば、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通知を参照してください。