[GCP]データ基盤を構成できるサービスについて調べた個人的メモ

## はじめに

この記事はGCPでデータ基盤を構築する際に用いられるであろうサービスを調べたメモを、ローカルに眠らせるより公開しておけば後々良いかと思い作成しました。
(**サービス**と表現するかプロダクトと表現するか悩んだけど、私が普段用いている前者の表現をここでは採用)

なお、公式ドキュメントや技術ブログの情報をまとめているだけで、まだ実際に各サービスを触っていないことをご留意ください。
実際に操作してみた記事はまた書き起こそうかなと思っています。
GCPやるぞ......!!

## AWSのサービスとの比較表
AWSでのデータ基盤構築をやっていたので、ふんわりイメージを得るために表も作成

| 用途   | AWS  | GCP          | その他 |
| :----- | :--- | :----------- | :-- |
| Storage | S3   | Cloud Storage | - |
| DWH | Redshift   | BigQuery | SnowFlake |
| ETL | Glue | Data Fusion, Dataflow,Batch | Trocco,Asteria |
| Transfer | AWS Transfer Family | Storage/BigQuery Data Transfer Service | - |
| ワークフローツール | Step Functions | Cloud Composer | dagster,digdag |
| BIツール | QuickSight | Looker | Tableau,Grafana |
| Computing | Lambda | Cloud Functions | - |
| フルマネージドコンテナアプリケーションサービス |App Runner(Fargate) | Cloud Run | - |
| queuing| SQS | Cloud Pub/Sub | - |
| scheduler| EventBrigde | Cloud Scheduler | - |
| Log | CloudWatch Logs | Cloud Logging | - |
| リソースモニタリング | CloudWatch | Cloud Mornitoring | - |

## 各プロダクト調査

### ■Cloud Storage

説明：ストレージサービス。
ブラウザ上では、複数オブジェクト削除操作ができず、CLI(用語要確認)を用いる必要がある記憶......(要確認)

ストレージクラスは下記に分かれている。
|クラス|説明|料金(1 GiB あたりの月額)|
|:--|:--|--:|
|Standard Storage|アクセス頻度の高いデータ（「ホット」データ）や短期間だけ保存されるデータに最適です。|$0.02～|
|Nearline Storage|アクセス頻度の低いデータを保存するサービスに最適です。|$0.01～|
|Coldline Storage|アクセス頻度の低いデータの保存に最適です。|$0.004～|
|Archive Storage|データのアーカイブ、オンライン バックアップ、障害復旧に最適です。|$0.0012～|

参考記事
[公式ドキュメント](https://cloud.google.com/storage?hl=ja)

### ■BigQuery

説明：DWH。リアルタイム分析や大規模データの処理が必要な場合に向いているらしい  
⇒これはおそらく公式による「ペタバイト規模に対応しており、膨大な量のデータに対してほぼリアルタイムで分析を行うことができます。」に相当するのでは

スロットとは？  
⇒BigQuery スロットは、BigQuery で SQL クエリを実行するために使用される仮想 CPU  
　クエリの実行中、BigQuery はクエリのサイズと複雑さに応じて、クエリに必要なスロット数を自動的に計算します。

- 10 GiB のストレージと 1 か月あたり最大 1 TiB のクエリが無料
- 従量課金制（定額を選択することも可能）で、ストレージとクエリの実行量に応じて課金

料金は下記のコンピューティングとストレージ、データ取込、データ抽出に発生する。

|エディション|説明|料金(スロットあたりの月額)|
|:--|:--|--:|
|オンデマンド|通常、最大 2,000 個の同時実行スロットが提供されます。これらのスロットは 1 つのプロジェクトのすべてのクエリで共有されます。|$6.25(スキャンした TiB あたり)|
|Standard エディション|標準 SQL 分析に適した低費用のオプション|$0.04|
|Enterprise エディション|高度なエンタープライズ分析をサポート|$0.06|
|Enterprise Plus エディション|ミッション クリティカルなエンタープライズ分析をサポート|$0.10|

参考記事
[スロットについて(公式ドキュメント)](https://cloud.google.com/bigquery/docs/slots?hl=ja)
[クラウドデータ基盤サービスの比較（BigQuery vs Snowflake vs Redshift）](https://zenn.dev/koh_satoh/articles/e9f7a36e03f84d#bigquery)

### ■Data Fusion

説明：ETL。OSSのCDAPをベースに構築されたフルマネージドサービス
類似プロダクトにDataflow,Dataprepがあるが、このサービスの強みはGUI操作できること
2022/11/14で Data Fusion のストリーミング データに対する自動スケーリング機能はないため、スケーラビリティという観点であれば Dataflow が優れているとのこと
これこそGlueみたいにデプロイ時間が遅く、使い勝手があんまりよくなさそうな個人的想像

ETL関連のプロダクトの使い分け

- Cloud Composer:データパイプライン全体の管理、BQ内でテーブルの加工を定期的にしたい
- Dataflow,Dataprep:ストリーム処理や複雑・重いETL処理をする
- Data Fusion:サクッとETL処理を試しに組みたい

[GCPのデータ処理・ETL系サービスの使い分け](https://qiita.com/tomoyanamekawa/items/e45317bada702159add0)より。

|エディション| 1 インスタンスごとの 1 時間あたりの料金|
|:--|:--|
|Developer| $0.35（約 \\$250/月）|
|Basic| $1.80（約 \\$1,100/月）※毎月最初の120時間が無料|
|Enterprise| $4.20（約 \\$3,000/月）|

参考記事  
[GCP上でのETLいろいろ](https://mukiudo.dev/post/gcp/0002-etl-on-gcp/)※個人的にはこの記事が判りやすい。
⇒[Building Batch Data Pipelines on Google Cloud - 日本語版](https://www.cloudskillsboost.google/course_templates/53?locale=ja)※学習コースがあるのでやってみたいね
[Cloud Data Fusion でストリーミング データを BigQuery に格納する際の性能検証](https://zenn.dev/cloud_ace/articles/85718fba2c598d)

### ■Batch

説明：Glue？Data Fusionとの使い分けはなんやろか？  
Cloud Run Jobsに近いが、インスタンスサイズにほぼ制限がないとのこと。GCE上で動いているため、CPUやメモリが選択できる。

参考記事
[Google Cloud で "バッチ ジョブ" を実行する 2 つの方法](https://zenn.dev/google_cloud_jp/articles/c99697707e3b2c#batch-%E3%81%A8%E3%81%AF)※Cloud Run Jobsとの比較記事
[Batch で重い CSV を ETL する](https://blog.g-gen.co.jp/entry/large-csv-processing-cloud-batch)

### ■Data Transfer Service

・BigQuery Data Transfer Service  
　外部から BigQuery へのデータ転送を自動化するフルマネージドサービス  
　Cloud Storageのファイルから、BigQueryのテーブルにデータ登録ができる等

・Storage Transfer Service  
　外部からCloud Storageバケットへの転送が可能なサービス  
　イベントドリブン転送が可能  
　どうも転送速度は遅いらしい

AWS Transfer Familyのような、SFTPとかのプロトコルでの転送サービスはあるのかしら？

参考記事 
[GCPのデータ転送サービスまとめ](https://qiita.com/k_0120/items/f689bc254626f1d0564d)
[Storage Transfer Service のイベントドリブン転送を試してみた](https://zenn.dev/cloud_ace/articles/20230725_storage_event_driven_transfers)

### ■Cloud Composer

説明：フルマネージドのワークフロー オーケストレーション サービス。  
一般的な Apache Airflow のオープンソース プロジェクトを基に構築されている。  
Glue ver1.0みたいな、料金きつそー・起動遅そう・ログが見づらそうな匂いがする
・各AirflowコンポーネントはGKEクラスタ上でPodとして稼働します

参考記事
[Cloud Composer の概要 (公式ドキュメント)](https://cloud.google.com/composer/docs/concepts/overview?hl=ja)
[バッチジョブワークフロー実行基盤としての「Google Cloud Composer」実用性検証【前編】](https://www.nri-digital.jp/tech/20231017-15581/)※複数サービスの組み合わせパターンと比較した上での記事。流石に良い。
[Cloud Composer の辛さと、それに負けない開発フローの構築 ~Composer はなぜ辛い?編~](https://note.com/jdsc/n/n3657da5d8206)
[ワークフローオーケストレーション入門](https://speakerdeck.com/nsakki55/wakuhurookesutoresiyonru-men?slide=49)

### ■Looker

説明：BIツール。元々は別会社のプロダクトで、買収されちゃった
2023年5月にGoogle Cloudコンソールから起動できる「Looker (Google Cloud core)」がリリースされた。  

LookerとLookerStudioの違い

- Looker:高度な分析やBI機能を提供。高度な分析や詳細なレポートが必要な場合におすすめ
- LookerStudio:主にデータの可視化やダッシュボード作成に特化。シンプルなデータ可視化やダッシュボード作成を主目的とする場合におすすめ

※LookerStudioはもともとDataPortalという名前でやってた。  
　基本版とより機能が強化されたPro版の2つのバージョンがある。

参考記事  
[LookerとLooker Studioの比較](https://www.itplus.co.jp/blog/looker-studio-compare)
[Googleが提供するBIツール「Looker」とは？](https://sreake.com/blog/learn-about-looker/)

### ■Cloud Functions

説明：AWSで行くところのLambda。サーバレスなのでクラウド上でコードを実行できる。
第二世代だとCloud Runが基盤になっており、一回の実行時間は最大60分間。

種類：  
HTTPトリガー：HTTPリクエストを受け付けることで関数が実行される。  
イベントトリガー：イベントに応答する形で実行される。Eventarc トリガー,Pub/Subトリガー,Cloud Storageトリガー,Cloud Firestoreトリガーに対応

対応言語：

- Node.js
- Python
- Go
- Java
- Ruby
- PHP
- .NET Core

料金： ※下記は第1世代の時。第2世代はCloud Runの料金になる。
| 項目|料金|無料枠|
|:--|:--|:--|
| 関数の呼び出し回数| $0.40 |最初の200万回まで無料|
| 関数の実行時間| $0.000001650/100ms(1024MB)|-|
| ネットワーキング|$0.12/GB(送信データ。受信データ・同リージョンへのGoogle APIへの送信データは無料)|5GBまで無料|
| Container Registry利用料|$0.026/1GB| - |

参考記事 
[Cloud Functionsを徹底解説！](https://blog.g-gen.co.jp/entry/cloud-functions-explained)※G-gen社の説明記事。わかりやすい。

### ■Cloud Run

説明：マネージド コンピューティング プラットフォームで、リクエストまたはイベント経由で呼び出し可能なコンテナを実行できます。  
Cloud Run はサーバーレスです。インフラストラクチャ管理が一切不要なため、最も重要な作業であるアプリケーションの構築に集中できます。
[第7回 雲勉LT【オンライン：初心者向け】サーバレスコンテナサービス Lambda, Fargate, App Runnerの特徴、違いを解説](https://speakerdeck.com/sumikurayurie1125/di-7hui-yun-mian-lt-onrain-chu-xin-zhe-xiang-ke-sabaresukontenasabisu-lambda-fargate-app-runnernote-zheng-wei-iwojie-shuo?slide=15)

AWSにて相当するサービスは？  
⇒APP Runnerみたい。コンテナ化されたウェブアプリケーションやAPIサービスを構築・デプロイ・実行できるとのこと

Cloud Run ジョブとは？  
⇒非同期タスクを実行するための機能です。Cloud Run サービスとは異なり、バッチ処理などのようなワークロードのための機能を備えています。  
　サービス：リクエストをリッスンする形式  
　ジョブ：バッチ処理などの非同期タスクを実行する形式  
[Cloud Run ジョブ ことはじめ](https://zenn.dev/google_cloud_jp/articles/cloudrun-jobs-basic)
[サーバーレス開発の基本と簡単に使い始められるCloud Runの特徴](https://gihyo.jp/article/2023/10/modern-app-development-on-google-cloud-03)
この二つの記事良かった

|SKU|料金|無料枠|
|:--|:--|:--|
|CPU|$0.00001800 / vCPU 秒|毎月最初の 240,000 vCPU 秒は無料|
|メモリ|$0.00000200 / GiB 秒|毎月最初の 450,000 GiB 秒は無料|

参考記事  
[公式ドキュメント](https://cloud.google.com/run?hl=ja)
[AWSエンジニアから見たGCPサービス(コンピューティング編)](https://techblog.gmo-ap.jp/2022/05/27/compute_service_comparison_of_aws_and_gcp/)  
[Cloud Functions vs Cloud Run vs GKE](https://blog.grasys.io/post/shimichan/cloud-functions-vs-cloud-run-vs-gke/) 

### ■Cloud Pub/Sub

説明：SQS。下記の2タイプのサービスがある。
Pub/Sub :自動でグローバルのリソースとしてプロビジョニングされるため、容易に運用することができます。  
Pub/Sub Lite :は コストを抑えて運用する必要がある場合におすすめ。容量設定等の運用作業がある。

類似サービスに、Cloud Tasksがある。  
⇒使い分けは、暗黙的呼び出しと明示的呼び出しの概念にあります。
- 暗黙的：送信と受信が完全に分かれているPub/Sub
- 送信側：完全な制御ができるTasks

また、Cloud Tasksには具体的な配信時間のスケジュール,配信レートの管理等、Pub/Subでは使えない機能がある。  
[Cloud Tasks か Pub/Sub かの選択(公式ドキュメント)](https://cloud.google.com/tasks/docs/comp-pub-sub?hl=ja)

参考記事
[Cloud Pub/Sub のキホン](https://zenn.dev/google_cloud_jp/articles/3ff077e88abd09)
[Google Cloud で、決まった時刻にjobを実行する、2つの方法](https://zenn.dev/google_cloud_jp/articles/e35fbe793efb5b)※Cloud Tasksとの比較

### ■Cloud Scheduler

説明：サーバーレスなジョブスケジューラサービスです。
cronジョブを作成し、一括での管理が可能。フルマネージドサービス

cronジョブのターゲット

- 一般公開されている HTTP/S エンドポイント
- Cloud Pub/Sub トピック
- Google App Engine の HTTP/S アプリケーション

参考記事 
[Google Cloud で、決まった時刻にjobを実行する、2つの方法](https://zenn.dev/google_cloud_jp/articles/e35fbe793efb5b)※Cloud Tasksとの比較
[Cloud Scheduler を徹底解説！](https://blog.g-gen.co.jp/entry/cloudscheduler-explained)

### ■Cloud Logging

説明：CloudWatch Logs。ログの実ファイル格納先がLogging専用の ***ログバケット*** に格納される(この点がCloudWatch Logsとは異なるはず)。  
なお、格納先は他に ***Cloud Storage バケット*** 、***BigQuery データセット***が選択できる。

最初から存在するログバケットについて  
・_Required:  
　ログバケットに保存されるログは、取り込み料金もストレージ料金も発生しません。  
　Google Cloud が必須で取得する監査系のログが投入されるログバケットだからです。

・_Default：  
　初期設定では保持期限が 30 日ですので、保持期限を変更していなければストレージ料金は発生しません。  
　ただし取り込み処理料金は発生することに注意してください。  
　⇒こやつは何のためのもの？　デフォルトで用意されるログバケット？　明示的に作成してあげた方が良いのかもしらん

料金：

|項目|料金|無料枠|
|:--|:--|:--|
|取り込み料金|$0.50/GiB|最初の50Gibまで|
|ストレージ|$0.01/GiB|30日以内の保存|

参考記事
[Cloud Loggingの概念と仕組みをしっかり解説](https://blog.g-gen.co.jp/entry/cloud-logging-explained)※G-gen社の記事

### ■Cloud Monitoring

説明：ほぼCloudWatch。こちらもサーバ上にagentをインストールすることで追加のメトリクスが収集できる。(Opsエージェント)

参考記事
[Google Cloud(GCP)のCloud Monitoring解説 (基本編)](https://blog.g-gen.co.jp/entry/cloud-monitoring-explained)※G-genの記事
[Cloud Run のモニタリングとロギングの基本](https://zenn.dev/google_cloud_jp/articles/cloudrun-monitoring)

## 最後に
冒頭にも書いたとおり、机上で集めただけの情報なので誤りなどありましたらご指摘ください。
また、これから少しづつ各サービスを操作していこうかと考えているので、折に触れて追加・修正したい(願望)