NTT DATA TECH
📍

Amazon Pinpointからのメール配信基盤移行 Vol.1 データ移行における安全なバックアップ

はじめに

はじめまして。2024年度にNTTデータへ新卒入社し、現在2年目となる瀧川と申します。

本シリーズでは、Amazon PinpointのEメール機能からAmazon Connectへの移行について、私自身が業務で直面した課題やその解決方法を実体験に基づいてご紹介します。

早速ですが、Amazon Pinpointを用いたメール配信基盤を導入して間もない頃、Amazon Web Services(AWS)から2026年10月30日をもってAmazon Pinpointのサポートを終了するという公式発表がありました。
参考:Amazon Pinpoint サポート終了アナウンス

近年、Amazon Connectの機能が急速に強化されているため、Amazon Connect中心のカスタマーエンゲージメント基盤にシフトしているのかもしれません。また、昨年の11月からAmazon Connect Email の一般提供が開始されたのも大きい要因だと考えられます。

また、AWS公式のアナウンスやサポート窓口からの案内でも、移行先としてAmazon Connectの活用が推奨されている状況です。

Amazon Pinpoint エンゲージメント機能 (エンドポイント、セグメント、キャンペーン、ジャーニー、分析) を使用している場合は、Amazon Connect プロアクティブエンゲージメントソリューション (Amazon Connect アウトバウンドキャンペーンや Amazon Connect Customer Profiles など) に移行して、統合されたパフォーマンス追跡と、1 つの統合アプリケーションを使用してインバウンド (カスタマーサポートなど) とアウトバウンド (プロアクティブコミュニケーションなど) を管理する機能を使用して、チャネル間でパーソナライズされたタイムリーなエンゲージメントを促進することをお勧めします。
https://docs.aws.amazon.com/ja_jp/pinpoint/latest/userguide/migrate.html

そして、Amazon ConnectのEメール機能に関する情報や実装方法を紹介する記事は数多く公開されています。

しかしながら、サービス終了がアナウンスされたAmazon Pinpointから、Amazon ConnectへのEメール機能の移行に焦点を当てた詳細な技術記事や実践的なガイドは、意外にもほとんど見当たりません。

そこで本シリーズでは、私自身が行った Amazon PinpointからAmazon Connectへの移行作業について、各ステップでの工夫や苦労したポイント、乗り越えた方法を整理して紹介していきたいと思います。

今回のテーマ:データバックアップ

第1回目となる今回は、移行前に安全にデータバックアップを取る方法に焦点を当てて解説します。特に、顧客データやエンドポイント情報をどのようにAmazon Pinpointからエクスポートし、次のAmazon Connect環境へ持ち込むかは、移行全体の品質に直結します。

前提と安全確認

前提として、今回Amazon PinpointからAmazon Connectへの移行に伴ってメール配信のサービスが停止できることがありますのでご注意ください。そのため、Amazon Pinpointを利用しているサービスを停止させずに、過去のAmazon Pinpointデータを移行したり、更新中のAmazon Pinpointデータを移行することは本件では考慮しておりません。

また、Amazon Connectでは、現時点でCSV形式のセグメントファイルのみインポート可能です(2025年7月時点)。つまり、Amazon Pinpointから顧客情報を取得する際、一度ローカル環境へファイルをエクスポートする必要があります。

そのため、移行作業は以下のようなセキュアな実行環境での実施が推奨されます。

・社内で管理された本番端末
・AWS WorkSpacesなどの仮想デスクトップ環境
・ローカル保存時のアクセス制御、暗号化の徹底

以上の安全性を確保したうえで、次章以降ではどのデータを、どのような手順で取得・変換し、Amazon Connectに持ち込むかを具体的に解説していきます。

📌Amazon Pinpoint・Amazon Connectとは?

そもそもAmazon Pinpoint・Amazon Connectとはどのようなサービスなのか、ご存じでない方もいらっしゃると思いますので本記事でも簡単ではありますが説明させていただきます。

Amazon Pinpoint

Amazon Pinpointをとても簡単に表現すると、メッセージをいろんな人に送るお手伝いをする道具(ツール)です。メールをはじめ、プッシュ通知やSMSを送ることができ、イベントやキャンペーンを実施する際に便利なサービスです。

また、利点としては大きく分けて以下の3つがありました。

  1. 「昨日アプリを使った人だけにお知らせを送りたい」というように配信先の属性を絞って配信することが可能。
  2. メッセージを送ったあとに、「何人が見たか」「何人がクリックしたか」をダッシュボードで見ることが可能。
  3. 送信したい時間を予約して自動で送ることが可能。

1.の利点でも説明したようにユーザーごとの属性情報を持つエンドポイントと、それらを分類するセグメント機能が特徴としてあり、ターゲットユーザーに合わせたメッセージ送信などは大変重宝しました。そして、メッセージ作成から配信までの操作もわかりやすかった分、終わってほしくないサービスでした。

エンドポイント:ユーザーを表す単位。例:メールアドレス・属性(言語、国、年齢層)
セグメント:フィルター条件によって構築されるユーザー群。例:日本在住かつ20代のユーザー

※詳細については以下AWS公式ドキュメントをご覧ください。
https://aws.amazon.com/jp/pinpoint/

Amazon Connect

Amazon Connectをとても簡単に表現すると、お客様からの問い合わせに対応するための、電話やメールなどをまとめて扱えるクラウド上の窓口を作るツールです。

チャット・Eメール・タスクなど複数チャネルに対応しており、顧客体験を統一的に管理・最適化できる「カスタマーエンゲージメントのハブ」として使われています。

主に音声通話を中心とした顧客対応基盤として使われてきましたが、近年はチャット・タスク・Eメールなどのマルチチャネル対応が急速に進化しており、エージェントによる対応やワークフロー設計、AIによる自動化も可能な総合的なカスタマーエンゲージメントプラットフォームへと進化しています。

https://aws.amazon.com/jp/connect/

今回移行先のサービスとしての利点としては大きく分けて以下の2つがあります。

  1. テンプレートやルールに基づいて返信の自動化・効率化

  2. Eメール内容を分析し、顧客満足度やニーズを可視化

そのため、Amazon Pinpointで使用していたテンプレートや配信を追加実装なく自動化でき、顧客ニーズや開封率など分析することが継続できます。

一方、デメリットとしては2つあります。

・Amazon Pinpointで使っていたジャーニー機能が存在しない
Amazon Pinpoint最大の特徴である「ジャーニー(顧客体験フロー)」が、現時点のAmazon Connectには存在しません。ジャーニーとは、お客さんの行動(読んだ・読んでない・クリックした・しない)に合わせて、次のメッセージを自動で決めてくれるルートマップのようなものです。それがAmazon Connectでは現時点(2025年8月)では実現できません。

・Amazon Connectのセグメント機能はまだ限定的(2025年7月時点の仕様に基づく)
Amazon Pinpointのように動的・属性連動型ではないため、セグメントの自動更新や「直近7日以内に開封したユーザーだけに送る」といったリアルタイムな絞り込みには追加実装が必要となります。

移行に伴うデータのバックアップ

本題から少し話が逸れましたが、今回のメインテーマである「移行前のデータバックアップを取る方法」の説明に移っていきます。

AWS以外のツールやサービスへの移行であってもそうでなくとも、移行前にはまずはデータのバックアップが必要です。

「いやいや、大層なこと言うてはるけどAWSのコンソール上でエクスポート押してCSVファイルとかで保存して終わりちゃいますのん?」と思われた方もいると思います。私も同様に考え、実際にコンソール上でCSVファイルを保存したのですが、コンソール上のエクスポート機能で取得できるのは、ユーザー属性などのエンドポイント情報(静的な条件)のみで、セグメントの定義(動的な条件)、キャンペーンの設定やイベントの流れ(ジャーニー)までは含まれません。そのため、今回はAPIを活用してJSON形式でデータを取得します。これにより、セグメント定義やキャンペーン構成も含めた完全なデータのバックアップが可能となります。

エクスポートされる情報

取得項目 AWSコンソール プログラム(API)を使う
ユーザー属性(エンドポイント) ✅ エクスポート可 ✅ エクスポート可
グループの条件(セグメント) ❌ エクスポート不可 ✅ エクスポート可
キャンペーンの設定 ❌ エクスポート不可 ✅ エクスポート可
イベントの流れ(ジャーニー) ❌ エクスポート不可 ✅ エクスポート可

それでは、次のセクションからAPIを活用したデータのバックアップ方法を具体的に記載していきます。

バックアップの方法

APIを活用するために、Amazon Web Services(AWS)CLI(以下AWS CLI)を使用します。
今回Amazon Pinpointの以下APIを活用し、JSON形式で取得します。
GetCampaign
GetSegment
GetJourney
GetEmailTemplate
GetSmsTemplate
など

※AWS CLIの導入方法については、下記公式ドキュメントや他記事を参照してください。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions

S3バケット(保存先)の準備

まずはJSON形式で取得した後に保存するS3バケットの準備を行います。
以下のバケットポリシーでaws:SourceVpceなどを使い社内VPCからのみ書き込みが可能になります。この設定により、指定したVPCエンドポイント以外からの書き込みをブロックします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPutOnlyFromVPCe",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-pinpoint-backup/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-0abc1234def567890"
        }
      }
    }
  ]
}

また、バケット設定ではバージョニングを設定し、ファイルの上書きや削除を防ぎ、意図しない変更に対して復元可能にします。そして、S3暗号化(SSE-KMS)を有効化し、保存データの暗号化とキーのアクセス管理を強化します。

IAMロールの設定

次にAmazon Pinpoint から S3 に書き込む IAM ロールを用意します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect":"Allow",
      "Action":["s3:PutObject","s3:AbortMultipartUpload"],
      "Resource":["arn:aws:s3:::my-pinpoint-backup/*"]
    }
  ]
}

上記で用意したロールに必要な権限(IAMポリシー)を付与します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowReadAccessToPinpoint",
      "Effect": "Allow",
      "Action": [
        "mobiletargeting:GetEndpoint",
        "mobiletargeting:GetUserEndpoints",
        "mobiletargeting:GetSegment",
        "mobiletargeting:GetSegments",
        "mobiletargeting:GetCampaign",
        "mobiletargeting:GetCampaigns",
        "mobiletargeting:GetJourney",
        "mobiletargeting:GetJourneys",
        "mobiletargeting:GetSegmentExportJobs"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowS3Upload",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::your-bucket-name/path/to/*"
    },
    {
      "Sid": "AllowS3ListBucket",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::your-bucket-name"
    }
  ]
}

最後にAWS CLIを使用して、セグメントの定義(動的な条件)、キャンペーンの設定やイベントの流れ(ジャーニー)の情報を取得・保存していきます。

単一エンドポイントを取得する

# エンドポイント情報をローカルに保存
aws pinpoint get-endpoint \
  --application-id YOUR_APP_ID \
  --endpoint-id YOUR_ENDPOINT_ID \
  --output json > endpoint.json

# アップロード
aws s3 cp endpoint.json s3://your-bucket-name/path/to/endpoint.json

※Amazon Pinpointはエンドポイントをスケーラブルに分散管理しているため、エンドポイントを全件取得するコマンドは用意されていません。ですので、こちらはコンソール上でエクスポートボタンを押して、CSVファイル形式で全件取得してしまってもよいかもしれません。

定義を含めてセグメント取得する

# セグメント情報をローカルに保存
aws pinpoint get-segments \
  --application-id YOUR_APP_ID \
  --output json > segments-list.json

# アップロード
aws s3 cp segments-list.json s3://your-bucket-name/path/to/segments-list.json

複数キャンペーンを設定情報を含めて一括で取得してS3に保存

# キャンペーン情報をローカルに保存
aws pinpoint get-campaigns \
  --application-id YOUR_APP_ID \
  --output json > campaigns.json

# アップロード
aws s3 cp campaigns.json s3://your-bucket-name/path/to/campaigns.json

全ジャーニーの一覧を取得してS3に保存

# 一覧をローカルに保存
aws pinpoint list-journeys \
  --application-id YOUR_APP_ID \
  --output json > journeys-list.json

# アップロード
aws s3 cp journeys-list.json s3://your-bucket-name/path/to/journeys-list.json

以上で用意したS3バケットに各情報がバックアップされました。

以下はその他のデータを取得する際の参考となります。
IAMロールを別に記載しておりますが、先ほどのIAMロールに設定を追記する形でも問題ありません。

参考(その他のデータ取得)

IAMロールの設定

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowReadAccessToPinpointAnalytics",
      "Effect": "Allow",
      "Action": [
        "mobiletargeting:GetCampaignActivities",
        "mobiletargeting:GetCampaignDateRangeKpi",
        "mobiletargeting:GetCampaignKpi",
        "mobiletargeting:GetApplicationSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowPutToS3ForBackups",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::your-bucket-name/path/to/*"
    },
    {
      "Sid": "AllowReadFromS3ForVerification",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/path/to/*"
      ]
    }
  ]
}

履歴ログ(送信アクティビティ)

aws pinpoint get-campaign-activities \
  --application-id APP_ID \
  --campaign-id CAMPAIGN_ID \
  --profile pinpoint-bk \
  > CAMPAIGN_ID_activities.json

送信開始時刻・完了時刻・送信数などが取得できます。

KPI/成果メトリクス

END=$(date -u +%Y-%m-%dT%H:%M:%SZ)
START=$(date -u -d '2020-01-01' +%Y-%m-%dT%H:%M:%SZ)

aws pinpoint get-campaign-date-range-kpi \
  --application-id APP_ID \
  --campaign-id CAMPAIGN_ID \
  --kpi-name open-rate \
  --start-time "$START" \
  --end-time "$END" \
  --profile pinpoint-bk \
  > CAMPAIGN_ID_openrate.json

バックアップファイルの検証・保存

バックアップしたJSONファイルが正しく保存されているか、構文エラーがないかを確認するために、ローカルにダウンロードして内容を表示してみてください。

下記のコマンドで、S3に保存されているファイルをローカルにコピーし、jqコマンドで整形表示することができます。

aws s3 cp s3://your-bucket-name/path/to/endpoint.json . && jq . endpoint.json

まとめ

いかがでしたでしょうか。今回はデータバックアップ編として、基礎的なAmazon Pinpointデータの取得、保管のステップをご紹介しました。

IAM ロールとS3のポリシーを最初に固めておけば、あとはAWS CLIを打つだけで今回の目的だったセグメントの定義やキャンペーンの設定を含む、きちんとしたデータのバックアップが可能になります。

次回Vol.2では、バックアップしたデータをAmazon Connectに入れてみて、案件で必要だった要件の1万件を安定して大量配信できるのかをテーマに投稿予定です。

参考リンク(公式ドキュメント)

Pinpoint IAM Permissions Reference
S3 IAM Actions
AWS CLI for Pinpoint - Command Reference
get-endpoint — AWS CLI 2.28.1 Command Reference
get-segments — AWS CLI 2.27.63 Command Reference
get-campaigns — AWS CLI 1.37.24 Command Reference
list-journeys — AWS CLI 1.36.23 Command Reference
get-campaign-activities — AWS CLI 2.27.45 Command Reference
get-campaign-date-range-kpi — AWS CLI 2.27.26 Command Reference

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています