【PCD】WEB問題集:アプリケーションの構築編

WEB問題集

PCD#126(building)

Cloud Run サービスでデータベース接続文字列を機密として扱い、再デプロイなしで定期ローテーションを反映したい。最適な実装はどれか。

正解:A

正解の根拠

Cloud Run はリビジョン作成時に Secret Manager の特定バージョン (例: latest) を環境変数またはボリュームとしてマウントできる。latest 参照かつアプリが起動時に読むなら、シークレットの新バージョン作成時にリビジョンを再作成するだけで再ビルド不要。

実装手順

  1. Secret Manager にシークレット作成
  2. Cloud Run サービスアカウントに roles/secretmanager.secretAccessor 付与
  3. gcloud run services update --update-secrets=DB_URL=db-url:latest

不正解の理由

選択肢問題点
BCloud Storage は機密管理の専用機能 (バージョン管理/IAM粒度/監査) が弱い
Cイメージ埋め込みはローテーションのたびに再ビルドが必要で 12-Factor 違反
DFirestore は機密保管用途では監査・バージョニング機能が不足

参考:Google Cloud Run ドキュメント

PCD#127(building)

Cloud Run サービスが Pub/Sub サブスクライバーから push を受ける。1 インスタンスあたり同時 80 リクエストを処理させたい。設定すべきものは。

正解:C

正解の根拠

Cloud Run の --concurrency は 1 インスタンスが同時処理するリクエスト数を制御する。同時 80 リクエスト処理は --concurrency=80 がそのものずばりの設定。

gcloud run deploy svc --concurrency=80 --cpu=2 --memory=1Gi

不正解の理由

選択肢問題点
ACPU と HTTP/2 は同時処理数とは独立した設定
Bmin-instances は常時起動数で同時処理数を変えない
Dmax-instances は最大インスタンス数で1インスタンスあたりの並列性ではない

参考:Google Cloud Run ドキュメント

PCD#128(building)

Cloud Run のコールドスタート時に起動処理が重く 504 が散発する。一時的に CPU を増強して起動時のみ高速化したい。

正解:B

正解の根拠

Startup CPU boost はコンテナ起動の最初の約 10 秒間だけ CPU を最大 2 倍に増強する機能。コールドスタート時間短縮に直接効果。

gcloud run deploy svc --cpu-boost

不正解の理由

選択肢問題点
Amin-instances=1 はコスト増。起動時間短縮策ではなく回避策
CCPU always allocated はリクエスト外 CPU 用途。起動高速化ではない
DCDN は静的キャッシュ用途。起動処理本体は短縮されない

参考:Google Cloud Run ドキュメント

PCD#129(building)

Cloud Run jobs を毎日 03:00 JST に実行したい。1 ジョブ内で 100 タスクを並列実行し最大同時 10 タスク。最適な構成は。

(2つ選択)

正解:A, B

正解の根拠

Cloud Run jobs はバッチ実行向け。--tasks でタスク数、--parallelism で同時並列数を指定。Cloud Scheduler から HTTP で jobs.run を叩くのが標準パターン。

gcloud run jobs create daily --tasks=100 --parallelism=10
gcloud scheduler jobs create http daily-trigger 
  --schedule="0 3 * * *" --time-zone=Asia/Tokyo 
  --uri=https://run.googleapis.com/.../jobs/daily:run

不正解の理由

選択肢問題点
CCloud Run サービスの max-instances はリクエスト駆動。バッチ向けでない
DWorkflows は可能だが余分なオーケストレータでありシンプルな定期ジョブには冗長

参考:Google Cloud Run ドキュメント

PCD#130(building)

コンテナ ベスト プラクティスとしてイメージサイズと起動を最適化したい。Java アプリのビルドで採用すべき手法は。

正解:C

正解の根拠

Google の distroless イメージは OS パッケージや shell を含まず最小構成。多段ビルド (multi-stage build) でビルド成果物のみコピーすることで攻撃面とサイズを削減。

FROM maven:3-eclipse-temurin-17 AS build
COPY . . 
RUN mvn package
FROM gcr.io/distroless/java17
COPY --from=build /app/target/app.jar /app.jar
CMD ["/app.jar"]

不正解の理由

選択肢問題点
Aubuntu:latest はサイズが大きくビルドツール同梱は本番用途で過剰
Bソースと Maven 同梱はサイズと攻撃面が増える
DJDK 全部入りは JRE のみで十分な本番では肥大化する

参考:Google Cloud Run ドキュメント