指標を使用してアプリケーションを分析する

このクイックスタートでは、Cloud Deploy を使用して、Google Cloud Observability の指標に基づいて、デプロイされた Cloud Run サービスを分析し、アプリケーションが想定どおりに動作していることを確認する方法について説明します。

このクイックスタートでは、以下の内容を行います。

  1. 1 つの Cloud Run サービスを作成してデプロイします。

    この場合、Cloud Deploy を使用してデプロイすることはありません。

  2. Google Cloud Observability で稼働時間チェックを作成します。

    このチェックは、Cloud Run サービスが実行されていることを確認するためにモニタリングします。

  3. Cloud Monitoring でアラート ポリシーを作成します。

    デフォルトでは、Cloud Deploy 分析は Google Cloud Observability の多くの種類の指標を使用できます。このポリシーは、稼働時間チェックで問題が検出された場合にアラートを作成します。

  4. Cloud Run サービスを識別する Skaffold 構成を作成します。

  5. Cloud Deploy デリバリー パイプラインとターゲットを定義します。

    このパイプラインには 1 つのステージのみが含まれ、1 つのターゲットのみが使用されます。また、分析ジョブの定義が含まれています。

  6. リリースを作成します。リリースは自動的にターゲットにデプロイされます。

    アプリケーションがデプロイされると、分析がロールアウトで ジョブとして実行されます。

    サービスはターゲットに正常にデプロイされますが、アラート ポリシーによってアラートが生成されるため、ロールアウトは失敗します。

  7. Cloud Run サービス定義を変更して、サービスのインスタンス数を増やし、新しいリリースを作成します。

    今回はサービスが正常にデプロイされ、ロールアウトが正常に完了します。

始める前に

  • Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  • Verify that billing is enabled for your Google Cloud project.

  • Cloud Deploy、Cloud Build、Cloud Run、Cloud Storage API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

    API を有効にする

  • Google Cloud CLI をインストールします。

  • 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  • gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  • Verify that billing is enabled for your Google Cloud project.

  • Cloud Deploy、Cloud Build、Cloud Run、Cloud Storage API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

    API を有効にする

  • Google Cloud CLI をインストールします。

  • 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  • gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  • 必要なロール

    Cloud Deploy オペレーションを実行して Cloud Run にデプロイするために必要な権限が Cloud Deploy サービス アカウントに付与されるように、プロジェクトに対する次の IAM ロールを Cloud Deploy サービス アカウントに付与するよう管理者に依頼してください。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    管理者は、カスタムロールや他の事前定義ロールを使用して、Cloud Deploy サービス アカウントに必要な権限を付与することもできます。

    Cloud Deploy サービス アカウントの詳細については、こちらをご覧ください。

    Cloud Run サービスをデプロイする

    このクイックスタートでは、Cloud Run がすでに存在することを前提とするアラート ポリシーを使用します。ここでは 1 つのサービスをデプロイし、後のセクションで同じサービス名を使用して service.yaml を定義します。

    次のコマンドを実行して、初期サービスを作成します。

    gcloud run deploy my-analysis-run-service \
      --image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \
      --project=PROJECT_ID \
      --region=us-central1 \
      --allow-unauthenticated
    

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

    Google Cloud Observability の稼働時間チェックを作成する

    この稼働時間チェックは、実行中のサービスをモニタリングして、実行されていることを確認します。後のセクションでは、サービスで実行中の使用可能なインスタンスが 1 つもない場合にアラートを生成する Google Cloud Observability アラート ポリシーを作成します。

    1. 稼働時間チェックを作成するには、次のコマンドを実行します。

      gcloud monitoring uptime create my-analysis-run-service-cloud-run-uptime-check \
        --resource-type=cloud-run-revision \
        --resource-labels="project_id=PROJECT_ID,location=us-central1,service_name=my-analysis-run-service" \
        --project=PROJECT_ID \
        --protocol=https \
        --path="/" \
        --port=443 \
        --period=1 \
        --timeout=10 \
        --service-agent-auth="oidc-token" \
        --status-classes="2xx"
      
    2. 稼働時間チェック ID をコピーします。

      実行したコマンドの出力に ID が含まれています。

    Skaffold 構成とサービス定義を準備する

    このクイックスタートでは、サンプル Cloud Run サービスのデプロイに使用するマニフェストを識別する skaffold.yaml ファイルを作成します。また、Cloud Run 自体を定義する service.yaml ファイルも定義します。

    1. ターミナル ウィンドウを開きます。

    2. 新しいディレクトリを作成し、そのディレクトリに移動します。

    mkdir deploy-analysis-run-quickstart
    cd deploy-analysis-run-quickstart
    
    1. 次の内容のファイルを skaffold.yaml という名前で作成します。
    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - service.yaml
    deploy:
      cloudrun: {}
    

    この構成ファイルの詳細については、skaffold.yaml リファレンスをご覧ください。

    1. 次の内容のファイルを service.yaml という名前で作成します。
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: my-analysis-run-service
      annotations:
        run.googleapis.com/scalingMode: manual
        run.googleapis.com/manualInstanceCount: 0
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    このファイルは Cloud Run サービス定義であり、アプリケーションのデプロイに使用されます。デプロイするコンテナ イメージは、プレースホルダ my-app-image としてここに設定されます。これは、リリースを作成するときに特定のイメージに置き換えられます。

    スケーリング モードを手動に設定し、インスタンス数を 0 に設定していることに注意してください。つまり、デプロイされたサービスはトラフィックを受信できず、実行中のインスタンスがなくなるため、アラートがトリガーされます。このアラートは次の手順で構成します。

    アラート ポリシーの作成

    このクイックスタートでは、Google Cloud Observability アラート ポリシーを使用します。このアラート ポリシーは、Cloud Run サービスが先ほど作成した稼働時間チェックに失敗した場合にアラートを生成します。

    1. deploy-analysis-run-quickstart ディレクトリに、次の内容の policy.yaml というファイルを作成します。

      displayName: Cloud Run service uptime check
      userLabels:
        policy-for: analysis-run-pipeline
      combiner: OR
      conditions:
      - displayName: Failure of uptime check UPTIME_ID
        conditionThreshold:
          filter: metric.type="monitoring.googleapis.com/uptime_check/check_passed" AND metric.label.check_id="UPTIME_ID" AND resource.type="cloud_run_revision"
          aggregations:
          - alignmentPeriod: 60s
            crossSeriesReducer: REDUCE_COUNT_FALSE
            groupByFields:
            - resource.label.*
            perSeriesAligner: ALIGN_NEXT_OLDER
          comparison: COMPARISON_GT
          duration: 60s
          thresholdValue: 1.0
      

      UPTIME_ID は、以前に作成したアップタイム チェックの ID に置き換えます。

    2. 次のコマンドを実行してポリシーを作成します。

      gcloud monitoring policies create \
        --policy-from-file=policy.yaml\
        --project=PROJECT_ID
      

      PROJECT_ID は、実際のプロジェクト ID に置き換えます。

    3. 実行したコマンドの出力からポリシー ID をコピーします。

      今回は、パスを含むリソース ID 全体をコピーします。この ID は、次のセクションで、配信パイプラインの分析構成で使用します。

    デリバリー パイプラインとターゲットを作成する

    このデリバリー パイプラインには、1 つのターゲット(analysis-staging)に対して 1 つのステージがあります。

    1. deploy-analysis-run-quickstart ディレクトリに、次の内容を含む新しい clouddeploy.yaml ファイルを作成します。

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: deploy-analysis-demo-app-run
      description: main application pipeline
      serialPipeline:
        stages:
        - targetId: analysis-staging
          profiles: []
          strategy:
            standard:
              analysis:
                duration: 300s
                googleCloud:
                  alertPolicyChecks:
                  - id: check-1
                    alertPolicies:
                    - ALERT_POLICY_ID
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: analysis-staging
      description: staging Run service
      run:
        location: projects/PROJECT_ID/locations/us-central1
      

      この YAML で、ALERT_POLICY_ID以前に実行した gcloud monitoring policies list コマンドの出力に置き換え、PROJECT_ID は使用しているプロジェクトの ID に置き換えます。

    2. パイプラインとターゲットを Cloud Deploy サービスに登録します。

      gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
      

      これで、1 つのターゲットを含むデリバリー パイプラインが作成され、アプリケーションをデプロイする準備が整いました。

    3. パイプラインとターゲットを確認します。

      Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。

      [デリバリー パイプライン] ページを開く

      作成したデリバリー パイプラインが表示され、[ターゲット] 列に 1 つのターゲットが表示されます。

      パイプラインが表示された Google Cloud コンソールのデリバリー パイプライン ページ

    リリースを作成する

    リリースは Cloud Deploy リソースの中心で、デプロイの変更を表します。デリバリー パイプラインは、そのリリースのライフサイクルを定義します。このライフサイクルの詳細については、Cloud Deploy のサービス アーキテクチャをご覧ください。

    deploy-analysis-run-quickstart ディレクトリから次のコマンドを実行して、デプロイするコンテナ イメージを表す release リソースを作成します。

    gcloud deploy releases create test-release-001 \
      --project=PROJECT_ID \
      --region=us-central1 \
      --delivery-pipeline=deploy-analysis-demo-app-run \
      --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
    

    --images= フラグに注目してください。このフラグは、サービス定義のプレースホルダ(my-app-image)を特定の SHA 修飾イメージに置き換えるために使用します。Google は、この方法でサービス定義をテンプレート化し、リリース作成時に SHA 修飾イメージ名を使用することをおすすめします。

    すべてのリリース(--disable-initial-rollout を含むものを除き)において、Cloud Deploy ではロールアウト リソースも自動的に作成されます。アプリケーションは、このデリバリー パイプライン用に構成された 1 つのターゲットに自動的にデプロイされます。

    Google Cloud コンソールで結果を表示する

    数分後、リリースがターゲット ランタイムにデプロイされます。表示できます。

    1. Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、デリバリー パイプライン(「deploy-analysis-demo-app-run」)を表示します。

      [デリバリー パイプライン] ページを開く

    2. デリバリー パイプラインの名前(「deploy-analysis-demo-app-run」)をクリックします。

      可視化されたパイプラインでは、アプリのデプロイ ステータスが表示されます。パイプラインには 1 つのステージしかないため、可視化されたパイプラインにはノードが 1 つだけ表示されます。

      成功を示すデリバリー パイプラインのビジュアリゼーション

      リリースが [デリバリー パイプラインの詳細] の下の [リリース] タブに表示されます。

    3. [デリバリー パイプラインの詳細] の [ロールアウト] タブをクリックします。

    4. ロールアウト名をクリックして、ロールアウトの詳細を表示します。

      [分析] がジョブとして一覧表示されます。

       Google Cloud コンソールのロールアウト

    分析の失敗

    配信パイプライン構成で指定した分析ジョブは、アプリケーションのデプロイ後にこのロールアウトの一部として実行されます。アラート ポリシーでアラートがトリガーされるため、この分析は失敗するはずです。この分析の失敗により、ロールアウトは失敗します。

    変更を加えてから別のリリースを作成すると、成功するはずです。

    サービス定義を変更して新しいリリースを作成する

    次に、サービス定義のインスタンス数を変更して、サービスの実行中のインスタンスが存在するようにします。これにより、アラートはトリガーされなくなります。

    1. Cloud Run 定義ファイル service.yaml を編集して、run.googleapis.com/manualInstanceCount の値を 0 から 1 に変更します。

    2. 同じ deploy-analysis-run-quickstart ディレクトリから次のコマンドを実行して、別の release を作成します。

      gcloud deploy releases create test-release-002 \
        --project=PROJECT_ID \
        --region=us-central1 \
        --delivery-pipeline=deploy-analysis-demo-app-run \
        --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
      

    今回はロールアウトが成功するはずです。これは、Cloud Run サービスに実行中のインスタンスが 1 つあるため、稼働時間チェックでアラート ポリシーからアラートが呼び出されないためです。

    クリーンアップ

    このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

    1. Cloud Run サービスを削除します。

      gcloud run services delete my-analysis-run-service \
      --region=us-central1 \
      --project=PROJECT_ID
      
    2. デリバリー パイプライン、ターゲット、リリース、ロールアウトを削除するには、デリバリー パイプライン定義を含むディレクトリから次のコマンドを実行します。

      gcloud deploy delete --file=clouddeploy.yaml \
      --force \
      --region=us-central1 \
      --project=PROJECT_ID
      
    3. Google Cloud Observability アラート ポリシーを削除します。

      gcloud monitoring policies delete  ALERT_POLICY_ID
      
    4. Cloud Deploy によって作成された Cloud Storage バケットを削除します。

      1 つは _clouddeploy で終わり、もう 1 つは [region].deploy-artifacts.[project].appspot.com で終わります。

      Cloud Storage ブラウザページを開く

    これでクイックスタートの演習はすべて終了です。

    次のステップ