この記事では、GCPの認定試験であるProfessional Cloud Developerの模擬試験の解説をします。 模擬試験終了後に簡易的な解説は表示されますが、もっと汎用的な関連知識を深めることを目的としています。目次 Toggle設問1:PubSubのスケーラビリティと分析要件に関する出題設問2:GCPへのデータ移行に関する出題設問3:オペレーションスイート(旧Stackdriver)の各サービスの機能理解に関する出題設問4:Cloud Buildのビルド構成に関する出題設問5:Kubernetesのオートスケールに関する出題設問6:Error Reportingに表示される条件に関する出題設問7:RDBMSのデータ移行に関する出題設問8:GCPが関係ない出題設問9:GCPが関係ない出題設問10:Cloud SQLへの接続に関する出題設問11:ログの分析アーキテクチャに関する出題設問12:BigTableのプライマリキー設計に関する出題設問13:Spannerのユースケースに関する出題設問14:リアルタイムデータを分析するアーキテクチャに関する出題設問1:PubSubのスケーラビリティと分析要件に関する出題非常に多くの投票が行われるという表現から、投票データを保存する領域にはスケーラビリティが求められていることがわかります。 分析やレポートというのが、SQLやグラフでの可視化であることを想像すると、最終的にデータを保存するのはBigQueryが適切です。 間がDataflowなのかCloud Functionsなのかは今回は問題ではありません。余談ですが、Dの選択肢も気合があればできるはずでが、Firebase Authenticationの制限などの細かいことを比較的考えずに済むより優れたアーキテクチャを選択できることを要求されていると思います。設問2:GCPへのデータ移行に関する出題PostgreSQLのデータ移行先としてCloud SQLを選択することは簡単です。 すると、BigTableかFirestoreの2択に絞れるわけですが、今回は費用対効果の高い方法が必要であるため、Firestoreを選択します。設問3:オペレーションスイート(旧Stackdriver)の各サービスの機能理解に関する出題オペレーションスイートにはLoggingやMonitoringなど、複数のサービスがありますが、それらの役割を理解しましょう。 Traceはコードの実行時間を計測しボトルネックを検出します。 Profilerはコードがどの程度リソースを消費しているのかを収集します。設問4:Cloud Buildのビルド構成に関する出題Cloud Buildでのビルド構成に記述した各ビルドstepは、エラーが発生した時点で終了し、その後に記述されたビルドstepは実行されません。 他のCIツールには失敗を無視して次のstepを実行するようなオプションがあったりしますが、Cloud Buildにその機能はありません。 そのため、力技で実装する方法を問われています。この問題のために理解すべきことは、各ビルドstepは環境変数を引き継がないことです。 これは、ビルドstepは毎回そのstepを実行するためにコンテナを起動してビルドタスクを実行するためです。 そのため、引き継がれるファイルに状態を保存して、後のビルドstepでその状態を参照するのがこの問題では適切です。設問5:Kubernetesのオートスケールに関する出題Kubernetesでは主に2つのスケールがあることを理解しましょう。 1つはPodのスケールであり、もう1つはクラスタを構成するNodeのスケールです。 更にPodのスケールにはHorizontalとVerticalの2種類あるのですが、問題ではレプリカの数を自動調整するとあるのでHorizontal Pod Autoscaler(HPA)を利用します。 HPAでPodを増やしていく場合に、新たにPodをスケジュールするためにNodeのcpuやmemoryが不足していればNodeを自動的に増やしたり、逆に利用されていないNodeを削減するのがクラスタオートスケーラーです。設問6:Error Reportingに表示される条件に関する出題App Engineでは、標準エラー出力に吐き出されたメッセージがError Reportingに表示されるようになっています。 実行する環境によって、Error Reportingにエラーを表示する方法は異なるため、ドキュメントを一読しておきましょう。設問7:RDBMSのデータ移行に関する出題RDBMSをGCPに移行するにはCloud SQLを利用します。 アプリケーションの変更を最小限に抑えるためにも、他のデータベースを利用することはできません。設問8:GCPが関係ない出題特に解説することはありません。設問9:GCPが関係ない出題カナリアリリースを採用すれば、アプリケーションへのトラフィックの一部を新しいサービスへ割り当てられるため、安定版と開発版を併用できるとこの問題は考えています。 事例では、QAのために開発を止めているとあるので、カナリアリリースを採用することで開発版を頻繁に更新できるということでしょう。 また、アプリケーションのデプロイはインフラエンジニアが手動で行っているともあるので、このサイクルをCI/CDを利用して自動化することもリリース速度の向上に繋がります。設問10:Cloud SQLへの接続に関する出題Cloud SQL Proxyを利用すると、Proxy ClientとProxy Serverの間の通信が暗号化されるため、よりセキュアに接続することができます。 暗号化の要件がなければプライベートIP接続を利用することに問題はないのですが、より適切な(Googleが考えていそうな最強の)方法を選択するようにしましょう。設問11:ログの分析アーキテクチャに関する出題Cloud Loggingに出力されたログはBigQueryに取り込めるため、後の分析にも利用できます。設問12:BigTableのプライマリキー設計に関する出題BigTableでは、レコードのプライマリキーが辞書順で分散されていることがパフォーマンスを向上させるために最も重要なことです。 連続的な整数やタイムスタンプは辞書順で密集していますし、ハッシュ化されたキーは可読性を著しく損ねます。設問13:Spannerのユースケースに関する出題他のデータベースには無いCloud Spannerの特徴は主に次の点です。マルチリージョンの整合性SQLによるクエリリレーショナルデータベース勘違いされがちですが、Cloud SpannerはMySQLと互換性があるわけではありませんので、実際に問題文がやろうとしていることを実現するのは少しだけ苦労がありそうです。設問14:リアルタイムデータを分析するアーキテクチャに関する出題模試解説シリーズで何度このアーキテクチャを紹介したかわかりませんが、PubSub, Dataflow, BigQueryの組み合わせはデータ量のスケールに対応しつつSQLによる分析を行うための定番アーキテクチャです。後編はこちら