コンテンツにスキップ

ファイルストレージの連携

このページでは、クラウドデータ取り込みを設定し、Amazon S3、Google Cloud Storage、またはAzure Blob 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サブスクリプションからそれらの通知を取り込んで新しいファイルを取得します。
  • Azure Blob Storage: コンテナ内に新しいファイルが作成されると、Azure Event GridのイベントサブスクリプションがBlob CreatedイベントをAzure Storageキューに発行します。Brazeはキューからそれらのメッセージを読み取って新しいファイルを取得します。

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キューはグローバルに一意である必要があります(たとえば、1つのCDI同期にのみ使用でき、別のワークスペースで再利用することはできません)。

SQSキューのARNとURLをメモしてください。この設定中に頻繁に必要になります。

キューにアクセスできるユーザーを定義するJSONオブジェクトの例が表示された「Advanced」を選択した画面。

ステップ3:アクセスポリシーを設定する

アクセスポリシーを設定するには、Advanced optionsを選択します。

以下のステートメントをキューのアクセスポリシーに追加します。YOUR-BUCKET-NAME-HEREをバケット名に、YOUR-SQS-ARNをSQSキューのARNに、YOUR-AWS-ACCOUNT-IDをAWSアカウントIDにそれぞれ置き換えてください。

{
  "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. ステップ1で作成したバケットで、Properties > Event notificationsに移動します。
  2. 設定に名前を付けます。Brazeに取り込むファイルのサブセットのみを対象にしたい場合は、オプションでプレフィックスまたはサフィックスを指定します。
  3. DestinationでSQS queueを選択し、ステップ2で作成したSQSのARNを入力します。

ステップ5:IAMポリシーを作成する

Brazeがソースバケットとやり取りできるようにするためのIAMポリシーを作成します。開始するには、アカウント管理者としてAWS管理コンソールにサインインします。

  1. AWSコンソールのIAMセクションに移動し、ナビゲーションバーでPoliciesを選択してから、Create Policyを選択します。

    AWSコンソールの「Create policy」ボタン。

  2. JSONタブを開き、以下のコードスニペットをPolicy Documentセクションに入力します。YOUR-BUCKET-NAME-HEREをバケット名に、YOUR-SQS-ARN-HEREをSQSキュー名にそれぞれ置き換えてください。

{
    "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"
        }
    ]
}

  1. 完了したらReview Policyを選択します。

  2. ポリシーに名前と説明を付けてから、Create Policyを選択します。

「new-policy-name」という名前のポリシーの例。

ポリシーの説明フィールド。

ステップ6:IAMロールを作成する

AWSでの設定を完了するには、IAMロールを作成し、ステップ5のIAMポリシーをアタッチします。

  1. IAMポリシーを作成したコンソールの同じIAMセクションで、Roles > Create Roleに移動します。

「Create role」ボタン。

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

ソース名とS3接続詳細セクションが表示された「Add New Source」ページ。

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

S3の「Create Role」ページ。このページにはロール名、ロールの説明、信頼されたエンティティ、ポリシー、アクセス許可の境界のフィールドがあります。

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

new-policy-nameが選択されたロールARN。

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

「new-role-name」という名前のロールの例。

  1. 作成したロールのARNと生成した外部IDをメモしてください。クラウドデータ取り込み連携の作成に必要になります。

Brazeでのクラウドデータ取り込みの設定

  1. まず、Brazeダッシュボードで新しいソースを作成します。Data Settings > Cloud Data Ingestion > Sourcesに移動し、Add data sourceを選択してから、Amazon S3を選択します。
  2. ソースの名前を選択し、AWSの設定プロセスで取得した情報を入力して新しいソースを作成します。以下を指定してください。
  • ロールARN
  • 外部ID
  • バケット名
  • リージョン

認証情報(AWSの設定とBrazeの設定)と設定フィールドが表示されたS3接続詳細セクション。

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

データプレビュー付きの接続テストオプション。

  1. AWSの設定プロセスで取得した残りの情報を入力します。以下を指定してください。
    • SQS URL(新しい連携ごとに一意である必要があります)
    • フォルダパス(オプション、ワークスペース内の同期間で一意である必要があります)
  2. データタイプを選択し、Test Connectionを選択して、Brazeが取り込み可能なファイルを一覧表示できることを確認します(ファイル内のデータではありません)。成功したら、Next: Notificationsを選択します。
  3. アクセスや権限の問題で同期が中断された場合の通知用に、連絡先メールアドレスを追加します。オプションで、ユーザーレベルのエラーや同期成功の通知を有効にできます。
  4. 同期を作成します。

この連携には以下のリソースが必要です。

  • データストレージ用の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でバケットを作成します。

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を使用します。

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にはサブスクリプション(トピックではありません)が必要です。サブスクリプションはプルサブスクリプションである必要があります。

ステップ3:バケット通知をトピックに送信する

まず、Cloud Storageサービスエージェントにトピックへの発行権限を割り当ててから、OBJECT_FINALIZEの通知を作成します。OBJECT_FINALIZEイベントは、バケットに新しいオブジェクトが作成またはファイナライズされるたびに発生します。

# 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コンソールのダッシュボードで確認するか、以下のコマンドを実行してください。
gcloud projects describe YOUR-PROJECT-ID --format="value(projectNumber)"

ステップ4:サービスアカウントを作成する

Google Cloudコンソールで、IAM & Admin > Service Accounts > Create service accountに移動します。

または、gcloudを使用します。

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のみです。カスタムロールまたは事前定義ロールで割り当てることができます。

カスタムロール: これらの権限のみを持つカスタムロールを作成し、バケットとサブスクリプションにバインドします。

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を提供します。

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を使用します。

gcloud iam service-accounts keys create braze-cdi-gcs-key.json \
  --iam-account=[email protected]

Brazeでのクラウドデータ取り込みの設定

  1. Brazeで、Data Settings > Cloud Data Ingestion > Sourcesに移動し、Add data sourceを選択してから、Google Cloud Storageを選択します。

データソースの一覧からGoogle Cloud Storageを選択した「Add New Source」画面。

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

バケット、プロジェクトID、認証情報アップロードフィールドが表示されたGoogle Cloud Storageソースフォーム。

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

Pub/SubサブスクリプションIDとフォルダパスフィールドが表示されたGoogle Cloud Storage同期フォーム。

  1. Preview and validateを選択して、Brazeがサブスクリプションに到達し、取り込み可能なファイルを一覧表示できることを確認します。テストが成功するとバケット内の既存ファイルが表示されますが、それらのファイルは自動的に同期されません。
  2. エラー通知用の連絡先メールアドレスを追加します。Google Cloud Storageの同期はイベント駆動型のため、スケジュールは不要です。Brazeはファイルがアップロードされると新しいファイルを取り込みます。概要を確認し、Create syncを選択します。

共有バケット内のフォルダを同期する

1つのバケットを複数の同期で再利用できますが、各同期は個別のフォルダかつ専用のPub/Subサブスクリプションをターゲットにする必要があります。

共有バケット内で同期したい各フォルダについて、以下を行います。

  1. 同期のFolderフィールドをパスプレフィックスに設定します(例: attributes/)。Brazeはそのプレフィックスで始まるパスのオブジェクトのみを一覧表示し、取り込みます。
  2. そのフォルダの専用トピックとプレフィックススコープの通知を作成してから、そのトピックにサブスクリプションを作成します。

     # フォルダごとに1つのトピック
     gcloud pubsub topics create YOUR-ATTRIBUTES-TOPIC --project=YOUR-PROJECT-ID
    
     # Cloud Storageサービスエージェントにトピックへのパブリッシャー権限を割り当て
     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
    
  3. ステップ5と同様に、Brazeサービスアカウントにそのサブスクリプションのコンシューム権限を割り当てます。

     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"を使用してください。

  4. Brazeで同期を作成する際、このフォルダの新しいPub/Sub subscription IDとFolder pathを入力して、同期がそのフォルダのファイルのみを取り込むようにします。

この連携には以下のリソースが必要です。

  • データストレージ用のBlobコンテナを持つストレージアカウント
  • 新しいファイル通知用のAzure Storageキューとイベントサブスクリプション
  • CDIがコンテナとキューを読み取るために使用するMicrosoft Entra IDサービスプリンシパル

Azureの定義

用語 定義
ストレージアカウント ストレージアカウントは、CDIがファイルを読み取るコンテナとCDIが通知を読み取るキューの両方を保持するトップレベルのAzureリソースです。
コンテナ コンテナは、CDIに取り込むデータファイルを保持します。コンテナはストレージアカウント内に存在します。
Azure Storageキュー キューは、コンテナからの新しいファイル通知を受け取ります。CDIはこのキューからメッセージを読み取り、確認して、どのファイルを取り込むかを判断します。
イベントサブスクリプション イベントサブスクリプションは、Azure Event Gridサービスを使用して、ストレージアカウントから送信先にイベントをルーティングします。Blob Createdイベントをキューに送信するように設定します。
システムトピック システムトピックはイベントのソースを表します。最初のイベントサブスクリプションを追加すると、Event Gridがストレージアカウント用に1つ作成します。
サービスプリンシパル サービスプリンシパルは、CDIが認証に使用するMicrosoft Entra IDのIDです。アプリ登録を通じて作成し、その認証情報をBrazeに入力します。
Azureロール割り当て ロール割り当ては、特定のスコープでサービスプリンシパルに一連の権限を付与します。Brazeサービスプリンシパルにストレージアカウントで3つの組み込みロールを割り当てます。

Azureでのクラウドデータ取り込みの設定

ステップ1:コンテナを作成する

コンテナとキューは同じストレージアカウント内に存在する必要があります。既存のストレージアカウントを再利用できます。まだ持っていない場合は、AzureポータルでStorage accounts > + Createに移動して作成してください。

  1. Azureポータルでストレージアカウントに移動し、Data storage > Containersに移動します。
  2. + Add containerを選択して名前を付けます。

ストレージアカウント名とコンテナ名をメモしてください。Brazeでソースを設定する際に両方が必要になります。

ステップ2:キューを作成する

  1. 同じストレージアカウントで、Data storage > Queuesに移動します。
  2. + Queueを選択して名前を付けます。

キュー名をメモしてください。同期を作成する際に必要になり、各同期には専用のキューが必要です。

ステップ3:イベントサブスクリプションを作成する

ファイルが到着したときにコンテナがキューに通知するよう、イベントサブスクリプションを作成します。

  1. 同じストレージアカウントでEventsに移動し、+ Event Subscriptionを選択します。
  2. Event Subscription DetailsでNameを入力し、Event SchemaをEvent Grid Schemaに設定します。
  3. Topic DetailsでSystem Topic Nameを確認します。ストレージアカウントにシステムトピックがまだない場合は、名前を入力して作成します。すでにある場合は、そのフィールドに名前が表示され、変更できません。ストレージアカウントのすべてのイベントサブスクリプションは同じシステムトピックを使用します。
  4. Event Typesで、Filter to Event TypesをBlob Createdのみに設定します。Blob Deletedもデフォルトで選択されているので、クリアしてください。
  5. Endpoint Detailsで、Endpoint TypeをStorage Queueに設定します。エンドポイントタイプを選択すると、Configure an endpointリンクが表示されます。
  6. Configure an endpointを選択し、作業しているストレージアカウントを選択します。
  7. Select existing queueを選択し、ステップ2で作成したキューを選択します。
  8. Selectを選択してエンドポイントを確認します。
  9. Createを選択します。

ステップ4:サービスプリンシパルを作成する

CDIはMicrosoft Entra ID認証を使用するサービスプリンシパルでストレージアカウントに接続します。Brazeには接続に以下の詳細が必要です。

  • AzureアカウントのテナントID(ディレクトリとも呼ばれます)
  • サービスプリンシパルのプリンシパルID(アプリケーションIDとも呼ばれます)
  • Brazeが認証に使用するクライアントシークレット

アプリケーションの登録には、Microsoft Entra IDでアプリ登録を作成する権限が必要です。権限がない場合は、Entra管理者にこのステップを完了して認証情報を共有してもらうよう依頼してください。

  1. Azureポータルで、Microsoft Entra管理センターに移動し、App Registrationsを選択します。
  2. Identity > Applications > App registrationsの下にある+ New registrationを選択します。
  3. 名前を入力し、サポートされるアカウントの種類としてAccounts in this organizational directory onlyを選択します。次に、Registerを選択します。
  4. 作成したアプリケーション(サービスプリンシパル)を選択し、Certificates & secrets > + New client secretに移動します。
  5. シークレットの説明を入力し、シークレットの有効期限を設定します。次に、Addを選択します。
  6. 作成されたクライアントシークレットをメモしておき、Brazeの設定で使用します。

CDI専用のサービスプリンシパルを作成することを推奨します。これにより、アクセスが同期しているコンテナとキューに限定されます。Microsoft Fabricソース用にすでに設定済みのものがある場合は再利用できますが、その場合は両方にアクセスできるようになります。いずれの場合も、次のステップでロールの割り当てが必要です。

ステップ5:サービスプリンシパルに権限を割り当てる

CDIにはファイルの読み取りとキューメッセージの処理に十分なアクセス権のみが必要です。ストレージアカウント自体に以下の3つの組み込みロールを割り当ててください(サブスクリプションやリソースグループではなく)。ロール割り当ては下方に継承されるためです。Storage Blob Data Contributor、Storage Account Contributor、Ownerなど、CDIが使用しない書き込みや管理の権限を付与するより広範なロールは割り当てないでください。

  1. ストレージアカウントに移動し、Access Control (IAM)に移動します。
  2. Add > Add role assignmentを選択します。
  3. ステップ4で作成したサービスプリンシパルを名前で検索します。
  4. 以下の組み込みロールを割り当てます。
    • Storage Blob Data Reader: CDIがコンテナ内のファイルを読み取れるようにします。
    • Storage Queue Data Reader: CDIがキュー自体を読み取れるようにし、同期で指定したキューを見つけてそのプロパティを確認できるようにします。
    • Storage Queue Data Message Processor: CDIがキューのメッセージをピーク、取得、削除できるようにします。

コンテナ内のBlobへの読み取りアクセス、キューへの読み取りアクセス、およびキューのメッセージの受信と削除の機能のみを付与するカスタムロールを代わりに使用することもできます。

Brazeでのクラウドデータ取り込みの設定

  1. Brazeで、Data Settings > Cloud Data Ingestion > Sourcesに移動し、Add data sourceを選択してから、Azure Blobを選択します。

データソースの一覧からAzure Blobを選択した「Add New Source」画面。

  1. Azure Blob Connection Detailsのフィールドに入力します。
    • Credentials: Tenant ID、Principal ID、Client Secret
    • Configuration: Storage accountとContainer

Tenant ID、Principal ID、Client Secret、ストレージアカウント、コンテナのフィールドが表示されたAzure Blob接続詳細フォーム。

  1. Test connectionを選択してから、Connect to Sourceを選択します。
  2. 同期を作成します。Data Settings > Cloud Data Ingestion > Syncsに移動し、Create data syncを選択します。
  3. Configurationsで、同期名を選択し、Azure Blobソースを選択してから、Data Type(User Attributes、Custom Events、Purchase Events、Catalog、Delete Usersなど)を選択します。
  4. Data definitionで、以下を指定します。

Storageキュー名とフォルダパスのフィールドが表示されたAzure Blob同期フォーム。

  1. Preview and validateを選択して、CDIがキューに到達し、取り込み可能なファイルを一覧表示できることを確認します。テストが成功するとコンテナ内の既存ファイルが表示されますが、それらのファイルは自動的に同期されません。接続の検証が成功するまで同期はアクティブになりません。
  2. Notificationsで、エラー通知用の連絡先メールアドレスを追加します。
  3. Scheduleには、ファイルストレージ同期用のオプションはありません。Azure Blob Storageの同期はイベント駆動型のため、CDIはファイルがアップロードされると新しいファイルを取り込みます。
  4. Summaryを確認してから、Create syncを選択します。

共有コンテナ内のフォルダを同期する

1つのコンテナを複数の同期で再利用できますが、各同期には専用のストレージキューと専用のフォルダが必要です。

共有コンテナ内で同期したい各フォルダについて、以下を行います。

  1. ステップ2と同様に、そのフォルダ用のキューを作成します。
  2. ステップ3と同様に、コンテナのBlob Createdイベントをそのキューに送信するイベントサブスクリプションを作成します。
  3. Brazeで同期を作成する際、そのフォルダのStorage queue nameを入力し、Folder path (Optional)をattributes/などのフォルダプレフィックスに設定します。CDIはそのプレフィックスで始まるパスのファイルのみを取り込みます。

必須のファイル形式

必須のファイル形式は、Amazon S3、Google Cloud Storage、Azure Blob 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のユーザーIDです。Braze SDKによって生成されます。Cloud Data Ingestionを通じてBraze IDで新規ユーザーを作成することはできません。新規ユーザーを作成するには、external IDまたはユーザーエイリアスを指定してください。
EMAIL ユーザーのメールアドレスです。同じメールアドレスを持つプロファイルが複数存在する場合、最後に更新されたプロファイルが優先されます。メールと電話番号の両方を含む場合、Brazeはメールを主要な識別子として使用します。
PHONE ユーザーの電話番号です。同じ電話番号を持つプロファイルが複数存在する場合、最後に更新されたプロファイルが優先されます。

識別子に加え、各行にはBrazeのユーザーに同期するフィールドのJSON文字列を含むPAYLOADカラムが必要です。

カタログ識別子

カタログ同期では、ソースファイルに以下のカラムが必要です。カタログファイルはユーザーデータファイルとは異なる識別子を使用します。

カラム 必須 説明
ID はい カタログアイテムの一意の識別子です。Brazeでアイテムの作成、更新、削除に使用されます。
PAYLOAD はい 同期するカタログフィールドと値のJSON文字列です。Brazeのカタログスキーマと一致する必要があります。
DELETED いいえ trueの場合、一致するIDのカタログアイテムがBrazeのカタログから削除されます。作成または更新操作の場合は、このカラムを省略するかfalseに設定してください。

例

{"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\"}"}
{"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}}"}
{"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\"}}"}
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""}"
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のユーザープロファイルを削除するには:

  1. 新しいCloud Data Ingestion同期を作成します(他の同期と同じ設定です)。
  2. Brazeで同期を設定する際、Data TypeをDelete Usersに設定します。
  3. ユーザー識別子の列のみを含むファイルをソースバケットにアップロードします。PAYLOAD列は含めないでください。誤った削除を防ぐため、ペイロードが存在すると同期は失敗します。

ファイルの各行は、以下のいずれかを使用して正確に1人のユーザーを識別する必要があります。

識別子 説明
EXTERNAL_ID Brazeで使用されるexternal_idと一致します。
ALIAS_NAMEとALIAS_LABEL 両方の列を組み合わせてエイリアスでユーザーを識別します。
BRAZE_ID Brazeが生成したユーザーID(既存ユーザーのみ)。

例 – JSON(ユーザー削除):

{"external_id":"user-to-delete-001"}
{"external_id":"user-to-delete-002"}
{"braze_id":"braze-id-from-profile"}

例 – CSV(ユーザー削除):

external_id
user-to-delete-001
user-to-delete-002

同期が実行されると、Brazeはバケット内の新しいファイルを処理し、該当するユーザープロファイルを削除します。

カタログアイテムの削除

ファイルストレージを使用してカタログからアイテムを削除するには:

  1. カタログデータを同期するために使用しているものと同じ同期(データタイプCatalogs)を使用します。
  2. CSVまたはJSONファイルに、オプションのdeleted(またはDELETED)列を追加します。
  3. 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(カタログアイテム削除):

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、Azure Blob Storageに適用されます。512 MBを超えるファイルはエラーとなり、Brazeに同期されません。Azure Blob Storage自体ははるかに大きなファイルを許可していますが、CDIはすべてのファイルストレージソースに同じ512 MBの制限を適用します。
  • ファイルあたりの行数に追加の制限はありませんが、同期の実行速度を向上させるために、より小さなファイルを使用することをお勧めします。たとえば、500 MBのファイルは、100 MBのファイル5つに分割した場合と比較して、取り込みにかなり長い時間がかかります。
  • 一定期間内にアップロードするファイル数に追加の制限はありません。
  • ファイル内またはファイル間での順序付けはサポートされていません。予想される競合を監視している場合は、定期的に更新をバッチ処理することをお勧めします。

トラブルシューティング

ファイルのアップロードと処理

CDI は、同期が作成された後に追加されたファイルのみを処理します。このプロセスでは、Braze は新しいファイルが追加されるのを監視し、それが新しい通知をトリガーします。この通知により、新しいファイルを処理するための新しい同期が開始されます。Amazon S3 の場合、通知は SQS へのメッセージです。Google Cloud Storage の場合、Pub/Sub への OBJECT_FINALIZE メッセージです。Azure Blob Storage の場合、Azure Storage キューに配信される Blob Created イベントです。

既存のファイルを使用して、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 通知を参照してください。

予期しないファイルエラーの処理 (Azure Blob Storage)

Amazon S3 および Google Cloud Storage と同様に、CDI は同期が作成された後にアップロードされたファイルのみを処理します。新しい BLOB ごとに、キューへの Blob Created イベントがトリガーされます。コンテナ内に既に存在するファイルを取り込むには、それらを再アップロードしてください。

ファイルが取り込まれない場合は、以下を確認してください。

  • ストレージアカウントにイベントサブスクリプションが存在し、Blob Created でフィルタリングされていること。
  • イベントサブスクリプションが Event Grid Schema を使用していること。CDI は別のスキーマで配信されたイベントを読み取ることができません。
  • イベントサブスクリプションのエンドポイントが、別のキューではなく、同期に設定されたキューを指していること。
  • Braze サービスプリンシパルがストレージアカウントに対して Storage Blob Data Reader、Storage Queue Data Reader、および Storage Queue Data Message Processor を持っていること。
  • サービスプリンシパルのクライアントシークレットの有効期限が切れていないこと。Azure はクライアントシークレットに有効期限を適用しており、期限切れのシークレットは同期を停止させます。

詳細については、Microsoft ドキュメントの Event Grid ソースとしての Azure Blob Storage を参照してください。

New Stuff!