GCP: Cloud Transfer Service

# Cloud Data Transfer
について書きます。

Professional Data Engineerのガイドの割と最初のほうに

    1.4 データ ウェアハウジングとデータ処理を移行する。以下のような点を考察します。
    ・現状認識と将来の設計への移行方法
    ・オンプレミスからクラウドへの移行（Data Transfer Service、Transfer Appliance、Cloud Networking） 

とありますが、違いがよくわかりませんよね。
データ転送の話になるとネットワークのことも考える必要があり、そのサービスも簡単に把握しておきたいです。

https://cloud.google.com/products/cloud-migration
に一連の転送オプションがまとまっています。

- Storage Transfer Service: Free
- Storage Transfer Service: For On-Premises: $0.04/GB
- Transfer Appliance
- BigQuery Data Transfer Service
- gsutil

があるようです。
ネットワークとしては

- VPC ピアリング
- Cloud Interconnect: Dedicated Interconnectなど

## 比較

### データ転送サービス

| サービス | ユースケース |
|---|---|
|Storage Transfer Service|100TBを1Gbpsで10日<br>クラウド間で転送する場合|
|Storage Transfer Service For On Premises|数PB<br>十分な帯域幅があるとき|
|gsutil|1TB未満のデータ<br>-mオプションによるマルチスレッド化<br>parallel composite upload||
|Transfer Appliance|帯域幅が限られている場合<br>物理的な転送ができる場合<br>時間に余裕(20日)がある場合<br>|
|BigQuery Data Transfer Service|scheduled<br>managed<br>SaaS|

### ネットワーク

| サービス | ユースケース | アンチパターン |
|---|---|---|
|ダイレクトピアリング|パブリックIPが許容できる場合||
|Cloud Interconnect|物理的に接続する<br>10~200Gbps|費用を減らしたいとき|

https://cloud.google.com/blog/ja/products/networking/google-cloud-network-connectivity-options-explained

https://cloud.google.com/network-connectivity/docs/interconnect/support/faq?hl=ja

### セキュリティ
at rest と in transit で基本的に暗号化されますが、最初アクセスするときなどは注意です。

|Product|Data at rest|Data in transit|
|---|---|---|
|Transfer Appliance|All data is encrypted at rest.|Data is protected with keys managed by the customer.|
|gsutil|Access keys required to access Cloud Storage, which is encrypted at rest.|Data is sent over HTTPS and encrypted in transit.|
|Storage Transfer Service for on-premises data|Access keys required to access Cloud Storage, which is encrypted at rest. The agent process can access local files as OS permissions allow.|Data is sent over HTTPS and encrypted in transit.|
|Storage Transfer Service|Access keys required for non-Google Cloud resources (for example, Amazon S3). Access keys are required to access Cloud Storage, which is encrypted at rest.|Data is sent over HTTPS and encrypted in transit.|

# Storage Transfer Service


## 概要
https://cloud.google.com/storage-transfer/docs/overview

- 別のクラウドやオンプレからGCSに
- あるバケツから別のバケツに
- GCSからローカルに
- 一時/定期実行
- データの削除
- チェックサム確認できる、S3からとか
- VPC内のバケツにも移行可能
- HTTPs

## Filter

- `includePrefix`
- `excludePrefix`: 優先

## 通知
- transferJobs APIを使って、Pub/Subで通知させることができる、試験にも出た
- eventType, projectId, transferJobName

## on-premises 
- ~100TBクラスも対応
- 10Gbpsレベルの帯域

[帯域確保の方法] (https://cloud.google.com/storage-transfer/docs/obtaining-bandwidth-on-prem)
ここテストに出ます

- ピアリング: Googleとインターコネクトする
- Cloud Interconnect
    - Dedicated: 専用の接続, 10Gbps~200Gbpsまで可能
    - Partner: サービスパートナーを使った接続, GoogleのSLAはGoogleとサービスパートナーとの間の部分に適用, 50Gbpsまで
- ISPから帯域を得る: Google外の方法

## Logging

```json
jsonPayload: {
  @type: "type.googleapis.com/google.storagetransfer.logging.TransferActivityLog"
  action: "FIND"
  completeTime: "2021-12-16T18:58:49.344509695Z"
  destinationContainer: {
    gcsBucket: {
      bucket: "my-bucket-2"
    }
    type: "GCS"
  }
  operation: "transferOperations/transferJobs-7876027868280507149--3019866490856027148"
  sourceContainer: {
    gcsBucket: {
      bucket: "my-bucket-1"
    }
    type: "GCS"
  }
  status: {
    statusCode: "OK"
  }
}

```
## Prices
https://cloud.google.com/storage-transfer/pricing

- Strage Transfer Service 自体は無料
- Agentは有料
- GCSを使うときにかかる

# gsutil

- HTTPs
- 別クラウドの時: Storage Transfer Service
- <1TB on-pre: gsutil
- >1TB on-pre: Transfer Service for on-premises data

# BigQuery Data Transfer Service

## Introduction
https://cloud.google.com/bigquery-transfer/docs/transfer-service-overview

BigQueryに外部からデータを取り込むために使う。現時点では、BigQueryから取り出すためには使えない。

- Campaign Manager
- Cloud Storage
- Google Ad Manager
- Google Ads
- Google Play
- Search Ads 360
- YouTube Channel reports
- YouTube Content Owner reports
- Google Drive
- S3
- Teradata
- Redshift

などから移行できる。

## how to guides
https://cloud.google.com/bigquery-transfer/docs/locations

- GCSから移行するときは、リージョンを合わせる。
- Bigtable を外部テーブルとしてクエリできる、ロケーションを同じにする
- Pub/SubとEmailで通知を設定できる。
- GCSとデータセットコピー以外ではバックフィルできる。代わりにこの2つではリフレッシュできる。

## S3
https://cloud.google.com/bigquery/docs/s3-transfer-intro

- データタイプ
  - CSV
  - JSON
  - Avro
  - Parquet
  - ORC
- 圧縮形式
  - Avro、Parquetはデータブロックの圧縮はサポートしても、ファイルの圧縮はサポートしない
  - GZip (CSVとJSONはこれのみ)
  - Snappy
  - LZO
  - Zlib
  - LZ4
- URIにワイルドカードが使える
- テーブルパーティション (ingestion time) とカラムパーティション (timestamp or date) が使える
- スケジュール実行できる

## GCS
- S3と同じ
- スケジュール実行の最小間隔は15分

## Redshift
- Redshift -> S3 -> BigQueryの順にデータを移動する
- 費用の点からS3のライフサイクルポリシーの利用を推奨
- migration queueを使って、リソースを分離することも検討
- ロードのクオータがジョブあたりテーブルあたり15TBまでなので、Redshiftのデータサイズに注意
- VPC内のRedshiftとVPC内のBigQueryでも移行できる

## Teradata

- BigQueryにデータセットを用意する
- GCSにバケットを用意する
- Automatic schema detection / custom schema file

# Transfer Appliance
https://cloud.google.com/transfer-appliance/docs/4.0/overview
https://cloud.google.com/blog/ja/products/storage-data-transfer/transfer-appliances-for-simple-secure-performant-data-movement

ネットワークが弱いなどの理由でオンライン転送ができないとき、物理的なパッケージを使ってデータ転送します。
[AWS Snowball](https://aws.amazon.com/jp/snowball/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc) みたいなものです。

    with Transfer Appliance, you can receive the appliance and capture 300 terabytes of data in under 25 days. Your data can be accessed in Cloud Storage within another 25 days

とのことなので、ほかの方法で50日以上かかる場合はTransfer Applianceのほうがいいかもしれません。

40TB or 300TBの筐体がある模様

## 概要
https://cloud.google.com/transfer-appliance/docs/4.0/overview

## 地域
USA, EU, UK, Singaporeで利用可能

## スピード
TAなら1筐体300TBのデータだと25日x往復で転送できるらしい。
STSだと1Gbpsあれば100TB=>10日なので、30日で転送できる。
このため帯域による。

## Price

- 7TB: $300
- 40TB: $300
- 300TB: $1,800
- 運送費用が別途かかる
- 移送が遅延すると追加料金、10, 30, 90$ / day


# 終わり

目についたのはこのくらいです。
実際には、ドキュメントにアプライアンスを使う際のネットワークやコンフィグなど説明がありますが、どこまで出るでしょうか。

現場からは以上です