カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

Amazon AppFlowの設定項目整理メモ

AWSにはSaaSサービスからのデータ連携を簡単に行うためのAmazon AppFlowというサービスがあります。
設定項目としてはそこまで多くはないので、整理も兼ねて実際のコンソールからの設定項目を確認します。
aws.amazon.com

尚、設定には送信元と送信先の設定が必要なので、今回は送信元にSalesforce送信先にS3を指定します。

AppFlowとは

ドキュメントには以下のように記載されています。

Salesforceなどのサービスとしてのソフトウェア(SaaS)アプリケーションと、Amazon Simple Storage Service(Amazon S3)やAmazonRedshiftなどのAWSサービスとの間でデータを安全に交換できるようにするフルマネージド統合サービスです。



簡単に言うと、SaaSサービスのデータをAWSサービスに簡単に取り込むことができるマネージドサービスです。


またSaaSサービスだけではなくて、S3からS3みたいなこともできたりします。
フルマネージドで提供されるので、ユーザはインフラの管理などを考えずにデータ連携とデータ管理に集中することができます。

設定項目確認

管理項目

マネコンからAppFlowのコンソールに移動してみると、まず4つの管理項目が確認できます。
f:id:live-your-life-dd18:20211202225256p:plain


・コネクタ
コネクタはAppFlowと連携するSaaSサービスが一覧で表示されます。
f:id:live-your-life-dd18:20211202233301p:plain


2021/12/3時点で送信元に設定可能なコネクタは次の16サービスです。

f:id:live-your-life-dd18:20211203100312p:plain


2021/12/3時点で送信先に設定可能なコネクタは次の9サービスです。

f:id:live-your-life-dd18:20211203100532p:plain


・フロー
フローにはデータを取得・変換・出力する一連の流れをノンコーディングで実装することができます。
データの送信元・送信先やその種類によって複数のフロー作成が必要になることもあります。
f:id:live-your-life-dd18:20211202233005p:plain


・接続
接続にはAppFlowと接続を行うサービスの接続情報や認証情報を登録できます。
f:id:live-your-life-dd18:20211202233402p:plain


サンプルとしてRedshiftの接続作成時の画面を載せますが、このように接続に必要なJDBC URLやAppFlowが利用するS3の情報、ユーザ名やパスワード等が登録可能です。
これらの情報はAWSが管理します。
作成後は詳細な接続情報を確認することはできず、最低限の接続名・接続モード・URL・更新日等が一覧に表示されます。
f:id:live-your-life-dd18:20211202233510p:plain


・ユーザ
ユーザにはAppFlowがIAMを利用してユーザー・ロールを管理するメッセージが表示されています。
これはまだよくわかっておりません。
f:id:live-your-life-dd18:20211202233911p:plain

フロー作成

一通り確認したところで実際にフローを作成しながら設定内容を見ていきます。
まずはフローの管理項目からフローの作成を押下します。
f:id:live-your-life-dd18:20211202234507p:plain


フローのセットアップの流れとしては次の4つで行うようです。

  • 送信元と送信先を接続する
  • 送信元フィールドを送信先マッピングする
  • フィルターと妥当性確認を追加
  • フローをアクティブ化または実行する

f:id:live-your-life-dd18:20211202234548p:plain


最初の設定画面では

  • フローの名前と説明(説明はオプション)
  • データ暗号化設定
  • タグ(オプション)

の3つを設定します。
f:id:live-your-life-dd18:20211202234733p:plain


データ暗号化でカスタマイズにチェックをつけると、AWS KMSに作成しているキーが選択できます。
デフォルトではAWS管理のキーが利用されますが、セキュリティ要件でAWS KMSに登録されたキーを利用したい場合は設定が必要です。(別途KMSの料金が発生します
尚、デフォルトのキーまたはKMSキーのどちらを利用した場合でも、AppFlowでは

  • アクセストーク
  • シークレットキー
  • 転送中データ
  • 保管中データ(S3のみ)

が暗号化されるようになっています。
f:id:live-your-life-dd18:20211202234850p:plain

送信元と送信先を接続する

それではフローを作成していきます。
この設定では送信元と送信先の設定を行います。
今回のケースでは前回の記事で作成したSalesforceの開発環境に接続します。


・送信元設定
送信元名にSalesforceを選択し、接続するを押下します。
f:id:live-your-life-dd18:20211202235325p:plain


Salesforceに接続する画面が出てくるので、環境と接続名を設定して続行を押下します。
f:id:live-your-life-dd18:20211202235543p:plain


Salesforceの接続ウィンドウが表示されるので、事前に登録したユーザ名とパスワードを入力します。
f:id:live-your-life-dd18:20211202235722p:plain


許可します。
f:id:live-your-life-dd18:20211202235819p:plain


無事に送信元との接続が完了しました。
f:id:live-your-life-dd18:20211202235850p:plain


Salesforceの場合はオブジェクトとイベントの情報を取得できるようになっています。
リストから取得するオブジェクト、またはイベントを選択できます。

f:id:live-your-life-dd18:20211202235952p:plain

f:id:live-your-life-dd18:20211203000007p:plain


送信先設定
送信先名にS3を選択し、出力するS3バケットの名前とプレフィックスを設定します。
S3に出力する際のパスは、S3バケット/指定したプレフィックス/フロー名/時間、という階層上になるように設定されます。(時間は後述のフォルダ構造設定を指定時のみです)
f:id:live-your-life-dd18:20211203000514p:plain


追加設定として、以下の4つが設定可能です。要件によって合うものを設定します。

  • データ形式の設定:JSON/CSV/Parquet
  • データ転送設定:すべてのレコードを集約/集約なし
  • ファイル名の設定:ファイル名にタイムスタンプを追加する/タイムスタンプなし
  • フォルダ構造の設定:タイムスタンプが付いたフォルダにファイルを配置する/フォルダにタイムスタンプを付けない

f:id:live-your-life-dd18:20211203000807p:plain


S3に出力したファイルをAthena等でクエリしたいということであればParquet形式が良いですし、ファイル名の重複を避けるのであればファイル名にタイムスタンプを追加します。
出力するファイル名を指定する項目はないため、固定のファイル名にするのは無理そうです。


・フロートリガー設定
送信元と送信先の設定ができたらフローをトリガーする設定を行います。
f:id:live-your-life-dd18:20211203001615p:plain


トリガー方法はオンデマンド・スケジュール・イベントの3つを選択することができます。


オンデマンドはその名の通り手動実行です。


スケジュールは頻度・開始終了日時・転送モードを設定することができ、転送モードでは完全転送と増分転送が選択できます。
増分転送にはタイムスタンプフィールドを使用するので、取得元のデータにタイムスタンプフィールドが含まれている必要があります。
また、フローの実行とデータの取り込み時間が同時に行われると正常にデータが取得できない可能性があるため、その時間を調整するための時間オフセットを指定できます。
この項目を指定することで、フローの実行時間に近いレコードを取り込み対象外とします。
f:id:live-your-life-dd18:20211203001430p:plain


イベントは恐らくS3アップロードイベントなどをキャッチしてフローを実行できるような仕組みではないかと思いますが、今回のケースでは非活性になってますので割愛します。

送信元フィールドを送信先マッピングする

フローの設定ができたら、次に取得元データフィールドと送信先フィールドのマッピング設定を行います。
マッピングは手動かCSVによる一括マッピングを選択できます。
フィールドが多い場合はCSVの利用をお勧めします。
f:id:live-your-life-dd18:20211203002416p:plain


手動マッピングでは、先ほど接続した取得元から既にフィールド情報が取得されているため、それをベースにマッピングを設定します。
ここではすべてのフィールドをマッピングすることもできますし、特定のフィールドのみをマッピングすることもできます。
f:id:live-your-life-dd18:20211203002522p:plain


送信元先の組み合わせ次第では式を使用してフィールドのマッピングも行えそうです。
f:id:live-your-life-dd18:20211203002704p:plain


マッピング設定後です。
f:id:live-your-life-dd18:20211203002753p:plain


またマッピング設定ではフィールドオプションを使用することができ、

  • 新規追加フィールドの自動インポート(ただし、すべてのフィールドマッピング時のみ)
  • 削除されたレコードのインポート

の2つを設定できます。
f:id:live-your-life-dd18:20211203002835p:plain

フィルターと妥当性確認を追加

AppFlowでは妥当性確認オプションを使用でき、例えば不正データが取り込み時にフローを強制終了する、またはレコードを取り込まない、などといった判断をAppFlow側でさせることが可能です。
f:id:live-your-life-dd18:20211203003014p:plain


他にもフィルターに一致したもの、特定の文字列を含んだもの、特定日付よりも最新のもの、等複数の条件で取り込み対象のレコードを絞ることもできるようになっています。
f:id:live-your-life-dd18:20211203003251p:plain

フローをアクティブ化または実行する

最後に確認画面で全部の設定内容を確認して問題なければフローを作成します。
作成できたらこのようにフローの詳細設定が表示されます。
f:id:live-your-life-dd18:20211203003527p:plain


もしフローを修正したい場合は変更可能な項目は限定されており、

  • フローの説明欄
  • リソースタグ
  • 送信先の出力形式等の設定
  • フローのトリガー設定
  • フィールドマッピング設定
  • フィールドオプション設定
  • 妥当性確認設定
  • フィルター設定

の8項目のみになります。
注意点として、送信元の対象データの指定は初回のフロー作成時にしか指定できないので、異なるデータを連携させたいとなった場合は、フロー自体を新規で作成する必要があります。


オンデマンド実行を設定しているのでコンソールからフローを実行してみます。
正常に完了するとコンソール上部にメッセージと処理されたレコード数、転送サイズ、所要時間が表示されます。
f:id:live-your-life-dd18:20211203004056p:plain


S3に出力されたファイルを確認してみます。
出力先のパスはフロー設定時に確認した、S3バケット/指定したプレフィックス/フロー名/時間/ランダム文字列のフォルダになっています。
ファイル名はランダム文字列とタイムスタンプを足したような名前になっていることが見えてわかります。
わかりづらいですが、これでもparquet形式として出力されています。
f:id:live-your-life-dd18:20211203004235p:plain


念のためS3 SelectでParquet指定でクエリするとちゃんとファイルの中身がクエリできることを確認できます。
また先ほどは気づいていませんでしたが、S3に出力されるファイルには圧縮形式を指定することができないため、例えばparquet.snappyのような圧縮されたファイルを出力するのは難しいようです。
f:id:live-your-life-dd18:20211203004605p:plain

作成後確認

一連の流れと設定項目は確認したので、最後に管理項目側上でどの項目にリソースが追加されたのか見ていきます。


・コネクタ
特に追加されてません。(当たり前ですが)
f:id:live-your-life-dd18:20211203100925p:plain


・フロー
作成したフローが一覧に表示されています。
f:id:live-your-life-dd18:20211203100901p:plain


・接続
フロー作成時に一緒に作成した接続情報が表示されています。
接続情報は複数作られるのを想定しているのか、上部のコネクタを指定しないと何も表示されないようになっています。
f:id:live-your-life-dd18:20211203101214p:plain
f:id:live-your-life-dd18:20211203101101p:plain


・ユーザー
特に追加されてません。
というかこの項目は必要なんでしょうか。。
f:id:live-your-life-dd18:20211203101235p:plain

感想及び所感

というわけでAmazon AppFlowの設定をフロー作成の流れに沿って確認していきました。
マネージドサービスなので機能に制約はありますが、そこまで複雑なことをさせないということであれば使いやすいサービスなのではと思います。


ただ、2021/11/18にあったアップデートでGlue DataBrewがAppFlowとのコンソール統合が発表されたので、Glue DataBrewと併用することでデータ変換などの処理はAppFlow標準より詳細にできるため、要件次第ではこちらも使ってみるのも良いかもしれません。
aws.amazon.com