正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

チュートリアル: Google Cloud RunコンポーネントでWebサービスを作成してデプロイする

Google Cloud Runコンポーネントを使用して、Artifact Registryに保存されているコンテナイメージからWebサービスをデプロイする方法を説明します。

はじめる前

  1. Google Cloudインテグレーションのセットアップの手順に従って以下を行います:

    • Google Cloud IAMを設定します。
    • GitLabをGoogle Artifact Registryに接続します。
    • Google CloudでCI/CDジョブを実行するようにGitLab Runnerを設定します。
  2. このページのコマンドを実行するには、次のいずれかの開発環境でgcloud CLIを設定します:

  3. 次のコマンドを実行して、デフォルトのGoogle Cloudプロジェクトを設定します:

    gcloud config set project PROJECT_ID

    デフォルトプロジェクトを設定すると、--projectフラグをgcloudコマンドに渡す必要がなくなります。

  4. Compute Engine APIとCloud Run APIを有効にします:

    gcloud services enable compute.googleapis.com artifactregistry.googleapis.com run.googleapis.com
  5. 次のロールをワークロードIDプールに付与します:

    • Cloud Storage管理者(roles/run.admin)サービスを取得、作成、更新します。
    • サービスアカウントとして操作を実行するサービスアカウントユーザー(roles/iam.serviceAccountUser

    developer_access=true属性マッピングに一致するワークロードIDプール内のすべてのプリンシパルにroles/run.adminおよびroles/iam.serviceAccountUserロールを付与するには、次のコマンドを実行します:

    # Replace ${PROJECT_ID}, ${PROJECT_NUMBER}, ${LOCATION}, ${POOL_ID} with your values below
    WORKLOAD_IDENTITY=principalSet://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/${POOL_ID}/attribute.developer_access/true
    gcloud projects add-iam-policy-binding ${PROJECT_ID} --member="${WORKLOAD_IDENTITY}" --role="roles/run.admin"
    gcloud projects add-iam-policy-binding ${PROJECT_ID} --member="${WORKLOAD_IDENTITY}" --role="roles/iam.serviceAccountUser"

新しいGitLabプロジェクトでIAMインテグレーションを構成する

組織またはグループのインテグレーションのためにGoogle IAMを設定したら、その組織またはグループの新しいプロジェクトでインテグレーションを再利用できます:

  1. 組織またはグループで新しいGitLabプロジェクトを作成します。

  2. GitLabプロジェクトで、設定 > インテグレーションを選択します。

  3. Google Cloud IAMを選択します。

  4. Google Cloudプロジェクトセクションで、以下を入力します:

    • プロジェクトID:ワークロードIDプールのGoogle CloudプロジェクトID
    • プロジェクト番号:同じプロジェクトのGoogle Cloudプロジェクト番号

    Google CloudプロジェクトIDと番号を確認するには、プロジェクトの識別を参照してください。

  5. ワークロードアイデンティティフェデレーションセクションに、以下を入力します:

    • プールID:ワークロードIDプールに付けた名前。
    • プロバイダーID:OIDCプロバイダーに付けた名前。

    ヒント:これらの値は、インテグレーションのセットアップに最初に使用したGitLabプロジェクトからコピーできます。

  6. 変更を保存を選択します。提供されているスクリプトは、ワークロードIDプールを作成するため、実行しないでください。既に存在します。

新しいGitLabプロジェクトでGoogle Artifact Registryインテグレーションを構成する

複数のコンテナイメージをArtifact Registryに保存できます。新しいGitLabプロジェクトで同じリポジトリを再利用するには、プロジェクトでGoogle Artifact Managementインテグレーションを構成します。

  1. GitLabプロジェクトで、設定 > インテグレーションを選択します。

  2. Googleアーティファクトの管理を選択します

  3. リポジトリセクションに、以下を入力します:

    • Google CloudプロジェクトID:使用するArtifact RegistryリポジトリのプロジェクトID
    • リポジトリ名:リポジトリ名
    • リポジトリの場所:リポジトリの場所
  4. 変更を保存を選択します。ワークロードIDプールは、グループまたは組織内のGitLabユーザーにArtifact Registryの閲覧者とライターのロールを既に許可しているため、提供されているスクリプトは実行しないでください。

GitLabリポジトリをクローンする

SSHまたはHTTPSを使用してGitLabリポジトリを作業環境にクローンするには、Gitリポジトリをローカルコンピューターにクローンするの手順に従ってください。

Dockerfileを作成する

  1. クローンされたリポジトリに、DockerfileDockerfileという名前の新しいファイルを作成します。

  2. 以下をコピーしてDockerfileDockerfileに貼り付けます:

    FROM python:3.12.4
    
    ARG name
    
    RUN mkdir web
    
    RUN cat <<EOF > web/index.html
    <!DOCTYPE html>
    <html>
        <head>
            <title>Home</title>
        </head>
        <body>
            <h1 color="green">Welcome to $name</h1>
        </body>
    </html>
    EOF
    
    CMD ["python3", "-m", "http.server", "8080", "-d", "web"]
  3. DockerfileDockerfileをGitに追加し、コミットして、GitLabリポジトリにプッシュします:

    git add Dockerfile
    git commit -m "add dockerfile"
    git push

    ユーザー名とパーソナルアクセストークンの入力を求められます。

DockerfileはHTTP Webサービスを作成します。

パイプラインを作成する

Dockerイメージをビルドし、GitLabコンテナレジストリにプッシュし、イメージをGoogle Artifact Registryにコピーし、Cloud Runを使用してGoogle Cloudインフラストラクチャにデプロイするパイプラインを作成します。

  1. GitLabプロジェクトで、.gitlab-ci.ymlファイルを作成します。

  2. イメージをビルドし、GitLabコンテナレジストリにプッシュし、Google Artifact Registryにコピーし、Cloud Runを使用してデプロイするパイプラインを作成するには、.gitlab-ci.ymlファイルの内容を次のように変更します。

    次の例では、以下を置き換えます:

    • LOCATION:Google Artifact Registryリポジトリを作成したGoogle Cloudリージョン。
    • PROJECT:Artifact RegistryリポジトリのGoogle CloudプロジェクトID。
    • REPOSITORY:Google Artifact RegistryリポジトリのリポジトリID。
    variables:
      IMAGE_TAG: v$CI_PIPELINE_ID
      AR_IMAGE: LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/python-service
    
    stages:
      - build
      - push
      - deploy
    
    build-job:
      stage: build
      services:
        - docker:24.0.5-dind
      image: docker:git
      before_script:
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
      script:
        - docker build -t $CI_REGISTRY_IMAGE:$IMAGE_TAG --build-arg="name=Cloud Run" .
        - docker push $CI_REGISTRY_IMAGE:$IMAGE_TAG
    
    include:
      - component: gitlab.com/google-gitlab-components/artifact-registry/upload-artifact-registry@0.1.0
        inputs:
          stage: push
          source: $CI_REGISTRY_IMAGE:$IMAGE_TAG
          target: $AR_IMAGE:$IMAGE_TAG
    
      - component: gitlab.com/google-gitlab-components/cloud-run/deploy-cloud-run@0.1.0
        inputs:
          stage: deploy
          image: $AR_IMAGE:$IMAGE_TAG
          project_id: PROJECT
          region: LOCATION
          service: python-service
  3. .gitlab-ci.ymlファイルをGitに追加し、コミットして、GitLabリポジトリにプッシュします。

このパイプラインは、以下を完了します:

Google Cloud Runでサービスを表示する

  1. Google Cloud Consoleで、Cloud Runページに移動します。

  2. サービスタブで作成したサービスを選択します。

    サービスのメトリクスタブが表示され、サービスのリージョン、URL、およびその他の詳細を表示できます。

サービスをプロキシして表示する

サービスはプライベートであるため、認証を行わないと、Google Cloud ConsoleにリストされているURLから表示できません。サービスをテストするには、gcloud CLIを使用して認証を行い、サービスをhttp://localhost:8080にプロキシできます。

サービスをローカルでプロキシするには、次のコマンドを実行します:

gcloud run services proxy SERVICE \
    --project PROJECT_ID \
    --region=LOCATION

http://localhost:8080でウェルカムページを表示できます。

クリーンアップ

このページで使用されているリソースに対してGoogle Cloudアカウントに料金が発生しないようにするには、Google Cloudリソース、またはGoogle Cloudプロジェクト全体を削除できます。

ワークロードIDプールを含むプロジェクトを削除すると、すべてのセットアップ手順に再度従わない限り、インテグレーションを使用できません。

GitLabとGoogleの価格設定およびプロジェクト管理については、次のリソースを参照してください:

Google Artifact Registryリポジトリを削除する

Google Artifact Registryリポジトリを削除するには、このセクションの手順に従ってください。Google Cloudプロジェクト全体を削除する場合は、プロジェクトを削除するの手順に従ってください。

リポジトリを削除する前に、保持するイメージが別の場所で使用可能になっていることを確認してください。

リポジトリを削除するには、次のコマンドを実行します:

gcloud artifacts repositories delete REPOSITORY \
    --location=LOCATION

以下を置き換えます:

  • Google Artifact RegistryリポジトリIDとREPOSITORY
  • リポジトリの場所とLOCATION

Cloud Runサービスを削除する

  1. Google Cloud Consoleで、Cloud Runページに移動します。
  2. サービスの横にあるチェックボックスをオンにします。
  3. 削除を選択します。

Google Cloudプロジェクトを削除する

Caution(注意): プロジェクトを削除すると、次の影響があります:

  • Everything in the project is deleted(プロジェクト内のすべてが削除されます)。このドキュメントのタスクに既存のプロジェクトを使用した場合、それを削除すると、プロジェクトで行った他の作業もすべて削除されます。
  • Custom project IDs are lost(カスタムプロジェクトIDは失われます)。このプロジェクトを作成したときに、将来使用するカスタムプロジェクトIDを作成した可能性があります。appspot.com URLなど、プロジェクトIDを使用するURLを保持するには、プロジェクト全体を削除する代わりに、プロジェクト内の選択したリソースを削除します。

Google Cloudで複数のアーキテクチャ、チュートリアル、またはクイックスタートチュートリアルを調査することを計画している場合、プロジェクトを再利用すると、プロジェクトのクォータ制限を超えることを回避できます。

  1. Google Cloud Consoleで、Manage resources(リソースの管理)ページに移動します。
  2. プロジェクトリストで、削除するプロジェクトを選択し、削除を選択します。
  3. ダイアログで、プロジェクトIDを入力し、Shut down(シャットダウン)を選択してプロジェクトを削除します。