Google Cloud Professional Cloud Database Engineer を取得した

# はじめに
* 2022/07にGAとなった[Google Cloud Professional Cloud Database Engineer](https://cloud.google.com/certification/cloud-database-engineer?hl=ja)を取得しました
* GA直後ということもあり、2022/09現在情報が少ない資格であるため今後受験する方の参考になればと思い執筆します
* 現在英語のみで受験可能です
    * 日本語・英語など試験を受ける言語ごとに[webassessor](https://www.webassessor.com/)のアカウントを作成する必要があります。アカウント未保有の方だけでなく、日本語アカウントのみ保有の方もアカウント作成が必要です
    * 英語試験であっても日本のテストセンターを選択可能です
        * オンライン試験の場合、試験前後に英語の応対が必要になりますがテストセンターであれば試験前後に英語を使わなくてOKです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2876448/193a5edb-0e6a-5c51-dcc6-e0b3d35d2e10.png)
























# 概要
* 試験時間・問題数は多くのGoogle Cloud Professional資格と同様に120分・50問です
* BigQueryに関しては[Data Engineer](https://cloud.google.com/certification/guides/data-engineer?hl=ja)試験で多く問われ、Database Engineerでは詳細を問われることは少ないです
* **Database** Engineerという資格名ですがテーブル/スキーマ設計やSQL関連の問題少ないです
* CloudSQLに関する問題が非常に多いです
* [AlloyDB](https://cloud.google.com/alloydb/docs/overview?hl=ja)はPreviewということもあり範囲外でした



# 確認しておくべきサービス・機能
最低限以下のサービスは概要と機能をドキュメントでチェックしできること・ユースケースを理解しておく

### 1. [Database Migration Service](https://cloud.google.com/database-migration?hl=ja)
データベースを、オンプレミス・GoogleComputeEngine(GCE)などからCloudSQLに移行してくれる機能です
##### ポイント
* MySQL・PostgreSQLが対応している
    * Oracleの移行は[Bare Metal Solution for Oracle](#2bare-metal-solution-for-oracle)を利用
* Google Compute Engine(GCE)からも移行することができる(オンプレミスからの移行専用ではない)
* アプリケーションに変更を加えることなく移行できる
* ダウンタイムほぼゼロ(near-zero downtime)で移行することができる
* 変更データキャプチャ(CDC)に対応している
* [制限事項](https://cloud.google.com/database-migration/docs/postgres/known-limitations)を理解しておく

### 2.[Bare Metal Solution for Oracle](https://cloud.google.com/bare-metal?hl=ja)
OracleワークロードをGoogleCloudに移行するためのツールです
##### ポイント
* Oracleの各種機能(RAC、レプリケーション、さまざまなパフォーマンス機能)をそのままGoogleCloudに移行できる
* コピーデータの管理とバックアップにはActifioが提供されている
* [アプリケーションのセキュリティ](https://cloud.google.com/bare-metal/docs/bms-security?hl=ja#application_security)を確認し、アプリケーションを保護する方法を理解しておく
* [インターネットにアクセスする](https://cloud.google.com/bare-metal/docs/bms-setup?hl=ja#bms-access-internet)方法も理解しておく

### 3.[Datastream](https://cloud.google.com/datastream/docs?hl=ja#docs)
変更データキャプチャ（CDC）およびレプリケーションサービス
##### ポイント
* OracleDBもしくはMySQLから変更（挿入、更新、削除）をBigQuery、Cloud SQL、Cloud Storage、Cloud Spannerに最小限のレイテンシとダウンタイムで同期できる
* [Database Migration Service](#1-database-migration-service)と混合しないように注意して機能を理解しておく


### 4. [CloudSQL](https://cloud.google.com/sql/docs/postgres/introduction?hl=ja)
MySQL、PostgreSQL、SQL Server に対応しているフルマネージドデータベースです
##### ポイント
* 各リンク先を確認しておきましょう
* [レプリケーション](https://cloud.google.com/alloydb/docs/overview?hl=ja)
    * [障害復旧またはリージョン移行の流れ](https://cloud.google.com/sql/docs/mysql/replication/cross-region-replicas?hl=ja)
    * リードレプリカのユースケース
        * リージョンを跨いだディザスタリカバリ(DR)や移行
        * 読み取りの負荷分散
    * [外部レプリカ](https://cloud.google.com/sql/docs/mysql/replication/configure-external-replica?hl=ja)も確認しておく
* [高可用性(HA)構成](https://cloud.google.com/sql/docs/mysql/high-availability?hl=ja)
    * [フェイルオーバーの流れ](https://cloud.google.com/sql/docs/mysql/high-availability?hl=ja#failover-overview)
        * テストで意図的にフェイルオーバーさせたい場合は、`gcloud sql instances failover ${primary_instance_name}`を利用します
    * [HA有効化](https://cloud.google.com/sql/docs/mysql/configure-ha?hl=ja)
        * 既存のインスタンスでHA有効化を行うためには `gcloud sql instances patch ${instance_name}`を利用します
* データベース選定
    * 特徴をおさえておきましょう
    * 例えば、以下の要件に合致する場合CloudSQLが選択できます
        * オンプレミスのMySQL、PostgreSQL、SQLServerからGoogleCloudに移行
        * リレーショナルデータベース
        * SLA 99.95%
        * 最大64TBのストレージ(専用コアの場合)
    * 一方、[**CloudSQLでできないこと**](https://cloud.google.com/sql/docs/sqlserver/features?hl=ja#general_features_unavailable_for)を抑えておくことも重要です
        * 例えば、SSRSを使用しているオンプレミスSQLServerをGoogleCloudに移行するためにはCloudSQLではなくComputeEngineを選択する必要があります
* ネットワーク
    * 外部IPアドレスの無効化
        * 「ネットワークセキュリティを改善したい」「CloudSQLと同じVPC内のGCE等からの接続」といった要件の場合に利用できます
        * 外部IPアドレスを利用しなくてはいけない場合は、承認済みネットワークに許可するIPアドレスを追加することでIPアドレス制限を行います
* [メンテナンスウィンドウ](https://cloud.google.com/sql/docs/sqlserver/set-maintenance-window?hl=ja&skip_cache=true)を理解しておく
    * 1時間枠で設定を行う
    * メンテナンス拒否時間は最大90日まで設定可能
* その他
    * [RecommenderAPI](https://cloud.google.com/sql/docs/mysql/recommender-sql-overprovisioned)を利用してオーバープロビジョニングされたインスタンスを検出し、コスト最適化を行うことができます
    * [Query Insights](https://cloud.google.com/sql/docs/postgres/using-query-insights)でクエリパフォーマンスのトラブルシューティングができます
        * クエリタグを付けておくことでアプリケーションにより一層フォーカスすることができます
    * [バックアップと復元](https://cloud.google.com/sql/docs/mysql/backup-recovery/scheduling-backups?hl=ja)
        * [ポイントインタイムリカバリ(PITR)](https://cloud.google.com/sql/docs/postgres/backup-recovery/pitr?hl=ja)もあわせて確認しておく
    * [データのインポートとエクスポート](https://cloud.google.com/sql/docs/mysql/import-export?hl=ja)
    * [Cloud SQL Auth Proxy](https://cloud.google.com/sql/docs/postgres/sql-proxy?hl=ja)

### 5. [Cloud Spanner](https://cloud.google.com/spanner?hl=ja)
マルチリージョンで利用可能なフルマネージドリレーショナルデータベース
##### ポイント
* トランザクション処理に対応した分散データベース
* 構造化データおよび半構造化データ(JSON)が利用できる
* グローバル(世界中)に透過的なスケーリングができる
* 複数ある[スケーリング手法](https://cloud.google.com/architecture/autoscaling-cloud-spanner?hl=ja#different_scaling_methods_for_different_workloads)の使いどころを理解しておく
* [データのインポート・エクスポート](https://cloud.google.com/spanner/docs/import-export-overview?hl=ja)を理解しておく
    * エクスポートはcsvかAvro形式でDataflowを利用することで実現可能
* 2種類ある[データの復元方法](https://cloud.google.com/spanner/docs/pitr?hl=ja#ways-to-recover)の使いどころを理解しておく
* [ノードとProcessingUnit](https://cloud.google.com/spanner/docs/compute-capacity)について理解しておく
* [スキーマ設計](https://cloud.google.com/spanner/docs/schema-design?hl=ja)を理解しておく
    * ホットスポットを防ぐためには、主キーにUUIDや連続した値をBitReverseしたものを利用する
* [統計情報](https://cloud.google.com/spanner/docs/introspection/query-statistics?hl=ja)の確認方法を理解しておく
* レイテンシを最小限に抑えるためには、デフォルトのリーダーとクライアントアプリケーションができる限り近い位置にあるマルチリージョン構成を選択する

### 6. [Cloud Bigtable](https://cloud.google.com/bigtable?hl=ja)
フルマネージドでスケーラブルなNoSQLデータベース
##### ポイント
* NoSQLデータベース
* SLA:99.999%(3つ以上のリージョンで複数クラスタのルーティングを使用した場合) 
* レイテンシが安定して10ミリ秒未満
* 毎秒数100万レコードの読み取り・書き込みが可能
* 大量の時系列データ(IoTなど)をリアルタイムに取り込んで分析する目的に適している
* ストレージ上限は以下の通り
    * SSDクラスタ: 1ノードあたり5TB
    * HDDクラスタ: 1ノードあたり16TB
    ※クラスタに十分なノードを追加して、ディスク使用率を上限の70%以内に抑えるようにしておく(ベストプラクティス)
* クラスタ構成を理解しておく
    * 複数のクラスタを利用している際はアプリケーションから受信したリクエストを処理する方法を[アプリプロファイル](https://cloud.google.com/bigtable/docs/app-profiles?hl=ja)で定義する
* パフォーマンスのトラブルシューティングには[Key Visualizer](https://cloud.google.com/bigtable/docs/keyvis-overview?hl=ja)を利用する

### 7. [Cloud Firestore](https://firebase.google.com/docs/firestore?hl=ja)
モバイル、ウェブ、サーバー開発に対応した、柔軟でスケーラブルなNoSQLデータベース
##### ポイント
* NoSQLデータベース
* SLA: 99.999%(マルチリージョン構成の場合)
* オフラインやネットワークが途切れるような環境でもデータにアクセスすることができる([オフラインサポート](https://firebase.google.com/docs/firestore/manage-data/enable-offline?hl=ja)機能)
    * オンラインに戻った場合、クライアントデータをバックエンドデータベースに同期することができる
* コンテンツ配信を最適化するためには、[Firestore Bundle + CloudCDN](https://firebase.google.com/docs/firestore/solutions/serve-bundles)を利用する
* [ネイティブモードとデータストアモードの選択](https://cloud.google.com/datastore/docs/firestore-or-datastore?hl=ja)を確認し、違いや選定方法を理解しておく


### 8.権限まわり
各データベースにどのような権限を付与するとどのようなことができるのかなどのIAMに関する問題も出題されます。以下のドキュメントを確認しておきましょう

* [CloudSQL](https://cloud.google.com/sql/docs/mysql/roles-and-permissions?hl=ja)
* [Spanner](https://cloud.google.com/spanner/docs/iam?hl=ja)
* [Bigtable](https://cloud.google.com/bigtable/docs/access-control?hl=ja)
* [Firestore](https://cloud.google.com/firestore/docs/security/iam?hl=ja)

##### 確認の例
* データベースに読み取り/書き込み
* データベースにSQLクエリ実行
* データベースのスキーマを表示/更新

上記を行うためには`roles/spanner.databaseUser`が必要となるといったことを確認しましょう(`roles/spanner.admin`でもできますが最小権限を選ぶことがベストプラクティスです)

##### その他
* 他のクラウド等のアプリケーションやオンプレミスからGoogleCloudのデータベースにアクセスする場合は[Workload Identity](https://cloud.google.com/iam/docs/configuring-workload-identity-federation)を利用することがGoogle推奨プラクティスです
* 「アクセス権限もしくはアクセス権を持つサービスアカウントキーを保持している場合でも承認を受けたネットワーク以外はデータベースにアクセスさせたくない」などデータ保護を強力に行いたい場合は、[VPC Service Controls](https://cloud.google.com/vpc-service-controls?hl=ja)を利用します

# 勉強方法
* [試験ガイド](https://cloud.google.com/certification/guides/cloud-database-engineer)を確認する
* 上記「[確認しておくべきサービス・機能](#確認しておくべきサービス機能)」で紹介したドキュメントを中心に試験ガイドの範囲のドキュメントを確認する
* 模擬試験を解く
    * 2022/09現在、[日本語のサイト](https://cloud.google.com/certification/cloud-database-engineer)には模擬試験のリンクが記載されていませんが、[英語のサイト](https://cloud.google.com/certification/cloud-database-engineer)から模擬試験を解くことができます

# 言語の壁・・・
* GoogleCloud試験全体に該当しますが試験問題および選択肢は比較的短文(問題文：3行程度、選択肢1行)の問題が多く英語のReadingが遅くても時間が足りなくなるということはない印象です
    * 長文の問題はフラグを付けておいて一通り解き終わってからじっくり読む作戦もオススメです
* 勉強時にドキュメントは英語で確認し、慣れておくことも非常に大切です
    * 本記事中のリンクの多くは日本語ページのものにしています。まずは日本語で中身を正確に理解し、英語版でも読んでおくことがオススメです

# おわりに
* 英語のみ対応の資格試験であったこととGA直後で情報が少なかったことから躊躇していましたが、夏休みを利用して勉強・受験してみました。GoogleCloudのデータベースを体系的に学ぶいい機会となり取得してよかったと思える資格でした！
* 受験前に情報を収集しようとしましたが、**Data** Engineerの記事ばかりヒットしてしまい、**Database** Engineerの記事が少なく苦労しました。同じ状況の方の参考になれば幸いです