チュートリアル: Google Cloud RunコンポーネントでWebサービスを作成してデプロイする
Google Cloud Runコンポーネントを使用して、Artifact Registryに保存されているコンテナイメージからWebサービスをデプロイする方法を説明します。
はじめる前
Google Cloudインテグレーションのセットアップの手順に従って以下を行います:
- Google Cloud IAMを設定します。
- GitLabをGoogle Artifact Registryに接続します。
- Google CloudでCI/CDジョブを実行するようにGitLab Runnerを設定します。
このページのコマンドを実行するには、次のいずれかの開発環境で
gcloudCLIを設定します:次のコマンドを実行して、デフォルトのGoogle Cloudプロジェクトを設定します:
gcloud config set project PROJECT_IDデフォルトプロジェクトを設定すると、
--projectフラグをgcloudコマンドに渡す必要がなくなります。Compute Engine APIとCloud Run APIを有効にします:
gcloud services enable compute.googleapis.com artifactregistry.googleapis.com run.googleapis.com次のロールをワークロード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"- Cloud Storage管理者(
新しいGitLabプロジェクトでIAMインテグレーションを構成する
組織またはグループのインテグレーションのためにGoogle IAMを設定したら、その組織またはグループの新しいプロジェクトでインテグレーションを再利用できます:
組織またはグループで新しいGitLabプロジェクトを作成します。
GitLabプロジェクトで、設定 > インテグレーションを選択します。
Google Cloud IAMを選択します。
Google Cloudプロジェクトセクションで、以下を入力します:
- プロジェクトID:ワークロードIDプールのGoogle CloudプロジェクトID
- プロジェクト番号:同じプロジェクトのGoogle Cloudプロジェクト番号
Google CloudプロジェクトIDと番号を確認するには、プロジェクトの識別を参照してください。
ワークロードアイデンティティフェデレーションセクションに、以下を入力します:
- プールID:ワークロードIDプールに付けた名前。
- プロバイダーID:OIDCプロバイダーに付けた名前。
ヒント:これらの値は、インテグレーションのセットアップに最初に使用したGitLabプロジェクトからコピーできます。
変更を保存を選択します。提供されているスクリプトは、ワークロードIDプールを作成するため、実行しないでください。既に存在します。
新しいGitLabプロジェクトでGoogle Artifact Registryインテグレーションを構成する
複数のコンテナイメージをArtifact Registryに保存できます。新しいGitLabプロジェクトで同じリポジトリを再利用するには、プロジェクトでGoogle Artifact Managementインテグレーションを構成します。
GitLabプロジェクトで、設定 > インテグレーションを選択します。
Googleアーティファクトの管理を選択します
リポジトリセクションに、以下を入力します:
- Google CloudプロジェクトID:使用するArtifact RegistryリポジトリのプロジェクトID
- リポジトリ名:リポジトリ名
- リポジトリの場所:リポジトリの場所
変更を保存を選択します。ワークロードIDプールは、グループまたは組織内のGitLabユーザーにArtifact Registryの閲覧者とライターのロールを既に許可しているため、提供されているスクリプトは実行しないでください。
GitLabリポジトリをクローンする
SSHまたはHTTPSを使用してGitLabリポジトリを作業環境にクローンするには、Gitリポジトリをローカルコンピューターにクローンするの手順に従ってください。
Dockerfileを作成する
クローンされたリポジトリに、
DockerfileDockerfileという名前の新しいファイルを作成します。以下をコピーして
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"]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インフラストラクチャにデプロイするパイプラインを作成します。
GitLabプロジェクトで、
.gitlab-ci.ymlファイルを作成します。イメージをビルドし、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.gitlab-ci.ymlファイルをGitに追加し、コミットして、GitLabリポジトリにプッシュします。
このパイプラインは、以下を完了します:
- Docker-in-Dockerを使用してイメージ
python-serviceをビルドします。 - GitLabコンテナレジストリにイメージを保存します。
- Google Artifact Registry GitLabコンポーネントを使用して、イメージをGoogle Artifact Registryにプッシュします。
- Google Cloud Runコンポーネントを使用して
python-serviceをデプロイします。
Google Cloud Runでサービスを表示する
Google Cloud Consoleで、Cloud Runページに移動します。
サービスタブで作成したサービスを選択します。
サービスのメトリクスタブが表示され、サービスのリージョン、URL、およびその他の詳細を表示できます。
サービスをプロキシして表示する
サービスはプライベートであるため、認証を行わないと、Google Cloud ConsoleにリストされているURLから表示できません。サービスをテストするには、gcloud CLIを使用して認証を行い、サービスをhttp://localhost:8080にプロキシできます。
サービスをローカルでプロキシするには、次のコマンドを実行します:
gcloud run services proxy SERVICE \
--project PROJECT_ID \
--region=LOCATIONhttp://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サービスを削除する
- Google Cloud Consoleで、Cloud Runページに移動します。
- サービスの横にあるチェックボックスをオンにします。
- 削除を選択します。
Google Cloudプロジェクトを削除する
Caution(注意): プロジェクトを削除すると、次の影響があります:
- Everything in the project is deleted(プロジェクト内のすべてが削除されます)。このドキュメントのタスクに既存のプロジェクトを使用した場合、それを削除すると、プロジェクトで行った他の作業もすべて削除されます。
- Custom project IDs are lost(カスタムプロジェクトIDは失われます)。このプロジェクトを作成したときに、将来使用するカスタムプロジェクトIDを作成した可能性があります。appspot.com URLなど、プロジェクトIDを使用するURLを保持するには、プロジェクト全体を削除する代わりに、プロジェクト内の選択したリソースを削除します。
Google Cloudで複数のアーキテクチャ、チュートリアル、またはクイックスタートチュートリアルを調査することを計画している場合、プロジェクトを再利用すると、プロジェクトのクォータ制限を超えることを回避できます。
- Google Cloud Consoleで、Manage resources(リソースの管理)ページに移動します。
- プロジェクトリストで、削除するプロジェクトを選択し、削除を選択します。
- ダイアログで、プロジェクトIDを入力し、Shut down(シャットダウン)を選択してプロジェクトを削除します。