AppFlowを利用したGoogle スプレッドシート/S3 のデータ転送自動化
はじめに
- 今回は、AWS AppFlow を利用して、Google スプレッドシートと S3 のデータ転送を自動化する手順を記載します。
- AWS AppFlow とは、SaaS(Software as a Service)アプリケーションと、Amazon Simple Storage Service (S3) や Amazon Redshift などの AWS のサービス間で、わずか数クリックで、データを安全に転送できるフルマネージド統合サービスです。
AppFlow の魅力を3つにまとめる
- 1つ目の魅力は、3サードパーティの SaaS とデータ統合が出来る点であり、ノーコードで(開発を必要とせず)、数クリックでデータ転送の自動化を行えます。
- 2つ目の魅力は、スケーラビリティに優れている点であり、1 フローあたり最大 100 GB のデータを実行できるため、何百万ものレコードを簡単に転送することができます。
- 3つ目の魅力は、高いセキュリティが標準で提供されている点です。AppFlow を流れるすべてのデータは保存時と転送時に暗号化されます。また、PrivateLinkを利用するSaaS であれば、AppFlow はプライベートエンドポイントを自動的に作成して設定するため、AppFlowはデフォルトでプライベートの通信が可能です。
Google の認証情報を作成する
- Google API Console の認証情報ページを開きます。(事前に、プロジェクトは作成されている想定としています)
- 先ず、OAuth クライアント ID を作成します。
- 認証情報を作成 → OAuth クライアント ID を選択します。
- アプリケーションの種類、名前を指定し、「作成」を押します。
- 「承認済みの JavaScript 生成元」の「URI を追加」を押して、以下のアドレスを追加します。
- https://console.aws.amazon.com
- 「承認済みのリダイレクト URI」の「URI を追加」を押して、以下のアドレスを追加します。
- https://ap-northeast-1.console.aws.amazon.com/appflow/oauth
- 東京以外のリージョンを使用する場合は、ap-northeast-1 を変更します。
- 「作成」を押します。
- 以下の画面が表示されます。「クライアント ID」、「クライアント シークレット」の値を控えます。
- 次に、「有効なAPIとサービス」→「API とサービスの有効化」を選択します。
- API ライブラリから、「Google Sheets API」を選択します。
- 以下の画面が表示されます。「有効にする」を押します。
- 続けて、「Google Drive API」についても同様に有効にします。「有効にする」を押します。
- 次に、「認証情報」→「サービス アカウントを管理」を選択します。
- 「サービスアカウントを作成」を選択します。
- 「サービスアカウント名」を入力、「ロール」を指定、「続行」を押します。
- サービスアカウントが作成されました。
- これでGoogle の認証情報は、一通り作成出来たと思います。
AppFlow の接続とフローをセットアップする
- コンソールからAmazon AppFlow のサービスを開きます。
- 以下の画面が表示されるため、「フローを作成」を選択します。
- 以下、フローを作成の画面が表示されます。
- フロー名を入力します。
- 「次へ」を選択します。以下の画面が表示されます。
- 「送信元名」に「Google Sheets」を選択します。「Google Sheets 接続を選択」の「新規接続を作成」を選択します。
- 先ほど作成したOAuth クライアント IDとシークレットを貼り付けます。
- アカウントの選択を行い、Google にログインします。
- “このアプリは Google で確認されていません" の画面が表示されました。「詳細」を選択し、「amazon.com(安全ではないページ)に移動」を選択します。
- “amazon.com が Google アカウントへの追加アクセスを求めています" の画面が表示されました。画像は「Google スプレッドシート」の情報だけ選択されていますが、「Google ドライブ」についても選択し、「続行」を押します。
- 上記操作を実施後に以下のエラーメッセージが表示された場合は、AppFlow の接続の作成に必要なGoogle の認証情報に不足があると思います。Google 側の設定を再確認してください。
- 接続 google の作成中にエラーが発生しました。
Error authenticating to connector: Failed to validate Connection while attempting “ValidateCredentials with CustomConnector" with connector failure The request failed because the service Source Google Sheets returned the following error: Details: The request failed with status code 403 (Forbidden).. (Service: null; Status Code: 400; Error Code: Client; Request ID: null; Proxy: null)
- 接続 google の作成中にエラーが発生しました。
- 上記操作を実施後に問題がなければ、AppFlow に、新規の接続が作成されます。
- 続けて、「Google Sheets オブジェクトを選択」からスプレッドシートを選択します。
- 今回は、e-Stat の統計データ(男女別人口総数及び世帯総数)から入手したCSV データを元にサンプルを準備しています。
- 以下画面では、送信先を選択します。「送信先名」から「Amazon S3」を選択、「バケットの詳細」からデータ転送先に指定するバケットを選択します。
- 自動的に、フローに指定した名前のフォルダが追加されます。
- 必要に応じて、ファイル形式の設定を行います。
- 以下画面では、フロートリガーの方法を選択します。今回は、フローをトリガーする方法に「スケジュール通りにフローを実行」を選択しています。また、繰り返しに「1時間毎」、開始日、開始時間を各々指定し、転送モードに「完全転送」を選択しています。要件に応じて、選択ください。
- 「次へ」を押します。
- 以下画面では、データフィールドのマッピングが設定できます。少なくとも 1 つのフィールドをマッピングする必要があります。
- 今回は、送信元フィールドに「すべてのフィールドを直接マッピングする」を選択しています。
- 以下画面では、パーティションと集約の設定が可能です。
- デフォルトの S3 のフォルダ構造を構成するパーティションキーは、「実行 ID」となります。
- デフォルトの 集約の設定は、「集約しない」になります。
- 今回の場合、S3 URL は s3://niikawa-aws-test1/appflow-google-s3/<execution_Id> になります。
- 「次へ」を選択します。
- Amazon AppFlow では、フィルター条件を満たすレコードのみが転送されます。今回の設定では、フィルターはサポートされていないため、「次へ」を押します。
- 確認画面が表示されます。設定を確認後、「フローを作成」を押します。
- フローが作成されました。ステータスは下書きとなっていますので、「フローをアクティブ化」を押します。これ大事。
Google スプレッドシートと S3 のデータ転送をテストする
- フローの「実行履歴」を選択し、トリガに設定したスケジュールにデータ転送が行われたこと、実行ステータスが “成功" していることを確認します。
- 今回のテストケースでは、実行 IDは、"dd03c8c0-9998-3740-aaaa-d0f0223a2201" になっておりました。
- 送信先の S3 を確認します。フロー名に指定したフォルダ(“appflow-google-s3/“) が作成され、さらに実行 ID (“dd03c8c0-9998-3740-aaaa-d0f0223a2201“) のフォルダ配下にオブジェクトが作成されておりました。
- 転送されたオブジェクトをダウンロードします。オブジェクトの中身は、以下の通りです。
- ファイル形式の設定で指定の通り、JSON形式でデータが格納されていました。また、パーティションと集約の設定で指定の通り、レコードは集約されておりませんね。
- フルマネージドのため手軽に設定が完了しました! ただし、マネージドサービスのためあまり柔軟な設定は出来ず、あらかじめシステムの要件に合うかを検証する必要があるかと思います。
関連資料
- Google Sheets の接続に関する情報は、下記の資料を参照ください。
- テストに利用したデータは、e-Stat からダウンロード出来る統計データ(男女別人口総数及び世帯総数)となります。