0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Professional Cloud DevOps Engineer 試験対策用チートシート

Last updated at Posted at 2025-09-15

試験概要

Google Cloud Professional Cloud DevOps Engineer認定試験は、実務重視のDevOps実装スキルを問う資格です。SRE(Site Reliability Engineering)の実践、CI/CDパイプラインの構築、監視・ロギング戦略の技術をカバーします。

最近のバージョンでは従来のSRE文化的側面よりも技術実装に重点を置いた改定が行われました。

:writing_hand: 試験概要と受験情報

基本的な試験情報

試験名称:Professional Cloud DevOps Engineer
受験料:200ドル(税別)※日本円で約3万円
試験時間:120分(2時間)
問題数:50-60問(複数選択式・複数選択肢式)
合格基準:合格/不合格のみ(数値スコア非表示)
有効期限:2年間

受験方法と要件

受験方法

  • オンライン監督試験(自宅・オフィス)
  • テストセンター受験

:bookmark_tabs: 学習中(Udemy講座)

:lifter_tone2: 試験範囲と出題比重

:alarm_clock: SRE(Site Reliability Engineering)の核心概念

SLI、SLO、SLAの定義と実装

Service Level Indicators(SLI)

  • サービスレベルの定量的測定指標
  • 主要指標:リクエスト待機時間、エラー率、システム処理能力、可用性
  • ベストプラクティス:平均値ではなくパーセンタイル(90th、99th、99.9th)を使用
# SLI設定例
availability_sli:
  good_total_ratio:
    good_service: 
      filter: 'resource.type="gce_instance" AND metric.label.response_code<"500"'
    total_service:
      filter: 'resource.type="gce_instance"'

Service Level Objectives(SLO)

  • SLIによって測定されるサービスレベルの目標値
  • 構造:「SLI ≤ 目標値」または「下限 ≤ SLI ≤ 上限」
  • 例:「Get RPCコールの99%が100ms以内に完了する」
  • 重要原則:イノベーションとデプロイ速度を確保するため常に100%未満に設定

Service Level Agreements(SLA)

  • SLOを満たさない場合の明示的・暗黙的な契約と結果
  • SLOとの違い:「満たされない場合の結果」の有無
  • 通常、財務上のペナルティ、返金、その他のビジネス上の結果を含む

エラーバジェット管理

エラーバジェットの計算

エラーバジェット = 100% - SLO目標パーセンテージ

実用例

  • 99.9%可用性SLO = 0.1%エラーバジェット
  • 30日間では約43分のダウンタイム許容

エラーバジェットポリシー

  • 消費率50%未満:通常運用
  • 消費率50-75%:監視強化、ポストモーテム要求
  • 消費率75-100%:デプロイ凍結、信頼性向上に集中

トイル削減戦略

トイルの定義(Google SRE)

  • 手動で反復的、永続的価値のない作業
  • サービスサイズに比例してスケール
  • 反応的であり、予防的でない
  • 自動化可能な作業

削減手法

  • 自動化:スクリプト、ワークフロー、自己修復システム
  • 排除:不要なプロセスや手動ステップの除去
  • 標準化:チーム全体での共通ツール・プロセス採用
  • セルフサービス:開発者による日常運用の自動化
  • 目標:SRE時間の50%未満に抑制

:bulb: CI/CDパイプライン構築の実践

Cloud BuildとCloud Deployの活用

Cloud Build設定例

# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/myapp:$BUILD_ID', '.']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/$PROJECT_ID/myapp:$BUILD_ID']
- name: 'gcr.io/cloud-builders/gke-deploy'
  args:
  - run
  - --filename=k8s/
  - --image=gcr.io/$PROJECT_ID/myapp:$BUILD_ID
  - --cluster=production-cluster
  - --location=us-central1-a

# Binary Authorization統合
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    gcloud container binauthz attestations sign-and-create \
      --artifact-url=gcr.io/$PROJECT_ID/myapp:$BUILD_ID \
      --attestor=production-attestor \
      --keyversion=projects/$PROJECT_ID/locations/global/keyRings/binauthz/cryptoKeys/attestor-key/cryptoKeyVersions/1

Cloud Deploy設定

# clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
  name: production-pipeline
serialPipeline:
  stages:
  - targetId: staging
    profiles: [staging]
  - targetId: production
    profiles: [production]
    strategy:
      canary:
        runtimeConfig:
          kubernetes:
            serviceNetworking:
              service: "my-service"
        canaryDeployment:
          percentages: [25, 50, 100]
          verify: true

GitOps実装方法

Pull型GitOps(推奨)

  • デプロイメントエージェントがGitリポジトリを継続的にポーリング
  • 望ましい状態と実際の状態を調整
  • セキュリティ強化(認証情報はクラスター内に保持)
  • 複雑なマルチクラスター環境に適合
  • 推奨ツール:ArgoCD、Flux、Config Connector

デプロイメント戦略の使い分け

ローリングデプロイメント

  • Kubernetesデフォルト戦略
  • 古いポッドを新しいポッドに段階的に置換
  • maxSurgemaxUnavailableで制御
  • リソースオーバーヘッド最小

Blue-Greenデプロイメント

  • 2つの同一環境(blue/green)を維持
  • トラフィックを瞬時に切り替え
  • ゼロダウンタイムデプロイメント
  • デプロイ期間中はリソースが2倍必要

Canaryデプロイメント

  • 古いバージョンから新しいバージョンに段階的にトラフィックシフト
  • リスク軽減と実ユーザーフィードバック収集
  • Google Cloud Deployが自動化機能を提供

:floppy_disk: 監視とロギングの包括的戦略

4つのゴールデンシグナル(Google SRE)

レイテンシ(Latency)

  • リクエスト処理時間
  • 重要:成功と失敗のレイテンシを区別
  • 高パーセンタイル(95th、99th、99.9th)を監視、平均値は不十分

トラフィック(Traffic)

  • システム需要の測定
  • Webサービス:HTTP requests/second
  • ストレージシステム:I/O operations/second
  • 他のシグナルを解釈するためのコンテキスト

エラー(Errors)

  • 失敗リクエストの割合
  • 明示的失敗:HTTP 500、例外
  • 暗黙的失敗:HTTP 200だが不正コンテンツ
  • インフラとアプリケーションレベルの検出が必要

サチュレーション(Saturation)

  • サービスの「満杯度」
  • 制約の多いリソース(CPU、メモリ、I/O、ネットワーク)に注目
  • システムは100%使用率前に性能劣化
  • 予測的指標:「データベースは4時間で満杯になる」

Cloud Monitoringでの実装

カスタムメトリクス作成

# Python例:カスタムメトリクス送信
from google.cloud import monitoring_v3

client = monitoring_v3.MetricServiceClient()
project_name = f"projects/{project_id}"

# カスタムメトリクス記録
series = monitoring_v3.TimeSeries()
series.metric.type = "custom.googleapis.com/my_metric"
series.resource.type = "gce_instance"
series.resource.labels["instance_id"] = "my-instance-id"

point = series.points.add()
point.value.double_value = 42.0
point.interval.end_time.GetCurrentTime()

client.create_time_series(name=project_name, time_series=[series])

アラートポリシー設定

# Monitoring Query Language (MQL) アラート例
displayName: "High Error Rate Alert"
conditions:
- displayName: "HTTP Error Rate > 5%"
  conditionThreshold:
    filter: 'resource.type="gce_instance" metric.type="compute.googleapis.com/instance/up"'
    comparison: COMPARISON_GT
    thresholdValue: 0.05
    duration: "300s"
alertStrategy:
  autoClose: "1800s"
notificationChannels:
- "projects/my-project/notificationChannels/slack-channel"

Cloud Loggingの最適化

構造化ログの推奨形式

{
  "severity": "ERROR",
  "timestamp": "2025-09-15T10:00:00Z",
  "message": "Database connection failed",
  "labels": {
    "service": "user-api",
    "version": "v1.2.3",
    "environment": "production"
  },
  "httpRequest": {
    "requestMethod": "GET",
    "requestUrl": "/api/users",
    "responseSize": "0"
  },
  "trace": "projects/my-project/traces/12345"
}

ログエクスポート設定

# BigQueryエクスポート(長期分析用)
gcloud logging sinks create bigquery-export \
    bigquery.googleapis.com/projects/my-project/datasets/logs_dataset \
    --log-filter='severity>=ERROR AND resource.type="gce_instance"'

# Cloud Storageエクスポート(アーカイブ用)  
gcloud logging sinks create storage-archive \
    storage.googleapis.com/my-logs-bucket \
    --log-filter='timestamp<"-P30D"'

分散トレーシングの実装

OpenTelemetry統合例

# Python OpenTelemetry設定
from opentelemetry import trace
from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor

# トレーサー設定
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)

# Cloud Traceエクスポーター
cloud_trace_exporter = CloudTraceSpanExporter()
span_processor = BatchSpanProcessor(cloud_trace_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)

# 使用例
def process_request():
    with tracer.start_as_current_span("process_request") as span:
        span.set_attribute("user.id", "12345")
        span.set_attribute("request.type", "api_call")
        # ビジネスロジック
        result = perform_database_operation()
        span.set_attribute("result.status", "success")
        return result

:shield: セキュリティとコンプライアンス

Binary Authorizationによるコンテナ検証

ポリシー設定例

# Binary Authorization ポリシー
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  requireAttestationBy:
  - projects/my-project/attestors/security-attestor
  - projects/my-project/attestors/qa-attestor
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
clusterAdmissionRules:
  us-central1-c.production-cluster:
    requireAttestationBy:
    - projects/my-project/attestors/production-attestor
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG

CI/CDパイプライン統合

# アテステーション作成
gcloud container binauthz attestations sign-and-create \
    --artifact-url=gcr.io/my-project/app:${BUILD_ID} \
    --attestor=security-attestor \
    --keyversion=projects/my-project/locations/global/keyRings/binauthz/cryptoKeys/attestor-key/cryptoKeyVersions/1

Workload Identityの実装

設定例

# Workload Identity設定
gcloud iam workload-identity-pools create github-pool \
    --location=global \
    --description="Pool for GitHub Actions"

# プロバイダー作成
gcloud iam workload-identity-pools providers create-oidc github-provider \
    --location=global \
    --workload-identity-pool=github-pool \
    --issuer-uri=https://token.actions.githubusercontent.com \
    --attribute-mapping="google.subject=assertion.sub,attribute.repository=assertion.repository"

# サービスアカウント紐付け
gcloud iam service-accounts add-iam-policy-binding \
    --role="roles/iam.workloadIdentityUser" \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/github-pool/attribute.repository/my-org/my-repo" \
    my-service-account@my-project.iam.gserviceaccount.com

Secret Manager統合

CI/CDでの活用

# Cloud Build with Secret Manager
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    echo "$$API_KEY" > /tmp/api-key
    # APIキーを使用した処理
availableSecrets:
  secretManager:
  - versionName: projects/my-project/secrets/api-key/versions/latest
    env: API_KEY

:keyboard: 実践コード例とコマンド集

よく使用するgcloudコマンド

# プロジェクト管理
gcloud projects list
gcloud config set project PROJECT_ID

# GKE操作
gcloud container clusters create production-cluster \
    --zone=us-central1-a \
    --enable-private-nodes \
    --enable-network-policy

# Cloud Build
gcloud builds submit --config=cloudbuild.yaml

# Binary Authorization
gcloud container binauthz policy import policy.yaml

# Secret Manager
gcloud secrets create db-password --data-file=password.txt
gcloud secrets versions access latest --secret=db-password

# Monitoring
gcloud logging sinks create bigquery-export \
    bigquery.googleapis.com/projects/PROJECT_ID/datasets/logs

# IAM
gcloud iam service-accounts create my-service-account
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:my-service-account@PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/container.developer"

Kubernetesマニフェスト例

# デプロイメント戦略
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    spec:
      serviceAccountName: workload-identity-sa
      containers:
      - name: myapp
        image: gcr.io/PROJECT_ID/myapp:latest
        env:
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: password
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi" 
            cpu: "200m"
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?