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

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

Amazon AppFlowを動かしてみる

SaaSアプリケーションからAWSにデータを連携するとなったときに、Amazon AppFlowサービスを使えば簡単にデータを連携させることができます。(AWSドキュメントに書いてある限りは)

今回はそのAppFlowを使う機会が出てきそうだったので、お試しがてら使ってみることにします。
尚、SaaSサービスはすぐには準備できないので、S3 to S3で試すことにします。

実施作業

準備

S3 to S3なので、インアウト用のS3バケットを作成しておきます。
f:id:live-your-life-dd18:20211129113416p:plain


サンプルデータは良さげなものが見つからなかったので、とりあえず目についた以下のサイトで作ったものを利用します。
kazina.com


データの中身はこんな感じです。
これは完全ダミーのデータなので、個人情報的にも問題ないようになっています。
f:id:live-your-life-dd18:20211129113552p:plain


ファイルはインプット用のS3に格納しておきます。
f:id:live-your-life-dd18:20211129113639p:plain

フロー作成

それでは早速フローを作っていきます。
マネコンからAppFlowコンソールに移動して、フローを作成を押下します。
f:id:live-your-life-dd18:20211129113717p:plain


フローの設定画面に移動します。
f:id:live-your-life-dd18:20211129113822p:plain


以下の5つの手順で作成するようです。

  • 手順1:フローの詳細を指定
  • 手順2:フローを設定
  • 手順3:データフィールドをマッピング
  • 手順4:フィルターを追加する
  • 手順5:確認して作成


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

フローの名前を説明を適当に入力して、次へを押下します。
f:id:live-your-life-dd18:20211129114041p:plain

手順2:フローを設定

次にフローを設定していきます。
送信元の設定では、先ほどファイルをアップロードしたS3バケットを指定します。
データ形式CSVかJsonlのみが対応しているみたいです。
f:id:live-your-life-dd18:20211129114221p:plain


続いて送信先ですが、こちらも事前に作成したS3バケットを指定します。
f:id:live-your-life-dd18:20211129114337p:plain


その他の設定を展開するともう少し詳細に設定することができます。
今回は何も変更せずに次に向かいます。
f:id:live-your-life-dd18:20211129114444p:plain


送信元、送信先が設定できたらフローのトリガーを設定します。
トリガーは

  • オンデマンド実行
  • スケジュール実行
  • イベント実行

の3種類から選べます。
今回はオンデマンド実行にしておきましょう。
f:id:live-your-life-dd18:20211129114543p:plain


ここまで入力して次へを押下したら送信元の設定でエラーが出てました。
f:id:live-your-life-dd18:20211129114811p:plain


ファイルの格納先を変更したらエラーが出なくなったので、次にいきます。
f:id:live-your-life-dd18:20211129114928p:plain

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

データの設定ができたら今度はデータフィールドをマッピングします。
マッピングされたフィールドを含む.csvファイルは今回準備していないので、手動でマッピングします。
f:id:live-your-life-dd18:20211129115116p:plain


マッピング設定で送信元のフィールドと送信先のフィールドをマッピングできるのですが、ここで予想外の事象が発生しました。


なんとサンプルデータのカラム列が日本語で作成されているので、文字化けが発生していました。。
一応一括処理という選択肢があるみたいなので、とりあえず設定してみます。
f:id:live-your-life-dd18:20211129115239p:plain


(まぁそうですよねぇという気持ち)
f:id:live-your-life-dd18:20211129115456p:plain


オプションとして妥当性確認をすることも可能です。
f:id:live-your-life-dd18:20211129115633p:plain


条件には

  • 値が負の場合
  • 値がnullかない場合
  • 値が0の場合
  • 値にテキストが含まれる場合

のよくありそうなケース4種類が設定可能で、致命的な問題なら「フローを終了」、単純に異常値なら「レコードを無視」という判定をさせることができます。(今回は使いません)
f:id:live-your-life-dd18:20211129115717p:plain
f:id:live-your-life-dd18:20211129115729p:plain

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

フィルターはサポートされていない設定なのでそのまま次へを押下します。
f:id:live-your-life-dd18:20211129120015p:plain

手順5:確認して作成

最後に設定を確認してフローを作成します。
f:id:live-your-life-dd18:20211129120108p:plain

フローの実行

フローが作成できたので実行してみます。
f:id:live-your-life-dd18:20211129120209p:plain


上手くいったようです。
f:id:live-your-life-dd18:20211129120238p:plain


出力はされていたのですが、明らかにファイル名がおかしいものになっていました。
f:id:live-your-life-dd18:20211129120326p:plain


S3 Selectでは一応JSON形式で見れました。
ただ明らかに日本語に対応してなさそうな感じです。
f:id:live-your-life-dd18:20211129121351p:plain

データ修正再実行

データの問題な気がするのでカラム名だけ日本語から英語に変えてみます。
f:id:live-your-life-dd18:20211129120517p:plain


フローの編集からは変えられなかったので、新しく作り直しました。
恐らく初回の作成時のみ送信元からデータをサンプリングしてフィールドを作っているのかもしれません。
f:id:live-your-life-dd18:20211129120758p:plain


実行して出力されたファイルを確認したところ、ファイル名は変わらず、カラム名だけ正常に表示されていました。
どうやらS3 to S3の変換では日本語データは対応されていないようです。
f:id:live-your-life-dd18:20211129121519p:plain
f:id:live-your-life-dd18:20211129121506p:plain

感想及び所感

AppFlowの構築の流れはわかりましたが、日本語データが文字化けする問題は他のデータソースからの送信でも発生するのかが気になりました。

時間があればその辺りも試してい見たいと思います。