Amazon AppFlowを使ってSalesforceからAmazon S3にCSV出力してみた

記事タイトルとURLをコピーする

こんにちは、CE課の江利です。

前回に引き続き今回もSalesforceからS3バケットにCSVファイルを出力する方法を紹介します。

blog.serverworks.co.jp

今回利用するのはAmazon AppFlowです。

aws.amazon.com

trailhead.salesforce.com

フローを作成

手順1 フローの詳細を指定

まず最初にフロー名とフローの説明を入力します。

手順2 フローを設定

送信元名からSalesforceを選択し新規接続を作成ボタンをクリックします。(既に接続を作成済みの場合はSalesforce 接続を選択から選択してください。)

するとSalesforceに接続のモーダルウィンドウが立ち上がるので接続名を入力します。本番組織の場合はprod、sandbox組織の場合はsandbox名を入れるとわかりやすいと思います。

Salesforce 環境はそれぞれ対応する組織を選択します。選択内容によって接続するボタンをクリックした際に開くSalesforceの外部接続認証画面のURLがlogin or testのいずれかになります。

接続するボタンをクリックすると認証用のログイン画面がポップアップしますのでユーザー名*1とパスワードを入力しログインボタンをクリックします。当然このログインユーザーがSalesforce側での実行ユーザーとなりますので必要な権限が付与されているユーザーでログインしてください。

アクセスを許可しますか?と聞かれるので許可をクリックします。

これでAWSからSalesforceへの接続が完了です。念のためSalesforceのユーザー詳細画面より OAuth アプリケーション を見てみると正しく接続できていることが確認できます。

今回はSalesforceオブジェクトを選択し、対象オブジェクトを選択します。

次に送信先名からAmazon S3を選択し出力先のS3バケットを選択します。データ形式の設定はCSV形式を選択します。すぐに実行したいのでフロートリガーはオンデマンドで実行を選択します。

手順3 データフィールドをマッピング

今回はマッピング方法は手動でフィールドをマッピングを選択しました。送信元から送信先フィールドへのマッピングはすべてのフィールドを直接マッピングするを選択してください。これを選択することによりその他の設定で新しく追加されたフィールドを自動的にインポートするを選択可能となります。今回AppFlowでいいなと思ったのはこの設定です。バックアップ目的の場合はこの設定をオンにすることでメンテナンスフリーとなるのです。実に素敵ですね。

パーティションと集約の設定はこのように設定してみました。意外と罠なのが日時をチェックすると自動で実行IDがチェックされて変更不可となる点です。実行IDを含めたくない場合はSalesforce側でパーティションキー相当の項目を用意して送信先フィールドをチェックしてください。最大10フィールドまで設定可能です。

手順4 フィルターを追加する

今回は特にフィルター設定しませんでしたが最大10個まで設定可能です。残念なことにSalesforceのレポートみたく日付型項目の相対値でのフィルターは設定することが出来ないので絶対値での指定のみとなります。こちらは今後のアップデートに期待です。なお、ロングテキスト型の項目はフィルター対象に選択することは出来ませんでした。

手順5 確認して作成

最後に設定内容を確認して保存すれば作成完了となります。お疲れ様でした。

それでは実際に作成フローを実行してみた結果を見てみたいと思います。

まとめ

出力結果を確認してみてわかったことは以下の通りです。

  1. ファイル名に.csvの拡張子は付与されない
  2. ヘッダ行は付与される
  3. カンマ区切りで引用符はヘッダ行含めてすべて"(ダブルクォーテーション)括り
  4. ロングテキストエリア項目であっても特に文字数制限なく出力可能で改行もそのまま
  5. 文字コードはUTF-8
  6. 数値型、日付型であってもnull値は"null"となってしまう

個人的に注意が必要だなと感じたのは、上記1により拡張子を自身で付与する必要がある点と6によりそのままではデータローダーではインポート出来ない点でした。実際にインポートしようとしてみたところそれぞれ日付型はError converting value to correct data type: Failed to parse date: null、数値型は数値型のテスト: 数値を入力してください: nullとエラーになりました。(数値型のテストは項目の表示ラベル名です。)

また、今回はオンデマンドでの実行としましたがスケジュール実行の場合はかなり細かくスケジューリング可能です。

これらを踏まえた上で活用方法はありそうだなというのが私の感想です。今回仕様を把握することでより実装イメージが湧き非常に実りある検証でした。要件によって前回紹介したCRM AnalyticsのAmazon S3 出力接続と上手く使い分けると良さそうですね。

この記事がどなたかの問題解決の一助となればと思います。それでは良きSalesforceライフを!

*1:Winter'24でユーザからユーザーに変更されました。Salesforce歴が長い筆者は執筆時点ではまだ違和感が半端ないです。

江利 義陽(記事一覧)

CE部CE課でSalesforceエンジニアをやっています。Salesforce歴は12年目くらいなのでチョットだけわかります。
記事への質問やフィードバックは yoshiaki.eri@serverworks.co.jp までお願いいたします。
Trailblazer プロファイル