【GCP】Professional Cloud Architect認定試験に合格しました

# はじめに
[2020年に最も稼げるIT資格第1位](https://www.globalknowledge.com/us-en/resources/resource-library/articles/top-paying-certifications/)である、GCP Professional Cloud Architect取得のために行った勉強内容をまとめました。

- 時間: 2時間
- 登録料: $200
- 資格有効期間: 2年間
- 受験方法: オンライン or テストセンター

# 勉強前の経験値
- SIer歴3年目のアプリケーションエンジニア。
- 古典的はWEBサーバ, APサーバ, DBサーバを使った3層構成の基盤・アプリケーションは自分で作れる。
- GCEインスタンスを作ってSSHで接続、Git, Dockerを使ったコードや環境の管理はできる。
- GCE以外のサービスは一切経験なし。使い方わからないし課金こわい><

# 受験の動機
- 元々Kaggle用にGCEを使っていたが、レンタルサーバと同じ使い方をしていたためクラウドの恩恵をあまり受けられていなかった。データ保管、スケーリング、インフラの管理がめんどくさくなってきたので一丁クラウドで楽をしたい。
- 業務で使っているレガシーな環境に飽きた！
- SRE/DevOps/Kubernetesなどの今どきなWeb開発技術がわかるようになりたい！
- Webサービスを作って公開したい！今どきWebサービス作るならクラウド使うよね！というノリ

# 受験までにやったこと
受験料$200にビビり、40時間ほど勉強しました。

1. 公式模擬試験: 1時間
[Professional Cloud Architect認定資格](https://cloud.google.com/certification/cloud-architect?hl=ja)
現状の自分の知識レベルを測る目的で受験。目標時間が45分のところをググりつつ1時間くらいかけ、正答率70%でした。ググらなければ半分も取れなかったと思います。
アーキテクトと言うだけあって、ビジネス要件・技術要件が与えられ、それをシステムに落とし込むような問題が多い。
**各サービスの使い分けを理解することが重要**と実感。

2. Coursera: 20時間
[Architecting with Google Compute Engine](https://www.coursera.org/programs/gcp-courses-gtm-sep18-u0w20/browse?productId=Nm668VLuEeeSiQ7iX8PDyA&productType=s12n&query=Cloud+Architecture+with+Google+Cloud&showMiniModal=true)
[Cloud Architecture with Google Cloud](https://www.coursera.org/programs/gcp-courses-gtm-sep18-u0w20/browse?productId=Zr7lPblmEemQRhI-rkeuOA&productType=s12n&query=Cloud+Architecture+with+Google+Cloud&showMiniModal=true)
を受講しました。それぞれ5〜6コースのセットになっており、どんなサービスがあるかをおおよそ網羅できるようになっています。
2倍速で再生し、休日は1日7~8時間・平日は1日1~2時間かけて2週間ほどで修了しました。
途中でQuiklabsを使った演習があるため、無料でサービスのハンズオンを経験することができ非常によかったです。

3. Quiklabs: 8時間
キャンペーンでたまたま250クレジット(25000円分)をもらえたのでやってみました。
Courseraで用意されているラボと重複していたので、Courseraのコースを完了していれば不要だと思います。
[ハンズオンラボ: クラウド アーキテクチャ](https://google.qwiklabs.com/quests/24?locale=ja)

4. 公式模擬試験（2回目）: 2時間
一通り勉強したところ模擬試験をもう一度受けてみました。
Associateは試験範囲が重複しているので模擬試験だけやってみました。
Associate Cloud Engineer(ACE): 正答率95%
Professional Cloud Engineer(PCA): 正答率70%
でした。PCAと比較してACEはコマンドの使い分けを問う問題が多く、実装力がより求められているように感じました。

5. 公式ドキュメント読み込み&知識まとめ: 4時間
この時点でGCPの主要なサービスは抑えている状態であるものの、細かい使い分け（リレーショナルDBと非リレーショナルDBはどれか、マルチリージョナルとリージョナルリソースはどれか、etc..）がまだ定着していないと感じたためこの記事を書きました。

6. YouTube: 4時間
[Google Cloud Platform](https://www.youtube.com/c/googlecloudplatform/videos)
各種サービスについて5分くらいの動画で説明してくれる。知らないサービスの導入として。
[Learn GCP with Mahesh](https://www.youtube.com/c/LearnGCPwithMahesh/videos)
英語にクセがあるがクオリティの高い解説が目白押し。
特にケーススタディ3種の解説を行っているCheat Sheet動画は必見。

7. 模擬試験を受ける(3回目): 1時間
 Professional Cloud Engineer(PCA): 正答率85%

# 受験
私は自宅からオンラインで受験しました。

- 試験当日は15分前にログインするようメールに記載されていましたが、webassesorのページから試験開始ボタンが押せるようになるのは10分前からでした。
- 2時間の試験中はラップトップに電源を接続しておくことはできません。フル充電で臨みましょう。
- 試験自体はKryterionというアメリカの会社が代行しているようです。試験中に問題があった場合はKryterionのサポートや試験監督とは英語のチャットでコミュニケーションすることになります。

#### 身分証・試験環境の確認待ちについて
試験開始前の確認が大変でした。今後受験する方のために書き残しておきます。
案内に沿って試験開始の準備ができると、"I'm Ready"というボタンを押下して身分証・試験環境の確認のため試験監督の巡回を待ちます。ここで、

**試験監督の巡回まで30分以上かかることがありますが、ひたすら待ってください。** :expressionless::expressionless::expressionless:

私は30分ほど待っても試験監督が巡回して来ず、これはおかしいと思い試験を中止しました。サポートに連絡すると試験が再スケジュールされ、2回目も30分以上待ったものの試験監督が来ない。
サポートになぜ巡回して来ないのか聞いたところ、混雑しているのでひたすら待ってくださいとのこと。3回目はもはや席を外して部屋の掃除をしていました。40分ほど待ったところでついに試験監督が巡回して来ました！
試験開始まで40分かかるっておかしいのでは・・
サポートのチャットはつながるまで10~15分ほど順番待ちをする必要がありますが、対応は速かったです。

身分証は日本の免許証を提示したところ、英語で名前が書いてある身分証があるか聞かれました。私はパスポートを持っていたので提示しました。
また、ラップトップで部屋の状況を360度撮影するよう指示されます。このあたりはスムーズでした。

#### 試験自体
1時間ほどで全50問をひとまず回答し、うち10問は要見直しでした。残り1時間を使って見直しができたので、試験時間は割と余裕がありました。

試験提出ボタンを押すと、「本当に提出しますか？」といったダイアログが表示され、提出するとアンケートに進みます。

アンケートの回答が終わると画面に「合格」の文字が表示されていました。
その後試験中に不正がなかったかなどをGoogleが審査し、最終的に問題なければ1週間〜10日後に正式な合否通知が来ます。

# 合格すると
- 継続時の受験料は50%オフになります。
- [資格認定者ディレクトリ](https://googlecloudcertified.credential.net)に名前を連ねることができます。
- 認定資格ロゴ入りのオリジナルグッズがもらえます。パーカ、リュック、長袖から選択することになります。
- グッズを着用してドヤれます。ズボンもあればいいですね！

# Tips
継続試験を受けるときのためにメモを残しておきます。

### ケーススタディ

- **ケーススタディはWebに公開されているものと全く同じものが試験本番で題材となる。**
- 当然問題は異なるが、ケーススタディを十分に読み込んで回答を作っておくことが重要。
- ケーススタディの回答例を作りました。
  - [Mountkirk Games回答例](https://qiita.com/yota-p/items/3d2c7889f26d4b951176)
  - [Dress4Win回答例](https://qiita.com/yota-p/items/c6188fba1c47c5e07484)
  - [TerramEarth回答例](https://qiita.com/yota-p/items/f384fe21f0702135a202)

### サービスの概要把握
[1 行でわかる Google Cloud Platform](https://cloud.google.com/blog/ja/products/gcp/google-cloud-platform-paperprint)
GCPの主要サービスが1行で俯瞰できる。はじめにざっと目を通しておくとよい。

[GCP公式ドキュメント](https://cloud.google.com/docs?hl=ja)
GCPのプロダクトは相当な数があるが、PCA受験にあたって全てを網羅する必要はない。Courseraの授業や模擬試験の感触から以下の項目が重要と判断し、コンセプトを理解するようにした。

- [ベストプラクティス](https://cloud.google.com/docs?hl=ja#section-4)
- [アーキテクチャ](https://cloud.google.com/docs/tutorials#architecture)
- [ソリューション](https://cloud.google.com/docs?hl=ja#section-5)
- コンピューティング
    - [GCE](https://cloud.google.com/compute/docs?hl=ja)
    - [GAE](https://cloud.google.com/appengine?hl=ja)
    - [GKE](https://cloud.google.com/kubernetes-engine?hl=ja)
    - [Cloud Run](https://cloud.google.com/run?hl=ja)
    - [Cloud Functions](https://cloud.google.com/functions?hl=ja)
- [ストレージ、データベース](https://cloud.google.com/products/databases?hl=ja)
- ネットワーキング
    - [VPC, ファイアウォール](https://cloud.google.com/vpc/docs?hl=ja)
    - [ロードバランサ](https://cloud.google.com/load-balancing/docs/choosing-load-balancer?hl=ja)
- デベロッパーツール
    - [Cloud SDK](https://cloud.google.com/sdk/docs?hl=ja)
    - [Container Registory](https://cloud.google.com/container-registry/docs?hl=ja)
    - [Cloud Build](https://cloud.google.com/cloud-build/docs?hl=ja)
    - [Cloud Source Repositories](https://cloud.google.com/source-repositories/docs?hl=ja)
- 管理ツール
    - [StackDriver](https://cloud.google.com/stackdriver/docs?hl=ja)
    - [Monitoring](https://cloud.google.com/monitoring/docs?hl=ja)
    - [Logging](https://cloud.google.com/logging/docs?hl=ja)
    - [Trace](https://cloud.google.com/trace/docs?hl=ja)
    - [Debugger](https://cloud.google.com/debugger/docs?hl=ja)
- [移行](https://cloud.google.com/docs?hl=ja#section-20)：BQ, GCE, GCS専用のソリューションあり
- セキュリティ
    - [監査ログ](https://cloud.google.com/logging/docs/audit?hl=ja)
    - [IAM](https://cloud.google.com/iam/docs?hl=ja)
    - [IAP](https://cloud.google.com/iap/docs?hl=ja)
    - [Resource Manager](https://cloud.google.com/resource-manager/docs?hl=ja)

### 気になった点のメモ
#### GCE
- スナップショットは特定のディスクのコピー。2回目からは差分スナップショットが使える。
- イメージはVMのコピー。インスタンスの構成も含む。

#### GKE
- configMap: Podやコンテナが使う設定値をKey-Valueで渡すための仕組み。

#### ストレージ、データベース
- Cloud SQLは10TBの容量制限がある。
- OLAP: Online Analyze Processing
- OLTP: Online Transaction Processing

#### ストレージ比較
[TopGateさんの記事](https://www.topgate.co.jp/google-cloud-day-storage)が素晴らしいです！もっと早く出会えばよかった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327040/9d1db2d2-2740-730a-804b-f2bd54636aa9.png)

- ゾーン永続ディスク: 効率的で信頼性の高いブロック ストレージ。
- リージョン永続ディスク: 2 つのゾーンに複製されたリージョン ブロック ストレージ。
- ローカル SSD: 高パフォーマンスかつ一時的なローカル ブロック ストレージ。
- Cloud Storage バケット: 手頃な料金のオブジェクト ストレージ。
- Filestore: Google Cloud ユーザー向けの高性能ファイル ストレージ。

#### HA構成
- BigTable: マルチリージョン
- Datastore, Firestore: マルチリージョン。レプリケーションが強整合。トランザクショナル！Spanner, SQLのNoSQL版と見てよい。
- Filestore: NAS。ゾーンが落ちるとおわり。HA構成に向いていない。高速。
- Cloud Storage: 3ゾーン。99.999999999%(9が11個)のHA。マルチリージョンも選択可能。
- Cloud SQL: 自動BK, failover replica構成可能。簡単。レプリカは同じリージョンの違うゾーン。レプリケーションが強整合。
- Cloud Spanner: マルチリージョン。1リージョンに対し最低3ゾーンにレプリカ。レプリケーションが強整合。
- Memorystore: シングルリージョン・マルチゾーン。マルチリージョンなし。

#### Datastore
[Datastoreでの強整合性と結果整合性のバランス](https://cloud.google.com/datastore/docs/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore?hl=ja)

- エンティティが非常に多数のユースケースでは、結果整合性が最良。クエリの結果の件数が非常に多い場合、特定のエンティティが含まれるかどうかがユーザーエクスペリエンスに影響を与える可能性は低いため。
- エンティティ数が少なく、限定されたコンテキストでのユースケースでは、強整合性が必要になる。該当するエンティティと該当しないエンティティをユーザーが意識するため。
- Datastoreは祖先クエリのみ強整合性を持つ。

#### VPC, ファイアウォール
- defaultネットワークには各リージョンに1つのサブネットを持つ

#### Cloud Router
- BGPを使用して動的にルーティングができる
- 静的ルーティングの保守から解放されるのがメリット
- VPNトンネルでは一々トンネルの削除・再構成がいらなくなるのでトラフィックを止める必要がなくなる
- Cloud NAT, Interconnect, HA VPN, VPNで使用する

#### ロードバランサ
- GCPにロードバランサというネットワーク機器は存在しない。すべてネットワークの機能として提供されている。そのため、'Load Balancing'という表現が使われる。
- HTTP(S) LB: L7ロードバランサ。HTTP/HTTPS, 外部/内部, シングル・マルチリージョンが構成可能
- TCP LB: L4ロードバランサ。TCP LB/SSL Proxy/TCP Proxy, 外部/内部, シングル・マルチリージョンが構成可能
- UDP LB: L4ロードバランサ。UDP, シングルリージョンのみサポート。外部/内部が構成可能。
![スクリーンショット 2020-08-14 19.58.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327040/09f0ad91-49d6-1cf8-c694-d6c6d4734dde.png)

#### Cloud SDK
- SLAなし
- デフォルトリージョン, ゾーンは自分で設定する必要がある

#### Dataproc
- Dataproc は短時間のジョブ限定クラスタ用に最適化されている。コストの問題から、長時間実行する用途には向いていない。ストリーミングではなくバッチ向け。

#### 監査, コンプライアンス
- 外部の人が監査ログを見られるようにするには→Stackdriver Logging+GCS+Signed URL
- HIPAA, PCI-DSSに準拠するにはGCPとBAAを結ぶ必要あり。
- 準拠しているかはプロダクトによる。
- Local SSD, CDN, Interconnect, StackDriver Monitoring, Cloud Build, Cloud EndpointはHIPPA, PCI-DSSに準拠していない
- Cloud ArmorはPCI-DSSに準拠していない。HIPPAは準拠している

#### コスト
- TCO: Total Cost of Ownership
- OpEx: Operational Expenditure
- CapEx: Capital Expenditure

#### IAM
- GCEからBQへアクセスするには: アクセススコープ(Default Service Accout) or IAM (Custom Service Account)

#### Pub/Sub
- あるトピックが2回配信されることもある。アプリケーションは、同じトピックを2回受け取ることを考慮して設計する必要がある。

#### マイクロサービス
https://12factor.net/ja/

#### データ移行
- gsutil: 1TB未満ならこれで。
- Storage Transfer: 他のクラウド(orオンプレ)からGCSにデータを転送する。オンプレからの場合はTransfer service for on-premises dataがおすすめ。
- Transfer Appliance: 物理転送
- BigQuery Data Transfer Service: SaaS アプリケーションからBQにデータを転送する。
- Transfer Service for On Premises Data: オンプレからGCSにデータを転送する。Dockerクライアントで転送ジョブを実行

#### Interconnect
オンプレからInterconnectを利用する場合は、Co-locationとの距離が近い必要もある。
手軽なVPNの方が最初の選択肢となる。

#### IAP
Bastin host, 外部IPなしでインスタンスに接続できる仕組み。

#### HTTPエラーコード
問題文中にエラーコードだけ示されて、解決するにはどうすればよいか問われる場合がある。
そもそもエラーコードの意味がわからないと詰むので、最低限の知識は入れておく必要がある。

- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 429 Too Many Requests
- 500 Internal Server Error
- 502 Bad Gateway
- 503 Service Unavailable

#### 試験ガイドに沿った確認
- ビジネス ユースケースとプロダクト戦略：[ケーススタディ](https://cloud.google.com/certification/guides/professional-cloud-architect?hl=ja)
- 費用の最適化：[クラウドコストの最適化のためのベスト プラクティス](https://cloud.google.com/blog/ja/products/gcp/best-practices-for-optimizing-your-cloud-costs)
- アプリケーション設計の支援：[アーキテクチャ フレームワーク](https://cloud.google.com/architecture/framework)
- 外部システムとの統合：[Apigee](https://cloud.google.com/apigee?hl=ja), [Anthos](https://cloud.google.com/anthos/?hl=ja), [Cloud Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect?hl=ja)
- データの移動：[大規模なデータセットの移動](https://cloud.google.com/solutions/migration-to-google-cloud-transferring-your-large-datasets?hl=ja), [Cloud Data Transfer](https://cloud.google.com/products/data-transfer?hl=ja)
- 設計上の決定のトレードオフ
- 構築、購入、変更
- 成果の測定方法（重要業績評価指標（KPI）、投資収益率（ROI）、指標など）：SLI, SLO, SLA, ROI, レイテンシ, スループット
- コンプライアンスと可観測性：監査ログ, IAM, StackDriver