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

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

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

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

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

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

    このチェックでは、Cloud Run サービスが実行されていることを確認します。

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

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

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

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

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

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

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

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

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

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

始める前に

  • アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、 Google Cloud実際のシナリオでプロダクトがどのように動作するかを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $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.

  • Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • 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.

  • Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

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

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

    gcloud init
  • 必要なロール

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

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

    管理者は、カスタムロールや他の事前定義ロールを使用して、必要な権限を 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. 次のように、パイプラインとターゲットを確認します。

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

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

      作成したデリバリー パイプラインが表示され、[ターゲット] 列に 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 修飾 イメージに置き換えます。このようにサービス定義をテンプレート化し、リリース作成時に 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 ブラウザページを開く

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

    次のステップ