Google Professional Cloud Developer 1-10

表示モード
画像位置
文字位置
STATUS FILTER

表示する理解度を選択

読み込み中...
Q1Google Professional Cloud Developer

A. Apigeeのクォータ(Quota)ポリシーを、Synchronous設定をfalseにして構成します。予約のたび、または24時間が経過したときにクォータをリセットします。
B. 顧客IDをキーとするFirestoreドキュメントにクエリカウンターを保存します。予約が発生したとき、または24時間が経過したときにカウンターをゼロにリセットします。ユーザーのカウンターが1000を超えている場合は検索リクエストを拒否します。
C. 各顧客の検索リクエスト数をカウントするクエリカウンターをメモリ(インメモリ)に保存します。予約が発生したとき、または24時間が経過したときにカウンターをゼロにリセットします。ユーザーのカウンターが1000を超えている場合は検索リクエストを拒否します。
D. BigQueryに、検索リクエストと予約リクエストごとに顧客IDと現在時刻を含むテーブル行を保存します。過去24時間に行われた検索および予約リクエストの数をテーブルに対してクエリします。過去の検索リクエスト数が過去の予約リクエスト数の1000倍を超える場合は、検索リクエストを拒否します。

回答
正解: A

ApigeeのQuotaポリシーでSynchronous設定をfalseにすると、クォータのカウントが非同期で処理され、各リクエストでカウンター更新の完了を待たずに応答できます。
設問は「正確に1000回」よりもAPIの速度を優先しており、非同期カウントは多少の誤差を許容しつつ高いパフォーマンスを実現します。
予約発生時や24時間経過時のクォータリセットもポリシー側で構成できます。
BigQueryやFirestoreを用いる方式はカウントが厳密ですが、リクエストごとに読み書きが発生し速度面で不利です。
インメモリ方式は複数インスタンス間でカウンターを共有できず信頼性に欠けます。

Apigee Quota policy(公式ドキュメント)

Q2Google Professional Cloud Developer

A. Cloud Run
B. マネージドインスタンスグループを使用するCompute Engine
C. アンマネージドインスタンスグループを使用するCompute Engine
D. クラスタオートスケーリングを使用するGoogle Kubernetes Engine

回答
正解: A

Cloud Runはリクエスト量に応じて自動的にスケールし、トラフィックがないときはゼロまでスケールインできるフルマネージドのサーバーレスプラットフォームです。
予測不能なトラフィックと急増を効率的に処理しつつ、使用した分だけ課金されるため過剰プロビジョニングを最小化でき、コスト最適化の要件に最も適合します。
Compute Engine(マネージド/アンマネージド)はVM単位のスケールでゼロまで縮小できず、起動も比較的遅いため不向きです。
GKEのクラスタオートスケーリングはノード追加に時間がかかり、過剰プロビジョニングが発生しやすい点で要件に劣ります。

Cloud Run の概要(公式ドキュメント)

Q3Google Professional Cloud Developer

A. デプロイ済みの仮想マシンをシャットダウンし、ディスクをエクスポートして、ローカルにマウントすることで起動ログにアクセスします。
B. ローカルにPackerをインストールしてCompute Engineイメージをローカルでビルドし、自分の個人用Google Cloudプロジェクトで実行します。
C. 新しい機能ブランチを作成し、ビルドチームにイメージの再ビルドを依頼します。
D. シリアルポートを使用してCompute EngineのOSログを確認し、シリアルポートへのアクセスを確認するためにCloud Loggingのログを確認します。

回答
正解: D

VMが起動しない問題を調査する際、Googleが推奨する手段はシリアルコンソール(シリアルポート出力)の確認です。
起動に失敗してもシリアルポート出力はブートプロセスのメッセージを記録するため、起動失敗の原因を直接特定できます。
シリアルポート出力はCloud Loggingに転送して保存・確認することも可能です。
ディスクをローカルにマウントする方法(A)は手間が多く、起動段階のログを得にくい場合があります。
ローカルでの再ビルド(B)や再依頼(C)は原因の調査そのものにはつながりません。

シリアルコンソールを使用したトラブルシューティング(公式ドキュメント)

Q4Google Professional Cloud Developer

A. 1. マネージドインスタンスグループを作成し、静的コンテンツを各仮想マシン(VM)に複製します。2. 外部HTTP(S)ロードバランサを作成します。3. Cloud CDNを有効にし、トラフィックをマネージドインスタンスグループに送信します。
B. 1. アンマネージドインスタンスグループを作成し、静的コンテンツを各VMに複製します。2. 外部HTTP(S)ロードバランサを作成します。3. Cloud CDNを有効にし、トラフィックをアンマネージドインスタンスグループに送信します。
C. 1. StandardストレージクラスのリージョナルなCloud Storageバケットを作成し、静的コンテンツをバケットに格納します。2. 外部IPアドレスを予約し、外部HTTP(S)ロードバランサを作成します。3. Cloud CDNを有効にし、トラフィックをバックエンドバケットに送信します。
D. 1. StandardストレージクラスのマルチリージョンのCloud Storageバケットを作成し、静的コンテンツをバケットに格納します。2. 外部IPアドレスを予約し、外部HTTP(S)ロードバランサを作成します。3. Cloud CDNを有効にし、トラフィックをバックエンドバケットに送信します。

回答
正解: D

静的コンテンツの配信では、VMを運用するよりもCloud Storageバケットをバックエンドにする方が管理オーバーヘッドを大幅に削減できます。
高可用性にはマルチリージョンのCloud Storageバケット、グローバルなアクセスには外部HTTP(S)ロードバランサ、低レイテンシ配信にはCloud CDNが最適な組み合わせです。
リージョナルバケット(C)は単一リージョンに限定され可用性で劣ります。
インスタンスグループ方式(A・B)はVMの複製・管理が必要で、要件である管理負荷の最小化に反します。

Cloud Storage バケットでの Cloud CDN 設定(公式ドキュメント)

Q5Google Professional Cloud Developer

A. 元のCloud Functionでcloudfunctions.functions.sourceCodeSet操作がCloud Audit Logsによって検出されたときにトリガーされる新しいCloud Functionを作成します。新しい関数にモックリクエストを送信して機能を評価します。
B. Cloud Functionのコピーを作成し、コードをHTTPトリガー型に書き換えます。HTTPエンドポイントをトリガーして新しいバージョンを編集・テストします。新しい関数にモックリクエストを送信して機能を評価します。
C. Functions Frameworkライブラリをインストールし、localhostでCloud Functionを構成します。関数のコピーを作成し、新しいバージョンに編集を加えます。curlを使って新しいバージョンをテストします。
D. Google CloudコンソールでCloud Functionのコピーを作成します。コンソールのインラインエディタを使って新しい関数のソースコードを変更します。新しい関数を呼び出すようにWebアプリケーションを変更し、本番環境で新しいバージョンをテストします。

回答
正解: C

Functions Framework(ファンクションフレームワーク)は、Cloud Functionのコードをローカル環境で実行・テストするためにGoogleが提供する公式ライブラリです。
ローカルでcurlなどを使って関数を呼び出して検証できるため、デプロイを待たずに開発サイクルを大幅に高速化でき、これがGoogle推奨のベストプラクティスです。
本番環境でのテスト(D)はリスクが高く推奨されません。
HTTPトリガー型への書き換え(B)や監査ログ連携(A)は本来のトリガー条件を再現できず、余計な複雑さを招きます。

Functions Framework(公式ドキュメント)

Q6Google Professional Cloud Developer

A. 1. アプリケーションとインフラのソースコードをGitリポジトリに格納します。2. Cloud Buildを使用してTerraformでアプリケーションインフラをデプロイします。3. パイプラインのステップとしてアプリケーションをCloud Functionにデプロイします。
B. 1. Google Cloud MarketplaceからJenkinsをデプロイし、Jenkinsで継続的インテグレーションパイプラインを定義します。2. パイプラインのステップで、Gitリポジトリからアプリケーションのソースコードを取得します。3. パイプラインのステップで、アプリケーションのソースコードをApp Engineにデプロイします。
C. 1. Cloud Buildで継続的インテグレーションパイプラインを作成し、Deployment Managerテンプレートを使ってアプリケーションインフラをデプロイするようにパイプラインを構成します。2. 最新のアプリケーションソースコードを含むコンテナを作成するパイプラインステップを構成します。3. パイプラインのステップとしてコンテナをCompute Engineインスタンスにデプロイします。
D. 1. gcloudコマンドを使用してアプリケーションインフラをデプロイします。2. Cloud Buildを使用して、アプリケーションソースコードの変更に対する継続的インテグレーションパイプラインを定義します。3. Gitリポジトリからアプリケーションソースコードを取得し、コンテナ化されたアプリケーションを作成するパイプラインステップを構成します。4. パイプラインのステップとして、新しいコンテナをCloud Runにデプロイします。

回答
正解: A

インフラの作成・変更をバージョン管理し監査可能にするには、Infrastructure as Code(IaC)をGitで管理する構成が必要です。
ソースコードとインフラ定義をGitに格納し、Cloud BuildとTerraformでデプロイ、サーバーレスのCloud Functionに展開する構成(A)が全要件を満たします。
gcloudコマンド(D)は宣言的なバージョン管理ができず、監査要件に反します。
Jenkins(B)はGoogleマネージドではなく自己管理が必要です。
Compute Engineへのデプロイ(C)はサーバーレス要件を満たしません。

Terraform のベストプラクティス(公式ドキュメント)

Q7Google Professional Cloud Developer

A. Cloud KMSを専用のプロジェクトでプロビジョニングします。
B. Cloud KMSプロジェクトにオーナーを割り当てません。
C. 鍵が使用されるプロジェクト内でCloud KMSをプロビジョニングします。
D. Cloud KMSの鍵が使用されるプロジェクトのオーナーに、roles/cloudkms.admin ロールを付与します。
E. Cloud KMSの鍵が使用されるプロジェクトのオーナーとは別のユーザーに、Cloud KMSプロジェクトのオーナーロールを付与します。

回答
正解: A, B

職務の分離を実現するには、鍵の管理と鍵の利用を別の権限・別のプロジェクトに分けることが重要です。
Cloud KMSを専用プロジェクトに配置し(A)、そのプロジェクトにはオーナーを割り当てず(B)、組織レベルの管理者でIAMポリシーのみを制御するのがGoogle推奨の構成です。
オーナーがいないことで、鍵を直接管理・使用できる単一の特権者を排除できます。
鍵利用プロジェクトと同居させる(C)構成や、利用側オーナーにKMS管理ロールを付与する(D)構成は分離原則に反します。

Cloud KMS の職務の分離(公式ドキュメント)

Q8Google Professional Cloud Developer

A. ネットワークポリシー(Network Policies)を使用して、アプリケーション間のトラフィックをブロックします。
B. Istioをインストールし、アプリケーションの名前空間でプロキシのインジェクションを有効にし、mTLSを有効にします。
C. アプリケーション内で信頼できるネットワーク範囲を定義し、それらのネットワークからのトラフィックのみを許可するようにアプリケーションを構成します。
D. 自動化されたプロセスを使用してLet’s EncryptからアプリケーションのSSL証明書をリクエストし、それをアプリケーションに追加します。

回答
正解: B

サービスメッシュ(Istio/現在はGoogle管理のCloud Service Mesh)はサイドカープロキシをインジェクションすることで、アプリケーションコードを変更せずに相互TLS(mTLS)による自動暗号化を実現します。
プロキシインジェクションとmTLSを有効にするだけで、クラスタ内の全トラフィックを最小限の変更で暗号化でき、Googleサポートも維持できます。
ネットワークポリシー(A)はトラフィックを制御しますが暗号化はしません。
アプリ内での信頼範囲定義(C)やLet’s Encrypt証明書の手動追加(D)はアプリ変更が大きく要件に反します。

Cloud Service Mesh の mTLS(公式ドキュメント)

Q9Google Professional Cloud Developer

A. gsutil cp [LOCAL_OBJECT] gs://[DESTINATION_BUCKET_NAME]/
B. gcloud cp [LOCAL_OBJECT] gs://[DESTINATION_BUCKET_NAME]/
C. hadoop fs cp [LOCAL_OBJECT] gs://[DESTINATION_BUCKET_NAME]/
D. gcloud dataproc cp [LOCAL_OBJECT] gs://[DESTINATION_BUCKET_NAME]/

回答
正解: A

ローカルのファイルをCloud Storageにコピーする標準的なコマンドは gsutil cp です。
gsutil cp [ローカルオブジェクト] gs://[バケット名]/ の構文でオンプレミスからCloud Storageへ直接アップロードでき、これが正しいコマンドです。
gcloud cp や gcloud dataproc cp はオブジェクトコピー用コマンドとして存在しません。
hadoop fs cp はHDFS内の操作用で、ローカルからの初回アップロードには適しません。
なお現在はより新しい gcloud storage cp も利用できますが、選択肢の中ではgsutil cpが正解です。

gsutil cp コマンド(公式ドキュメント)

Q10Google Professional Cloud Developer

A. クラスタ通知(cluster notifications)をPub/Subトピックに送信するように構成します。
B. google_cloud_release_notes BigQueryデータセットに対してスケジュールされたクエリを実行します。
C. 利用可能なバージョンをGKE APIに対してクエリします。
D. GKEリリースノートの日次サマリーを受け取るRSS購読を作成します。

回答
正解: A

GKEには、特定のクラスタに影響するアップグレード情報やセキュリティ速報などのイベントをPub/Subトピックに配信する「クラスタ通知」機能があります。
クラスタ通知をPub/Subトピックに送信するよう構成すると、対象クラスタに関連するイベントをリアルタイムかつ自動的に受け取れます。
BigQueryのスケジュールクエリ(B)やGKE APIへのクエリ(C)は能動的なポーリングが必要です。
RSS購読(D)は全体のリリースノートであり、自分のクラスタに固有のイベント通知には適しません。

クラスタ通知(公式ドキュメント)