【祝日本語対応！】GCP資格Professional Cloud DevOps Engineer受験対策

# はじめに
2023/08/21よりGoogle Cloud認定資格Professional Cloud DevOps Engineerが日本語受験できるようになりました。
そのため、これからProfessional Cloud DevOps Engineerを受験する方が増えると思います。
本記事では、Professional DevOps Engineerの合格を目指す方に向けて、キーワードや必要な知識について共有できればと思います。
本記事を読んだだけで合格できる、ということを保証するものではありませんので、ご了承ください。

# もくじ
- Professional Cloud DevOps Engineerについて
- 要点
- 勉強法
- まとめ

# Professional Cloud DevOps Engineerについて
本資格ではGoogle Cloudの中でDevOpsするために必要なことについて問われます。50～60問の選択式であり、試験時間は2時間です。また、受験費用は$200 (税別) です。
[試験ページ](https://cloud.google.com/learn/certification/cloud-devops-engineer?hl=ja)では、以下のことが評価されるとあります。

- DevOps向けにGoogle Cloud組織をブートストラップ
- サービスのCI/CDパイプラインを構築及び実装
- SREのプラクティスをサービスに適用
- サービスのモニタリング戦略を実装
- サービスパフォーマンスの最適化

受験して感じたのはGoogleが提唱するSRE (Site Reliability Engineering:サイト信頼性エンジニアリング) に関しての問題が多かったということです。そのため、それを重点的に学習するだけでも合格ラインに近づくのではないかと思います。

Professional Cloud DevOps Engineerの[試験ガイド](https://cloud.google.com/certification/guides/cloud-devops-engineer?hl=ja)には試験に出題される可能性があるトピックについて記載があります。全て知りたい方は試験ガイドのリンクに飛んでいただきたいですが、ここでは主に重要だと思われるトピックについてピックアップします。各トピックの詳細については次項の要点で言及するため、ここではこんなことが問われる試験なんだという理解だけで十分です。

## 重要トピック
- リソース階層の設計
- IaC (Infrastructure as Code)
- CI/CD
- 開発環境と本番環境など、複数環境の管理
- CI/CDパイプラインの設計・管理
- CI/CDデプロイパイプライン
- SRE (サイト信頼性エンジニアリング)
- ログ管理
- 指標管理
- ダッシュボードおよびアラード管理
- 運用監視ツールのアクセス制御
- サービスパフォーマンス問題の特定
- リソース使用率と費用を最適化

# 要点
ここでは試験ガイドの各セクションに基づいて要点を整理しましたので、勉強をする際の参考としていただければ幸いです。後半にはよく問われたGoogle Cloudサービスとその公式ドキュメントについてまとめましたので、そちらも併せてご確認いただければと思います。

## DevOps のための Google Cloud 組織のブートストラップ
### リソース階層
どのようにGCPプロジェクトやフォルダを構成するかについて問われます。以下公式ドキュメントをご参照ください。

https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy?hl=ja

https://cloud.google.com/iam/docs/resource-hierarchy-access-control?hl=ja

### IaC (Infrastructure as Code)
IaCに関する詳細なことはあまり聞かれませんが、よく出るIaCツールとしてCloud Foundation Toolkit、Config Connector、Terraform、Helmがあり、どういう特徴があるのかは知っておいた方が良いです。

# CI/CD
Google CloudにおけるCI、CDツールに関しては後半の公式ドキュメントをご参照ください。CI\CDでよく私用されるサードパーティ製ツールとして、Jenkins、Git、ArgoCD、Packerがありこれらの特徴についておさえておくと良いです。特に、Gitについてはブランチ戦略やコミットのタイミングなど、Gitの運用に関わる出題も見られます。

## サービスのCI/CDパイプラインの構築と実装
CI/CDパイプラインの構築と実装については以下の公式ドキュメントがとても参考になります。

https://cloud.google.com/solutions/continuous-integration?hl=ja

https://cloud.google.com/solutions/continuous-delivery?hl=ja

さらに、CDの観点ではカナリアデプロイやBlue/Greenデプロイなどのデプロイ戦略も重要となります。これに関する記事は以下公式ドキュメントを参考にしてください。

https://cloud.google.com/architecture/application-deployment-and-testing-strategies?hl=ja

## SREのプラクティスをサービスに適用
ここではSREとして必要な考え方についてキーワードとともに簡単にまとめます。

### SLI、SLA、SLO
**SLI (サービスレベル指標)**  
SLIはサービスの動作を直接測定したもので、後述するSLOを満たしているのかの指標として使用します。SLOを満たすためには適切なSLIを選択する必要があります。

https://cloud.google.com/blog/products/management-tools/tune-up-your-sli-metrics-cre-life-lessons?hl=en

**SLA (サービスレベル契約)**   
SLAはユーザーとの間で合意したサービスレベルのことです。これを違反すると何らかのペナルティが課せられます。例えば、Google Cloudがユーザーに提示しているSLAを満たせなかった場合、ペナルティとしてユーザへ一部利用料の払い戻しなどが課せらます。

**SLO (サービスレベル目標)**  
システム可用性やレイテンシ、スループットなどサービスの信頼性を高めるために設定するサービスレベルのことです。ユーザーからの信頼を高めるためにはSLOを高く設定する必要がありますが、その分運用コストが高くなります。そのため、ユーザーが許容できる最低レベルの信頼性を定義して、それをSLOとして規定します。

上記3つについてはGoogle Cloudブログにも記事があるのでそちらもご確認ください。

https://cloud.google.com/blog/ja/products/devops-sre/sre-fundamentals-sli-vs-slo-vs-sla

### エラーバジェット
エラーバジェットとはユーザーが不満を感じるまでにたまったエラーの量を言います。前項でSLIについて述べましたが、[Googleの推奨](https://sre.google/resources/practices-and-processes/art-of-slos/)に従うとSLIはパーセンテージで表されることが多いです。このパーセンテージで表されたSLIを100から引いた値がエラーバジェットになります。エラーバジェットは余裕があるほど (少ないほど)良さそうに思えますが、SREとしてはエラーバジェットに余裕があるときは多少リスクを冒してでも新機能のリリースなどに着手すべきとしています。他で例えると、お金に余裕があるので新規事業やってみようか、というのが近いでしょうか。
以下にエラーバジェットについて書かれたGoogle Cloudブログを共有します。 

https://cloud.google.com/blog/ja/products/management-tools/sre-error-budgets-and-maintenance-windows

### トイルの自動化
[SREの本](https://sre.google/sre-book/eliminating-toil/)でトイルに関して以下のように述べられています。
>トイルとは、手作業、繰り返される、自動化が可能、戦術的、長期的な価値がない、サービスの成長に比例して増加する、といった特徴を持つ作業です。

簡単に言うと、自動化や業務から削除できるような無駄のある (非効率な) 作業のことを言います。このような作業を自動化することで、サービス拡大や新機能リリースのために本来やるべき業務に集中することができます。
以下にトイルに関するGoogle Cloudブログがありますので、こちらもご確認ください

https://cloud.google.com/blog/ja/products/gcp/identifying-and-tracking-toil-using-sre-principles

### キャパシティプランニング
リソースの割り当てや上限を必要な分だけに管理することを言います。サービスに負荷がかかるタイミングが分かれば、それに応じて事前にリソースをスケーリングさせます。これは逆もしかりで、負荷が小さい時はスケールダウン、スケールインしてリソースを減らします。

### インシデント時のコミュニケーション
SREでは誰の責任かを追及することはしません。トラブルが発生したら根本原因は追究しますが、誰が原因で発生したのかは重要ではなく、これからどうするのか、というアクションが重要視されます。そして、事後調査の結果を関係者に伝えます。

## サービスモニタリング戦略を実装
本セクションと次セクションでは主にCloud LoggingとCloud Monitoringを使用した運用監視について問われています。そのため、後半のよく出るサービスにある公式ドキュメントを以下に挙げた観点に注意して読むと良いと思います。

- Cloud Loggingを使用した構造化ログ・非構造化ログの収集
- ログレベル
- アプリケーションの指標の収集・分析
- ログからカスタム指標作成ダッシュボード作成
- ダッシュボードのフィルタ・共有
- アラートの構成
- SLO・SLIに基づくアラートポリシー
- データアクセスログ有効化
- VPCフローログ有効化
- 基本ログフィルタ/高度なログフィルタ
- プロジェクトレベル/組織レベルのエクスポート
- センシティブデータのフィルタリングと秘匿化

## サービスパフォーマンスの最適化
本セクションではサービスパフォーマンスを測定するGoogle Cloudサービスについてやパフォーマンス問題の特定に関して問われます。出題されやすいGoogle Cloudサービスについては次項を参照してください。ここでは本セクションで問われやすい観点についてまとめています。

- コンピューティングリソースに関するトラブルシューティング
- アプリケーションのデプロイ時間とランタイムに関するトラブルシューティング
- ネットワークに関するトラブルシューティング
- デバッグツールの実装
- Spot仮想マシンや確約利用割引、継続利用割引による費用最適化
- ネットワークティア

## よく出るサービス
| サービス | 公式ドキュメント |
| :-: | :-: |
| Artifact Registry | https://cloud.google.com/artifact-registry/docs/overview?hl=ja |
| Binary Authorization | https://cloud.google.com/binary-authorization/docs/overview?hl=ja |
| Cloud Build | https://cloud.google.com/build/docs/overview?hl=ja |
| Cloud Deploy | https://cloud.google.com/deploy/docs/overview?hl=ja |
| Cloud Logging | https://cloud.google.com/logging/docs/overview?hl=ja |
| Cloud Monitoring | https://cloud.google.com/monitoring/docs/monitoring-overview?hl=ja |
| Cloud Profiler | https://cloud.google.com/profiler/docs/about-profiler?hl=ja |
| Cloud Source Repository | https://cloud.google.com/source-repositories/docs?hl=ja |
| Cloud Trace | https://cloud.google.com/trace/docs/overview?hl=ja |

# 勉強法
私が勉強した方法を一例として紹介します。
1. [試験ガイド](https://cloud.google.com/certification/guides/cloud-devops-engineer?hl=ja)を読む
2. Qiitaの受験対策記事や[G-gen](https://blog.g-gen.co.jp/entry/professional-cloud-devops-engineer)で試験でよく問われることを押さえる
3. [模擬試験](https://docs.google.com/forms/d/e/1FAIpQLSeHlfS9VksepK1crk8WIWTJW_kR1Gti8uf3_w8mfqU1fBNDHw/viewform?usp=preview&hl=ja)を受験する
4. [Udemy](https://www.udemy.com/course/gcp-professional-cloud-devops-engineer-practice-exam/#reviews)などの問題集を利用して知識強化を図る

SREに関しては、[このリンク](https://sre.google/books/)からオンラインであれば読むことが出来るので、さらに学習したい人はこちらもご参照ください。ただし中味は英語です。。

# まとめ
以上がProfessional Cloud DevOps Engineer合格に向けた要点です。この内容がこれからProfessional Cloud DevOps Engineerを目指される方の参考になれば幸いです。  
また、私が別で書いたGoogle Cloud認定資格11種の難易度などについての記事もございますので、こちらも参照ください。

https://qiita.com/yutakon/items/73fa3e853e60620fd777