Workflows を使用して Batch ジョブを実行する


Batch は、Compute Engine 仮想マシン(VM)インスタンスでバッチ処理ワークロードのスケジューリング、キューイング、実行を行えるフルマネージド サービスです。Batch がお客様に代わってリソースをプロビジョニングし、容量を管理することで、バッチ ワークロードを大規模に実行できます。

Workflows では、Workflows の構文を使用して定義した順序で必要なサービスを実行できます。

このチュートリアルでは、Batch 用 Workflows コネクタを使用して、2 つの Compute Engine VM で 6 つのタスクを同時に実行する Batch ジョブをスケジュール設定して実行します。Batch と Workflows の両方を使用すると、それぞれの利点を享受し、プロセス全体を効率的にプロビジョニングしてオーケストレートできます。

目標

このチュートリアルの内容は次のとおりです。

  1. Docker コンテナ イメージ用の Artifact Registry リポジトリを作成します。
  2. GitHub からバッチ処理ワークロードのコードを取得します。これは、10,000 個のバッチで素数を生成するサンプル プログラムです。
  3. ワークロードの Docker イメージをビルドします。
  4. 次の処理を行うワークフローをデプロイして実行します。
    1. 素数生成ツールの結果を格納する Cloud Storage バケットを作成します。
    2. 2 つの Compute Engine VM で Docker コンテナを 6 つのタスクとして並行して実行する Batch ジョブをスケジュールして実行します。
    3. 必要に応じて、完了後に Batch ジョブを削除します。
  5. 結果が想定どおりであること、および生成されたプライム番号のバッチが Cloud Storage に保存されていることを確認します。

Google Cloud コンソールで次のコマンドの大部分を実行することも、ターミナルまたは Cloud Shell で Google Cloud CLI を使用してすべてのコマンドを実行することもできます。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。

コンソール

  1. Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  3. Artifact Registry API、Batch API、Cloud Build API、Compute Engine API、Workflow Execution API、Workflows API を有効にします。

    API を有効にする

  4. 他の Google Cloud サービスでの認証に使用するワークフローのサービス アカウントを作成し、適切なロールを付与します。

    1. Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。

      [サービス アカウントの作成] に移動

    2. プロジェクトを選択します。

    3. [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドの値が設定されます。

      [サービス アカウントの説明] フィールドに説明を入力します。例: Service account for tutorial

    4. [作成して続行] をクリックします。

    5. [ロールを選択] リストで、次のロールをフィルタして、前の手順で作成したユーザー管理のサービス アカウントに付与します。

      • バッチジョブエディタ: バッチジョブを編集します。
      • ログ書き込み: ログを書き込みます。
      • Storage 管理者: Cloud Storage リソースを制御します。

      ロールを追加するには、[別のロールを追加] をクリックして各ロールを追加します。

    6. [続行] をクリックします。

    7. アカウントの作成を完了するには、[完了] をクリックします。

  5. デフォルトのサービス アカウントに対する IAM サービス アカウント ユーザーのロールを、前の手順で作成したユーザー管理のサービス アカウントに付与します。Compute Engine API を有効にすると、デフォルトのサービス アカウントは Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com)になり、権限は通常、roles/iam.serviceAccountUser ロールによって割り当てられます。

    1. [サービス アカウント] ページで、デフォルトのサービス アカウントのメールアドレス(PROJECT_NUMBER-compute@developer.gserviceaccount.com)をクリックします。

    2. [権限] タブをクリックします。

    3. [アクセスを許可] ボタンをクリックします。

    4. 新しいプリンシパルを追加するには、サービス アカウント(SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com)のメールアドレスを入力します。

    5. [ロールを選択] リストで、[サービス アカウント] > [サービス アカウント ユーザー] ロールを選択します。

    6. [保存] をクリックします。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  3. Artifact Registry API、Batch API、Cloud Build API、Compute Engine API、Workflow Execution API、Workflows API を有効にします。

    gcloud services enable artifactregistry.googleapis.com \
      batch.googleapis.com \
      cloudbuild.googleapis.com \
      compute.googleapis.com \
      workflowexecutions.googleapis.com \
      workflows.googleapis.com
  4. 他の Google Cloud サービスでの認証に使用するワークフローのサービス アカウントを作成し、適切なロールを付与します。

    1. サービス アカウントを作成します。

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME をサービス アカウントの名前に置き換えます。

    2. 前のステップで作成したユーザー管理のサービス アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。

      • roles/batch.jobsEditor: バッチジョブを編集します。
      • roles/logging.logWriter: ログを書き込みます。
      • roles/storage.admin: Cloud Storage リソースを制御します。
      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=ROLE

      以下を置き換えます。

      • PROJECT_ID: サービス アカウントを作成したプロジェクト ID
      • ROLE: 付与するロール
  5. デフォルトのサービス アカウントに対する IAM サービス アカウント ユーザーのロールを、前の手順で作成したユーザー管理のサービス アカウントに付与します。Compute Engine API を有効にすると、デフォルトのサービス アカウントは Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com)になり、権限は通常、roles/iam.serviceAccountUser ロールによって割り当てられます。

    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')
    gcloud iam service-accounts add-iam-policy-binding \
      $PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/iam.serviceAccountUser

Artifact Registry リポジトリを作成する

Docker コンテナ イメージを保存するリポジトリを作成します。

コンソール

  1. Google Cloud コンソールで、[リポジトリ] ページに移動します。

    [リポジトリ] に移動

  2. [リポジトリを作成] をクリックします。

  3. リポジトリ名として「containers」と入力します。

  4. [形式] は [Docker] を選択します。

  5. [ロケーション タイプ] で、[リージョン] を選択します。

  6. [リージョン] リストで [us-central1] を選択します。

  7. [作成] をクリックします。

gcloud

次のコマンドを実行します。

  gcloud artifacts repositories create containers \
    --repository-format=docker \
    --location=us-central1

us-central1 リージョンに containers という名前の Artifact Registry リポジトリを作成しました。サポートされているリージョンの詳細については、Artifact Registry のロケーションをご覧ください。

コードサンプルを取得する

Google Cloud は、このチュートリアルのアプリケーションのソースコードを GitHub に保存します。対象のリポジトリのクローンを作成するか、サンプルをダウンロードできます。

  1. ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/batch-samples.git
    

    または、main.zip ファイルのサンプルをダウンロードして抽出することもできます。

  2. サンプルコードが入っているディレクトリに移動します。

    cd batch-samples/primegen
    

これで、開発環境にアプリケーションのソースコードを用意できました。

Cloud Build を使用して Docker イメージをビルドする

Dockerfile には、Cloud Build を使用して Docker イメージをビルドするために必要な情報が含まれています。次のコマンドを実行してビルドします。

gcloud builds submit \
  -t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/

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

ビルドが完了すると、次のような出力が表示されます。

DONE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID: a54818cc-5d14-467b-bfda-5fc9590af68c
CREATE_TIME: 2022-07-29T01:48:50+00:00
DURATION: 48S
SOURCE: gs://project-name_cloudbuild/source/1659059329.705219-17aee3a424a94679937a7200fab15bcf.tgz
IMAGES: us-central1-docker.pkg.dev/project-name/containers/primegen-service:v1
STATUS: SUCCESS

Dockerfile を使用して、primegen-service という名前の Docker イメージをビルドし、そのイメージを containers という名前の Artifact Registry リポジトリに push しました。

Batch ジョブをスケジュール設定して実行するワークフローをデプロイする

次のワークフローでは、2 つの Compute Engine VM で Docker コンテナを 6 つのタスクとして並行して実行する Batch ジョブをスケジュール設定して実行します。結果として、6 個の素数のバッチが生成され Cloud Storage バケットに格納されます。

Console

  1. Google Cloud コンソールの [ワークフロー] ページに移動します。

    [ワークフロー] に移動

  2. [ 作成] をクリックします。

  3. 新しいワークフローの名前を入力します(例: batch-workflow)。

  4. [リージョン] リストで [us-central1] を選択します。

  5. 先ほど作成したサービス アカウントを選択します。

  6. [次へ] をクリックします。

  7. ワークフロー エディタで、次のワークフローの定義を入力します。

    YAML

    main:
      params: [args]
      steps:
        - init:
            assign:
              - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
              - region: "us-central1"
              - imageUri: ${region + "-docker.pkg.dev/" + projectId + "/containers/primegen-service:v1"}
              - jobId: ${"job-primegen-" + string(int(sys.now()))}
              - bucket: ${projectId + "-" + jobId}
        - createBucket:
            call: googleapis.storage.v1.buckets.insert
            args:
              query:
                project: ${projectId}
              body:
                name: ${bucket}
        - logCreateBucket:
            call: sys.log
            args:
              data: ${"Created bucket " + bucket}
        - logCreateBatchJob:
            call: sys.log
            args:
              data: ${"Creating and running the batch job " + jobId}
        - createAndRunBatchJob:
            call: googleapis.batch.v1.projects.locations.jobs.create
            args:
                parent: ${"projects/" + projectId + "/locations/" + region}
                jobId: ${jobId}
                body:
                  taskGroups:
                    taskSpec:
                      runnables:
                        - container:
                            imageUri: ${imageUri}
                          environment:
                            variables:
                              BUCKET: ${bucket}
                    # Run 6 tasks on 2 VMs
                    taskCount: 6
                    parallelism: 2
                  logsPolicy:
                    destination: CLOUD_LOGGING
            result: createAndRunBatchJobResponse
        # You can delete the batch job or keep it for debugging
        - logDeleteBatchJob:
            call: sys.log
            args:
              data: ${"Deleting the batch job " + jobId}
        - deleteBatchJob:
            call: googleapis.batch.v1.projects.locations.jobs.delete
            args:
                name: ${"projects/" + projectId + "/locations/" + region + "/jobs/" + jobId}
            result: deleteResult
        - returnResult:
            return:
              jobId: ${jobId}
              bucket: ${bucket}

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "init": {
              "assign": [
                {
                  "projectId": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}"
                },
                {
                  "region": "us-central1"
                },
                {
                  "imageUri": "${region + \"-docker.pkg.dev/\" + projectId + \"/containers/primegen-service:v1\"}"
                },
                {
                  "jobId": "${\"job-primegen-\" + string(int(sys.now()))}"
                },
                {
                  "bucket": "${projectId + \"-\" + jobId}"
                }
              ]
            }
          },
          {
            "createBucket": {
              "call": "googleapis.storage.v1.buckets.insert",
              "args": {
                "query": {
                  "project": "${projectId}"
                },
                "body": {
                  "name": "${bucket}"
                }
              }
            }
          },
          {
            "logCreateBucket": {
              "call": "sys.log",
              "args": {
                "data": "${\"Created bucket \" + bucket}"
              }
            }
          },
          {
            "logCreateBatchJob": {
              "call": "sys.log",
              "args": {
                "data": "${\"Creating and running the batch job \" + jobId}"
              }
            }
          },
          {
            "createAndRunBatchJob": {
              "call": "googleapis.batch.v1.projects.locations.jobs.create",
              "args": {
                "parent": "${\"projects/\" + projectId + \"/locations/\" + region}",
                "jobId": "${jobId}",
                "body": {
                  "taskGroups": {
                    "taskSpec": {
                      "runnables": [
                        {
                          "container": {
                            "imageUri": "${imageUri}"
                          },
                          "environment": {
                            "variables": {
                              "BUCKET": "${bucket}"
                            }
                          }
                        }
                      ]
                    },
                    "taskCount": 6,
                    "parallelism": 2
                  },
                  "logsPolicy": {
                    "destination": "CLOUD_LOGGING"
                  }
                }
              },
              "result": "createAndRunBatchJobResponse"
            }
          },
          {
            "logDeleteBatchJob": {
              "call": "sys.log",
              "args": {
                "data": "${\"Deleting the batch job \" + jobId}"
              }
            }
          },
          {
            "deleteBatchJob": {
              "call": "googleapis.batch.v1.projects.locations.jobs.delete",
              "args": {
                "name": "${\"projects/\" + projectId + \"/locations/\" + region + \"/jobs/\" + jobId}"
              },
              "result": "deleteResult"
            }
          },
          {
            "returnResult": {
              "return": {
                "jobId": "${jobId}",
                "bucket": "${bucket}"
              }
            }
          }
        ]
      }
    }
    
  8. [デプロイ] をクリックします。

gcloud

  1. ワークフローのソースコード ファイルを作成します。

    touch batch-workflow.JSON_OR_YAML

    ワークフローの形式に応じて、JSON_OR_YAMLyaml または json に置き換えます。

  2. テキスト エディタで、次のワークフローをソースコード ファイルにコピーします。

    YAML

    main:
      params: [args]
      steps:
        - init:
            assign:
              - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
              - region: "us-central1"
              - imageUri: ${region + "-docker.pkg.dev/" + projectId + "/containers/primegen-service:v1"}
              - jobId: ${"job-primegen-" + string(int(sys.now()))}
              - bucket: ${projectId + "-" + jobId}
        - createBucket:
            call: googleapis.storage.v1.buckets.insert
            args:
              query:
                project: ${projectId}
              body:
                name: ${bucket}
        - logCreateBucket:
            call: sys.log
            args:
              data: ${"Created bucket " + bucket}
        - logCreateBatchJob:
            call: sys.log
            args:
              data: ${"Creating and running the batch job " + jobId}
        - createAndRunBatchJob:
            call: googleapis.batch.v1.projects.locations.jobs.create
            args:
                parent: ${"projects/" + projectId + "/locations/" + region}
                jobId: ${jobId}
                body:
                  taskGroups:
                    taskSpec:
                      runnables:
                        - container:
                            imageUri: ${imageUri}
                          environment:
                            variables:
                              BUCKET: ${bucket}
                    # Run 6 tasks on 2 VMs
                    taskCount: 6
                    parallelism: 2
                  logsPolicy:
                    destination: CLOUD_LOGGING
            result: createAndRunBatchJobResponse
        # You can delete the batch job or keep it for debugging
        - logDeleteBatchJob:
            call: sys.log
            args:
              data: ${"Deleting the batch job " + jobId}
        - deleteBatchJob:
            call: googleapis.batch.v1.projects.locations.jobs.delete
            args:
                name: ${"projects/" + projectId + "/locations/" + region + "/jobs/" + jobId}
            result: deleteResult
        - returnResult:
            return:
              jobId: ${jobId}
              bucket: ${bucket}

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "init": {
              "assign": [
                {
                  "projectId": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}"
                },
                {
                  "region": "us-central1"
                },
                {
                  "imageUri": "${region + \"-docker.pkg.dev/\" + projectId + \"/containers/primegen-service:v1\"}"
                },
                {
                  "jobId": "${\"job-primegen-\" + string(int(sys.now()))}"
                },
                {
                  "bucket": "${projectId + \"-\" + jobId}"
                }
              ]
            }
          },
          {
            "createBucket": {
              "call": "googleapis.storage.v1.buckets.insert",
              "args": {
                "query": {
                  "project": "${projectId}"
                },
                "body": {
                  "name": "${bucket}"
                }
              }
            }
          },
          {
            "logCreateBucket": {
              "call": "sys.log",
              "args": {
                "data": "${\"Created bucket \" + bucket}"
              }
            }
          },
          {
            "logCreateBatchJob": {
              "call": "sys.log",
              "args": {
                "data": "${\"Creating and running the batch job \" + jobId}"
              }
            }
          },
          {
            "createAndRunBatchJob": {
              "call": "googleapis.batch.v1.projects.locations.jobs.create",
              "args": {
                "parent": "${\"projects/\" + projectId + \"/locations/\" + region}",
                "jobId": "${jobId}",
                "body": {
                  "taskGroups": {
                    "taskSpec": {
                      "runnables": [
                        {
                          "container": {
                            "imageUri": "${imageUri}"
                          },
                          "environment": {
                            "variables": {
                              "BUCKET": "${bucket}"
                            }
                          }
                        }
                      ]
                    },
                    "taskCount": 6,
                    "parallelism": 2
                  },
                  "logsPolicy": {
                    "destination": "CLOUD_LOGGING"
                  }
                }
              },
              "result": "createAndRunBatchJobResponse"
            }
          },
          {
            "logDeleteBatchJob": {
              "call": "sys.log",
              "args": {
                "data": "${\"Deleting the batch job \" + jobId}"
              }
            }
          },
          {
            "deleteBatchJob": {
              "call": "googleapis.batch.v1.projects.locations.jobs.delete",
              "args": {
                "name": "${\"projects/\" + projectId + \"/locations/\" + region + \"/jobs/\" + jobId}"
              },
              "result": "deleteResult"
            }
          },
          {
            "returnResult": {
              "return": {
                "jobId": "${jobId}",
                "bucket": "${bucket}"
              }
            }
          }
        ]
      }
    }
    
  3. 次のコマンドを入力してワークフローをデプロイします。

    gcloud workflows deploy batch-workflow \
      --source=batch-workflow.yaml \
      --location=us-central1 \
      --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    SERVICE_ACCOUNT_NAME は、先ほど作成したサービス アカウントの名前に置き換えます。

ワークフローを実行する

ワークフローを実行すると、そのワークフローに関連付けられた現在のワークフロー定義が実行されます。

Console

  1. Google Cloud コンソールの [ワークフロー] ページに移動します。

    [ワークフロー] に移動

  2. [ワークフロー] ページで、[batch-workflow] ワークフローをクリックして詳細ページに移動します。

  3. [ワークフローの詳細] ページで [ 実行] を選択します。

  4. もう一度 [Execute] をクリックします。

    ワークフローの実行には数分を要します。

  5. ワークフローの結果が [出力] ペインに表示されます。

    結果は次のようになります。

    {
      "bucket": "project-name-job-primegen-TIMESTAMP",
      "jobId": "job-primegen-TIMESTAMP"
    }
    

gcloud

  1. ワークフローを実行します。

    gcloud workflows run batch-workflow \
      --location=us-central1

    ワークフローの実行には数分を要します。

  2. 長時間実行のステータスを確認できます。

  3. 最後に完了した実行のステータスを取得するには、次のコマンドを実行します。

    gcloud workflows executions describe-last

    結果の例を以下に示します。

    name: projects/PROJECT_NUMBER/locations/us-central1/workflows/batch-workflow/executions/EXECUTION_ID
    result: '{"bucket":"project-name-job-primegen-TIMESTAMP","jobId":"job-primegen-TIMESTAMP"}'
    startTime: '2022-07-29T16:08:39.725306421Z'
    state: SUCCEEDED
    status:
      currentSteps:
      - routine: main
        step: returnResult
    workflowRevisionId: 000001-9ba
    

出力バケット内のオブジェクトを一覧表示する。

Cloud Storage 出力バケット内のオブジェクトを一覧表示することで、結果が想定どおりであることを確認できます。

Console

  1. Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. バケットリストで、コンテンツを表示するバケットの名前をクリックします。

    結果は次のようになります。合計で 6 つのファイルがあり、それぞれが 10,000 個の素数のバッチを一覧表示しています。

    primes-1-10000.txt
    primes-10001-20000.txt
    primes-20001-30000.txt
    primes-30001-40000.txt
    primes-40001-50000.txt
    primes-50001-60000.txt
    

gcloud

  1. 出力バケット名を取得します。

    gcloud storage ls

    出力は次のようになります。

    gs://PROJECT_ID-job-primegen-TIMESTAMP/

  2. バケット内のオブジェクトを一覧表示する。

    gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive

    TIMESTAMP は、前のコマンドで返されたタイムスタンプに置き換えます。

    出力は次のようになります。合計で 6 つのファイルがあり、それぞれに 10,000 個の素数のバッチが一覧表示されています。

    gs://project-name-job-primegen-TIMESTAMP/primes-1-10000.txt
    gs://project-name-job-primegen-TIMESTAMP/primes-10001-20000.txt
    gs://project-name-job-primegen-TIMESTAMP/primes-20001-30000.txt
    gs://project-name-job-primegen-TIMESTAMP/primes-30001-40000.txt
    gs://project-name-job-primegen-TIMESTAMP/primes-40001-50000.txt
    gs://project-name-job-primegen-TIMESTAMP/primes-50001-60000.txt
    

クリーンアップ

このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。

プロジェクトを削除する

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

このチュートリアルで作成したリソースを削除する

  1. バッチジョブを削除します。

    1. まず、ジョブ名を取得します。

      gcloud batch jobs list --location=us-central1

      出力例を以下に示します。

      NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP
      STATE: SUCCEEDED
      

      ここで、job-primegen-TIMESTAMP は Batch ジョブの名前です。

    2. ジョブを削除します。

      gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
  2. ワークフローを削除します。

    gcloud workflows delete WORKFLOW_NAME
  3. コンテナ リポジトリを削除します。

    gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
  4. Cloud Build は、Cloud Storage を使用してビルドリソースを保存します。Cloud Storage バケットを削除するには、バケットの削除をご覧ください。

次のステップ