はじめに
2020/4/23にAWSの新たなサービスとしてAmazon AppFlowなるものが登場しました。
このサービスを検証し、どんな使い道やメリットがあるのかを探ってみました。
更新履歴
2020/4/23 : 初版。サービスリリースに合わせて執筆
2020/9/15 : 更新。S3に出力可能なファイルのフォーマットに、JSONに加えて新たにCSVとParquetが指定可能に
Amazon AppFlowとは?
まずは、公式サイトの英文を翻訳して紐解いてみます。
https://aws.amazon.com/jp/appflow/
※引用
Amazon AppFlowは、Salesforce、Marketo、Slack、ServiceNowなどのSoftware-as-a-Service(SaaS)アプリケーションと、Amazon S3やAmazon RedshiftなどのAWSサービスとの間で、数回のクリック操作によりデータを安全に転送できる、フルマネージド統合サービスです。
AppFlowを使用すると、選択した頻度でほぼすべての規模でデータフローを実行できます。頻度はスケジュール、ビジネスイベントへの応答、またはオンデマンドとなります。
AppFlowには、マッピング、マージ、マスキング、フィルタリング、検証などの強力なデータ変換機能が含まれており、追加の手順なしで、フローの構成要素としてすぐに使用できる豊富なデータを生成できます。
AppFlowは、移動中のデータを自動的に暗号化し、ユーザーがAWS PrivateLinkと統合されているSaaSアプリケーションのパブリックインターネット経由でデータが流れるのを制限でき、セキュリティの脅威への露出を減らします。
AppFlowは、データのソースとしてAmazon S3および13 SaaSアプリケーションをサポートし、宛先としてAmazon S3、Amazon Redshift、Salesforce、およびSnowflakeをサポートします。詳細については、AppFlowのインテグレーションページにアクセスしてください。
AppFlowを使用するための前払い料金や料金はありません。お客様は、実行するフローの数と処理されるデータの量に対してのみ支払います。
AWSマネジメントコンソールを使用すると、AppFlowを数分で開始できます。データソースと宛先を選択し、フロートリガーを指定し、フィールドをマップし、データ変換または検証を追加してから、フローを実行します。
AppFlowは現在、一般的に次のリージョンで利用可能です:米国東部(バージニア北部)、米国東部(オハイオ)、米国西部(北カリフォルニア)、米国西部(オレゴン)、カナダ(中央)、アジア太平洋(シンガポール)、アジア太平洋(東洋)、アジアパシフィック(シドニー)、アジアパシフィック(ソウル)、アジアパシフィック(ムンバイ)、ヨーロッパ(パリ)、ヨーロッパ(フランクフルト)、ヨーロッパ(ロンドン)、南アメリカ(サンパウロ)。
上記を読むと、本質的には、サードパーティのSaaSとAWSのマネージドサービスの間でデータを安全に送信 (連携) できることがポイントのようです。
また、SaaS間連携にも使え、例えばSalesforce to Salesforceなどが可能となるようです。
AppFlowを設定してみる
イメージや特徴を掴むために、まずはとにかく触ってみようということで、試してみます。
AWSマネジメントコンソールにアクセスします。
https://ap-northeast-1.console.aws.amazon.com/appflow/home?region=ap-northeast-1#/
「フローの作成」を押すと、すぐにウィザードが開くので、基礎情報を入力していきます。
暗号化オプションとタグを指定します。
ここまではあまり難しくありません。
次にデータの送信元を選びます。
ここではSlackとしてみました。
Slackを選んだ後、サービスとの接続を行います。
親切に設定方法が書いてあるので、楽々です。
もしSlackでアプリを1つも作っていない場合は、ここでテスト用で構わないのでアプリを1つ作っておきます。
以下URLにアクセスして、右上の「Your Apps」を押し、設定します。
https://api.slack.com/apps
Amazon AppFlowとSlackの間は、OAuthで認証するようなので、アプリを作った後にOAuthの設定をします。
画像のURLが途中で切れていますが「**https://ap-northeast-1.console.aws.amazon.com/appflow/oauth**」を入力します。
入力後、AppFlowがアクセスできるSlackの情報について聞かれるため、確認して許可します。
認証が完了すると、送信元の情報やチャネルを入力できますので設定します。
次に、送信先を選びます。
今回はAmazon S3を選んでみます。
S3はバケット以下のパスを指定するだけなので楽々です。
2020/9/15追記 : この画面で「その他の設定」を開くと、出力されるファイルのフォーマットなどが選択できます。
2020/9/14のアップデートで、S3に出力する際のファイルのフォーマットをJSON、CSV、Parquetから選択できるようになっています。
今回は、JSONを選んで次に進みます。
次にフローの実行方法について選びます。
3パターンありますが、今回はオンデマンドを選んでみます。
プルダウンを開くと、送信元のSaaS (Slack) で持つデータのフィールド名が列挙されています。
とりあえず全部選んでみると、以下のようになります。
「フィールドを直接マッピングする」を押すと、マッピングの結果が表示されます。
ここで、フィールドごとに値をどう処理するかを設定できます。
例えば「値をマスクする」を選ぶと、そのフィールドの値はすべて * (アスタリスク) で置換されます。
この設定を活用すると、例えば個人情報を含むフィールドだけをマスキングして送信するといったことが可能となります。
また、複数のフィールドを選んで結合することもできます。
(以下は適当に試してみた図)
さらに、データの値のチェックもでき、特定のフィールドに値が入っていない時にスキップしたりできます。
最後に設定内容を確認し、フローを作成すると、以下の通り出来上がります。
送信元SaaSにデータを用意
今回、送信元をSlackにしましたので、Slackに適当に会話を書き込んでおきます。
AppFlowのフローを実行
フローを実行してみます。
実行が完了すると、緑背景で結果が表示されます。
フローの実行が完了すると、SlackからS3にデータが送信 (出力) されます。
S3に送信されたデータを開くと、先に指定していた通り、JSON形式でデータが表示されました。
以上のように、AppFlowを使って、SaaSからAWSマネージドサービスにデータを送信できました。
考えられる使い道の例
まとめ
AppFlowは、サービス間のデータ連携に使うブローカーのような役割と言えそうです。
上記の手順を振り返っても分かるように、非常に簡単にデータ連携ができるようになります。
また、注目すべきは、単なる連携だけではなく、データのマスキングや切り捨てが容易であり、これらの処理にプログラムでの作りこみが不要になる点でしょう。
この点は、公共や金融等の、個人情報等の取り扱いが大変厳しく、データの性質に応じて保管基準・方法が厳格に分けられている業界やシステムにおいて、非常に重宝しそうです。
また、SaaSが持っているデータをS3に持ってくることができれば、その後Athena、Glue、QuickSight等を使って、分析・可視化も簡単にできます。
AppFlowを使いこなすことで、SaaSとAWSをまたぐデータの取り扱いも、安全性や機密性等を確保しつつ、よりスピーディーに構築できそうです。