Google Cloud 認定 Professional Cloud Architect 本番レベル問題 Part7 19~21問目（概要欄に問題集のリンクあり）

## この記事の目的
Clouds StarterがKindle・Udemyにてしている問題集の一部を公開します。
この記事の問題を解くことで、本番レベルの問題に慣れるだけでなく、どういった観点が本番で問われるかを確認することができます。

## 本シリーズのリンク
Part6：https://qiita.com/clouds-starter/items/5f0ff0e3974f2b36605e
Part8：https://qiita.com/clouds-starter/items/9effb95060847ac9a101

## 問題集（Udemy・Kindle）
### Udemy 
【Google Cloud】
Associate Cloud Engineer：https://www.udemy.com/course/google-cloud-associate-cloud-engineer-z/?referralCode=6F46C7AAC19A25BE1728
Professional Cloud Architect：https://www.udemy.com/course/google-cloud-professional-cloud-architect-i/?referralCode=2533A3214C4439F57A42
Professional Data Engineer：https://www.udemy.com/course/google-cloud-professional-data-engineer-s/?referralCode=B50B6D7F8849CCCF6B6E

【AWS】
Cloud Practitioner：https://www.udemy.com/course/2022aws-10-650/?referralCode=6B63C1D36EA602B66A02
Machine Learning：https://www.udemy.com/course/aws-30-b/?referralCode=62C2C02B9127E6DFE9F6

### Kindle
Google Cloud認定Professional Cloud Architect：https://amzn.to/3GQw2XT
Google Cloud認定Professional Data Engineer：https://amzn.to/339Az9Z

その他問題集：
https://amzn.to/34LKAu9

##問題（#19~#21)
####Q19：
あなたは、Compute Engine上で動作するアプリケーションの全体設計しています。ゾーン障害が発生した場合、アプリケーションは別のゾーンで最新のアプリケーションデータを使ってできるだけ早く復旧させる必要があります。あなたは、この要件を満たすためにソリューションを設計する必要があります。
要件を達成するためにするべきことは何ですか？

A.  アプリケーションデータの入ったディスクにスナップショットのスケジュールを作成する。ゾーン障害が発生するたびに、最新のスナップショットを使用して同じゾーンのディスクを復元する。
B.  アプリケーション用のインスタンステンプレートでCompute Engineインスタンスを構成し、アプリケーションデータにはリージョナル永続ディスクを使用する。ゾーン障害が発生するたびに、インスタンステンプレートを使用して、同じリージョン内の別のゾーンでアプリケーションをスピンアップする。アプリケーションデータには、リージョンの永続ディスクを使用する。
C.  アプリケーションデータの入ったディスクのスナップショットスケジュールを作成する。ゾーン障害が発生するたびに、最新のスナップショットを使用して、同じリージョン内の別のゾーンのディスクを復元する。
D.  アプリケーション用のインスタンステンプレートでCompute Engineインスタンスを構成し、アプリケーションデータ用にリージョナル永続ディスクを使用する
E.   アプリケーション用のインスタンステンプレートでCompute Engineインスタンスを構成し、アプリケーションデータにはリージョンの永続ディスクを使用する。アプリケーションデータには、リージョンの永続ディスクを使用する。
 

#####解説：
ゾーン障害に対するレジリエンスを確保した構成が必要になります。

重要になってくる観点は、Compute Engineで使用されている永続ディスクのレジリエンスをどのように確保するか、という点です。
この点を解決するためにはリージョナル永続ディスクを使用する必要があります。

リージョナル永続ディスクは、リージョン内の2つのゾーン間でデータの同期レプリケーションを提供するストレージオプションです。
リージョナル永続ディスクは、Compute EngineにHAサービスを実装する際に使用する良い選択肢になります。

したがって正解は以下の通りです。
「アプリケーション用のインスタンステンプレートでCompute Engineインスタンスを構成し、アプリケーションデータにはリージョナル永続ディスクを使用する。ゾーン障害が発生するたびに、インスタンステンプレートを使用して、同じリージョン内の別のゾーンでアプリケーションをスピンアップする。アプリケーションデータには、リージョンの永続ディスクを使用する。」

#####参照：
https://cloud.google.com/compute/docs/disks/high-availability-regional-persistent-disk

#####正解： B


####Q20：
【ケーススタディ問題】この質問については、[TerramEarth](https://cloud.google.com/certification/guides/cloud-architect/casestudy-terram-earth)のケーススタディを参照してください。
あなたはTerramEarthのマイクロサービスベースのアプリケーションを構築しています。このアプリケーションはDockerコンテナをベースにしています。Googleが推奨するプラクティスに従い、アプリケーションを継続的に構築し、成果物を保存したいと考えています。
要件を達成するためにするべきことは何ですか？

A.  新しいソース変更に対してCloud Buildでトリガーを構成する。Cloud Buildを起動して、各マイクロサービスのコンテナイメージを構築し、コードコミットハッシュを使ってタグ付けする。そのイメージをコンテナレジストリにプッシュする
B.  新しいソースの変更に対して、Cloud Buildにトリガーを設定する。トリガーはビルドジョブを起動し、マイクロサービス用のコンテナイメージをビルドする。イメージにバージョン番号をタグ付けして、Cloud Storageにプッシュする
C.  1分ごとにレポをチェックするSchedulerジョブを作成する。新しい変更があった場合、Cloud Buildを起動してマイクロサービス用のコンテナ・イメージを構築する。現在のタイムスタンプを使用してイメージにタグ付けし、コンテナ・レジストリにプッシュする
D.  新しいソース変更に対してCloud Buildでトリガーを構成する。Cloud Buildを起動してコンテナ・イメージを1つ構築し、イメージに「latest」というラベルを付けます。そのイメージをコンテナレジストリにプッシュする

#####解説：
Google Cloudには、Artifact RegistryとContainer Registryというコンテナイメージを保存・管理するためのサービスがあります。
これらを使用することで、アプリケーションのソースコードおよびその成果物を管理することができます。

管理する際のベストプラクティスとしては、コードコミットハッシュを使ってタグづけをすることです。
これによって、バージョン管理を自動化することが可能になります。
一方で「Latest」というタグを付けることは、コードや成果物が常に上書きされてしまうため不適切です。

したがって正解は以下の通りです。
「A.新しいソース変更に対してCloud Buildでトリガーを構成する。Cloud Buildを起動して、各マイクロサービスのコンテナイメージを構築し、コードコミットハッシュを使ってタグ付けする。そのイメージをコンテナレジストリにプッシュする」

#####参照：
https://cloud.google.com/architecture/best-practices-for-building-containers#tagging_using_semantic_versioning
https://cloud.google.com/architecture/best-practices-for-building-containers#tagging_using_the_git_commit_hash

#####正解： A


####Q21：
あなたの会社は、Linux RHEL 6.5+の仮想マシンをリフト＆シフト移行することを計画しています。仮想マシンは、オンプレミスのVMware環境で稼働しています。Googleが推奨する方法に従って、それらをCompute Engineに移行したいと考えています。
要件を達成するためにするべきことは何ですか？

A. 
1.アプリケーションのリストとその依存関係に基づいて、移行計画を定義する。
2.Migrate for Compute Engineを使用して、すべての仮想マシンを個別にCompute Engineに移行する
B. 
1.現在のVMware環境で稼働している仮想マシンの評価を行う。
2.すべてのディスクのイメージを作成するCompute Engine上のディスクをインポートする
3.ブートディスクがインポートしたものである標準的な仮想マシンを作成する。
C. 
1.現在のVMware環境で稼働している仮想マシンの評価を行う。
2.移行プランを定義し、Migrate for Compute Engineの移行RunBookを準備し、移行を実行する
D. 
1.現在のVMware環境で稼働している仮想マシンの評価を行う。
2.選択したすべての仮想マシンにサードパーティ製エージェントをインストールする。
3. すべての仮想マシンをCompute Engineに移行する
 

#####解説：
ベストプラクティスに基づく適切な移行方法を選択する必要があります。
仮想マシンを個別にCompute Engineに移行することは、非推奨な方法です。
クラウドのマイグレーションを行う場合、1つまたは複数のアプリケーション/ワークロードをグループ化した「ウェーブ」単位でマイグレーションを行うことになります。
マシンを個別に移動させると、依存関係などが壊れてしまうからです。
これは業界の標準的なやり方です。

VMの依存関係等を踏まえた適切なマイグレーションの方法はRunBookを用いた移行です。
Runbookは、移行するVM、その順序、および追加の構成パラメーターを定義します。

したがって正解は以下の通りです。
「1.現在のVMware環境で稼働している仮想マシンの評価を行う。
2.移行プランを定義し、Migrate for Compute Engineの移行RunBookを準備し、移行を実行する」

#####参照：
https://cloud.google.com/architecture/migrating-vms-migrate-for-compute-engine-getting-started

#####正解： C