『GCPからAWSへのデータ移動』について考えて&まとめてみる
最近では『マルチクラウド』環境で仕事を回すというのも珍しい話では無くなって来ました。クラウドプラットフォーム間を連携するというのも普通に挙がってくるテーマかと思います。
そんな『マルチクラウド』の環境間で『データの移動』という部分について考えてみた場合、ざっと見てみた感じだと『AWS』から『GCP』については比較的情報量が多いなという印象を受けました。GCPが公式で『AWS向け』のドキュメントを展開しているというのも大いに関係しているかと思います。
ですが一方で、『GCP』から『AWS』という逆のパターンだとどうでしょう。AWSが個別に『GCP向け』の情報を展開しているというのは現状無さそうです。また、その他情報源についてはどうでしょうか?感覚値的には『AWS→GCP』程は情報量的に多くないのでは、という感じがします。
そこで当エントリでは、『GCP(Google Cloud Platform)』から『AWS(Amazon Web Services)』へのデータ移動方法、ケースにはどのようなものが存在しているのか、またどういった『方法』を取ることが出来そうなのか、ざっと情報収集した上での内容をまとめて&整理してみたいと思います。
目次
- GCP→AWS間の『データ移動の最短パス』を考える
- A.Google Cloud Storage→Amazon S3を経由する方法
- B.Google Cloud Storage→Amazon S3を経由しない方法
- まとめ
GCP→AWS間の『データ移動の最短パス』を考える
言うてもGCPもAWSも、それぞれのジャンルで非常に多岐なサービスが用意されています。それらの組み合わせ、経路を全て洗い出し網羅するというのはまず現実的ではありません。というかそれは心が折れるw
なので、まずは『シンプルに、手っ取り早く、少ない手数・経路で』実現出来る経路は何か?というところで見ていくことにしました。...と考えると、一番考えとして分かり易く且つシンプルに済みそうなのは『何らかの方法でデータをGoogle Cloud Storageにエクスポート、そのデータをS3に移し、S3のデータを何らかの方法でインポート』になるかと思います。下記はBigQueryのデータをRedshiftに移動させるまでの流れです。後述する説明でこのラインをなぞる事でデータ移動が実現出来る、という目論見です。
参考までに、下記に『GCPのデータベース・データウェアハウス系のデータエクスポート方法』のドキュメントを一覧としてまとめておきます。全てのサービスで、(AWSでのデータ)インポートに適した形式でアウトプット出来るまでとは言いませんが、1つの指針となるかなとは思います。当エントリでは『BigQueryはひとまず行けそうだ』という事で先に進みます。
BigQuery(MLが組み込まれたデータ ウェアハウスと分析)
Cloud SQL - MySQL(マネージド MySQL)
Cloud SQL - Postgres(マネージド PostgreSQL)
Cloud Bigtable(NoSQL ワイドカラム データベース サービス)
Cloud Spanner(水平スケーラビリティを有するリレーショナル データベース)
Cloud Datastore(水平スケーラビリティを有するドキュメント データベース)
Cloud Firestore(強整合性のサーバーレス ドキュメント データベース)
Cloud Memorystore(マネージド Redis)
A.Google Cloud Storage→Amazon S3を経由する方法
まずは、上記セクションで言及したように『Google Cloud Storage→Amazon S3』を何らかの方法で経由させる形の方法について。目ぼしいものについて雑多に挙げてみます。
A-1.Google Cloud SDK(gsutil)
このエントリを書くにあたり、まずは一番シンプルに要求を実現出来るのでは...と思ったのがこちらの方法。GCPで提供されているコマンドラインツールとAWSで提供されているコマンドラインツールを使い、ストレージサービス間をデータ移動させる、というものです。
ここではBigQueryのデータをRedshiftに取り込むことを想定しますが、任意のサーバ環境(Amazon EC2またはGoogle Compute Engineで構築)した環境下に、gsutil及びAWS CLIをインストール。GCS(Google Cloud Storage)にデータをエクスポートした上でgsutilを使ってそのデータをダウンロード→AWS CLIを使ってS3にデータをアップロード...という流れをイメージしました。
流れの1つとしては上記の手順でも処理を実現出来るのですが、色々調べていくと、どうやらgsutil単体でもGCS(Google Cloud Storage)からAmazon S3へのデータ移動が出来るようです。gsutilの設定項目にAWSのアクセスキー設定も存在しています。
AWS CLIのS3コマンドでaws s3 cp s3://(複製元のバケット及びファイルパス) s3://(複製先のバケット及びファイルパス)と実行することでファイルの複製が出来るように、gsutil cp gs://(複製元のGCSバケット及びファイルパス) s3://(複製先のS3バケット及びファイルパス)という記法で複製が実現出来るようです。
- amazon s3 - How to Transfer data from Google cloud storage to S3 without any manual activity? - Stack Overflow
- Copying directly from S3 to Google Cloud Storage - Stack Overflow
- Exporting data from Google Cloud Storage to Amazon S3 - Stack Overflow
- Cloud Storage の相互運用性 | Cloud Storage | Google Cloud
A-2.rclone
オープンソースツールで調べてみると、『rclone』というツールが見つかりました。このツールはファイルとディレクトリを同期するコマンドラインプログラムで、GCSやS3以外にも実に様々な接続先に対応しています。
多種多様な接続先の連携がこれ1つで済む、というのはとても便利ですね。GCSやS3以外にも連携先がある、という場合には候補の上位に挙げても良さそうな気がします。
A-3.embulkプラグイン
さまざまなストレージ、データベース、NoSQL、クラウドサービス間のデータ転送を支援する並列バルクデータローダー、『Embulk』でデータ移動を行うという方法も考えられます。
inputのプラグインでGCS、outputのプラグインでS3を設定、連携させれば実現可能です。
- embulk/embulk-input-gcs: Embulk plugin that loads records from Google Cloud Storage
- llibra/embulk-output-s3: Embulk S3 output plugin
A-4.GCPのStorage Transfer Service(ストレージ転送サービス)
GCPには『Transfer Service』という"ストレージ転送ジョブ"サービスが用意されており、このサービスを使うことでGCS→S3へのデータ転送を行うことが出来ます。
ドキュメントはこちら。
これを見る限りですと、『gsutilじゃなくてこっちでも良いのでは』となりそうですが、GCPでは『gsutil と Storage Transfer Service のどちらを使用するか』という見出しでこのトピックについて言及しています。局面に応じてgsutilとストレージ転送ジョブサービスを使い分けて行きたいですね。
参考:
- [ICT] GCP StorageからAWS S3へ定期転送など │ FXFROG
- Cloud Storage Transfer Service (S3 to GCS) をweb Consoleで挙動確認してみる - Qiita
A-5.CSA Data Uploader
弊社で展開している自社サービス『カスタマーストーリーアナリティクス(Customer Story Analytics,通称CSA)』はデータ分析基盤の構築・運用をサポートするものとなっていますが、その中のいち製品である『CSA Data Uploader』は、お客様の基幹システムにあるデータを加工し、AWSのデータ分析環境へアップロードする一連の作業を簡単・スムーズに実行できるようサポートします。
最近のアップデートで、このツールが入力データとして『Google Cloud Storage』をサポートするようになりました。下記はオンプレを想定したデータの流れを図示したものとなりますが、この接続先が『Google Cloud Storage』にも繋げられるようになり、手軽に接続及びS3までのデータアップロードを行えるようになります。
B.Google Cloud Storage→Amazon S3を経由しない方法
次に、上記『A.』の括りに入らないもの、すなわち『Google Cloud Storage(GCS)やAmazon S3を必ずしも介さないもの』について見ていきたいと思います。こちらは内容によってはGCSもS3も使わなかったり、またGCS経由で無かったりするだけというのもあるようです。
B-1.Amazon Athenaのフェデレーテッドクエリ
『AWS re:Invent 2019』開催前の2019年11月に発表されたこちらの新機能、今回のテーマにドンピシャでハマる内容となっています。(※今回のエントリを書くにあたっての切っ掛けにもなりました)
Athenaのこの機能を使い、任意のデータソースに対して直接クエリしに行く設定をしてしまえばダイレクトにデータを引っ張ってくることが出来る...という代物。データをこちらに持って来てしまえばあとはもうこっちのものです。
現時点ではまだプレビュー状態となっているこの機能。有効活用する事でデータ移動も大いに捗りそうです。
ちなみに同時期に発表されたRedshiftの『フェデレーテッドクエリ』にはそういう機能は無さそうです。
B-2.AWS Glue の Glue Spark ETL ジョブ&独自JDBCドライバ
『B-1』同様、2019年11月にアナウンスされたAWS Glueの新機能。独自のJDBCドライバの部分でBigQueryやその他GCPのデータベースに接続する設定を連携してしまえば、AWS Glueから一気にデータを持ってくる事が可能になります。
B-3.Alteryx
データを何らか加工する必要がある場合、また分析などを踏まえた結果を(再)投入させたいというケースであれば、途中にAlteryxを挟むというのも一考でしょう。
BigQuery対応ツールも予め用意されています。このツールで接続先のBigQueryに繋ぎ、データを引っ張ってくればあとは如何様にも調理可能です。
また、Alteryxについては弊社ブログでも非常に多くの記事を投稿・公開しています。是非合わせてご参考頂けますと幸いです。
B-4.Fivetran
最近弊社でもワードを目にすることが多くなってきたサービスの中で気になっているのがこちらのFiveran。
『接続先』としても、データウェアハウスやデータベースに各種対応しているようなので問題も無さそう。
Developers.IOでも、数は多く無いですが何件か言及しているブログもあります。
まとめ
という訳で、『GCP(Google Cloud Platform)』から『AWS(Amazon Web Services)』へのデータ移動について、個人的に整理してまとめてみた内容のご紹介でした。
恐らくは、手段や方法について『他にもこういうのがあるよ!』と思われた方もいらっしゃるかと思います。その際は是非、何らかの形でアウトプットして頂き、コメントやSNS等で教えて頂けますと幸いです。