WEB問題集
Cloud Run サービスでデータベース接続文字列を機密として扱い、再デプロイなしで定期ローテーションを反映したい。最適な実装はどれか。
正解:A
正解の根拠
Cloud Run はリビジョン作成時に Secret Manager の特定バージョン (例: latest) を環境変数またはボリュームとしてマウントできる。latest 参照かつアプリが起動時に読むなら、シークレットの新バージョン作成時にリビジョンを再作成するだけで再ビルド不要。
実装手順
- Secret Manager にシークレット作成
- Cloud Run サービスアカウントに
roles/secretmanager.secretAccessor付与 gcloud run services update --update-secrets=DB_URL=db-url:latest
不正解の理由
| 選択肢 | 問題点 |
|---|---|
| B | Cloud Storage は機密管理の専用機能 (バージョン管理/IAM粒度/監査) が弱い |
| C | イメージ埋め込みはローテーションのたびに再ビルドが必要で 12-Factor 違反 |
| D | Firestore は機密保管用途では監査・バージョニング機能が不足 |
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不正解の理由
| 選択肢 | 問題点 |
|---|---|
| A | CPU と HTTP/2 は同時処理数とは独立した設定 |
| B | min-instances は常時起動数で同時処理数を変えない |
| D | max-instances は最大インスタンス数で1インスタンスあたりの並列性ではない |
Cloud Run のコールドスタート時に起動処理が重く 504 が散発する。一時的に CPU を増強して起動時のみ高速化したい。
正解:B
正解の根拠
Startup CPU boost はコンテナ起動の最初の約 10 秒間だけ CPU を最大 2 倍に増強する機能。コールドスタート時間短縮に直接効果。
gcloud run deploy svc --cpu-boost不正解の理由
| 選択肢 | 問題点 |
|---|---|
| A | min-instances=1 はコスト増。起動時間短縮策ではなく回避策 |
| C | CPU always allocated はリクエスト外 CPU 用途。起動高速化ではない |
| D | CDN は静的キャッシュ用途。起動処理本体は短縮されない |
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不正解の理由
| 選択肢 | 問題点 |
|---|---|
| C | Cloud Run サービスの max-instances はリクエスト駆動。バッチ向けでない |
| D | Workflows は可能だが余分なオーケストレータでありシンプルな定期ジョブには冗長 |
コンテナ ベスト プラクティスとしてイメージサイズと起動を最適化したい。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"]不正解の理由
| 選択肢 | 問題点 |
|---|---|
| A | ubuntu:latest はサイズが大きくビルドツール同梱は本番用途で過剰 |
| B | ソースと Maven 同梱はサイズと攻撃面が増える |
| D | JDK 全部入りは JRE のみで十分な本番では肥大化する |
