📚

Cloud Run デプロイ方法 ~Artifact Registry編~

2023/06/21に公開

Cloud Run デプロイのイメージ

  1. Dockerfile --- bulid ---> Docker image
  2. Docker image --- push ---> Artifact Registry
  3. Artifact Registry --- deploy ---> Cloud Run

  • buildコマンドで、Dockerイメージの作成。pushコマンドで、Artifact Registryに追加。deployコマンドで、Cloud Runに実装というイメージをもって、コマンドを使用してください。
  • Dockerfileの作成が必要な方法と、作成しなくてもできる方法の2通りあります。
  • Google CloudのArtifact Registryのページを確認しながらだと、イメージしやすいです。

作成環境

  • Cloud Workstations (local環境でも、必要な権限があればできると思います)
  • Container Registryよりも、Artifact Registryを利用することが推奨されています。詳しくは、Container Registry の概要 で確認してください。
  • 今回のソースコードはGo言語で作成しました。他の言語でも可能と思います(多分...)。

変数の説明

  • REGION = リポジトリのリージョン (us-central1, asia-northeast1 など)
  • PROJECT_ID = Google Cloud Console プロジェクト ID
  • REPOSITORY_NAME = Artifact Registryのリポジトリ名
  • IMAGE = リポジトリのイメージ
  • TAG = タグ
  • IMAGE_PATH = Dockerイメージがある場所

注意点

  • コマンド実行するディレクトリに注意してください。
  • 必要な権限があるか確認してください。

Arifact Registry 作成

  • Dockerイメージをいれるための、リポジトリを作成します。
  • コマンドを使用せず、Google Cloudの画面上で作成することもできます。
  1. Repository create

    gcloud artifacts repositories create [REPOSITORY_NAME] --location=[REGION] --repository-format=docker --project=[PROJECT_ID]
    
  2. 認証

    gcloud auth configure-docker [REGION]-docker.pkg.dev
    

Cloud Run デプロイ①

  • こちらのデプロイ方法は、Dockerfileが必要です。
  • pushコマンド後、DockerイメージがArtifact Registryに保存できれば、Google Cloudの画面上で、Clour Run以外にも、GKE、GCEへデプロイが可能になります。
  1. build (Dockerfile -> Docker image)

    docker build -t [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] .
    
  2. push (Docker image -> Artifact Registry)

    docker push [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG]
    
  3. delpoy (Artifact Registry -> Cloud Run)

  • サブネットを使う場合は、リージョンはVPCサブネットと同じものを選択する

    gcloud run deploy --image [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] --platform=managed --project=[PROJECT_ID]
    
  • docker build -t us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 .
    
    docker push us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0
    
    gcloud run deploy --image us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 --platform=managed --project=my-project
    

変数利用バージョン

  • 変数宣言さえすれば、2,3はコピペでできます
  1. 変数の設定

    REGION="[REGION]"
    PROJECT_ID="[PROJECT_ID]"
    REPOSITORY_NAME="[REPOSITORY_NAME]"
    IMAGE="[IMAGE]"
    TAG="[TAG]"
    
    REGION="us-central1"
    PROJECT_ID="my-project"
    REPOSITORY_NAME="my-repository"
    IMAGE="my-image"
    TAG="v1.0"
    
  2. IMAGE_PATH の定義 (変数名はなんでもいいです)

    IMAGE_PATH="$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY_NAME/$IMAGE"
    
  3. コマンドの実行

    • 上2行はリポジトリ作成です。必要に応じて、追加・削除してください。
    gcloud artifacts repositories create $REPOSITORY_NAME --location $REGION --repository-format docker --project=$PROJECT_ID
    
    gcloud auth configure-docker $REGION-docker.pkg.dev
    
    docker build -t $IMAGE_PATH/$TAG .
    
    docker push $IMAGE_PATH:$TAG
    
    gcloud run deploy --image $IMAGE_PATH:$TAG --platform=managed --project=$PROJECT_ID
    

Cloud Run デプロイ②

  • こちらのデプロイ方法は、Dockerfileは不必要です。
  • Buildpacksを利用し、コンテナイメージを自動的に作成してくれます。(packコマンド利用には、インストールが必要になります)
  1. build

    pack build [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE] --builder gcr.io/buildpacks/builder
    
  2. tag

    • packコマンドはtagを付けることができないので、tagコマンドでtagを付けます
    docker tag [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE] [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG]
    
  3. push (Docker image -> Artifact Registry)

    docker push [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG]
    
  4. delpoy (Artifact Registry -> Cloud Run)

    gcloud run deploy --image [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] --platform=managed --project=[PROJECT_ID]
    
  • pack build us-central1-docker.pkg.dev/my-project/my-repository/my-image --builder gcr.io/buildpacks/builder
    
    docker tag us-central1-docker.pkg.dev/my-project/my-repository/my-image us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0
    
    docker push us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0
    
    gcloud run deploy --image us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 --platform=managed --project=my-project
    

変数利用 バージョン

  1. 変数の設定

    REGION="[REGION]"
    PROJECT_ID="[PROJECT_ID]"
    REPOSITORY_NAME="[REPOSITORY_NAME]"
    IMAGE="[IMAGE]"
    TAG="[TAG]"
    
    REGION="us-central1"
    PROJECT_ID="my-project"
    REPOSITORY_NAME="my-repository"
    IMAGE="my-image"
    TAG="v1.0"
    
  2. IMAGE_PATH の定義

    IMAGE_PATH="$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY_NAME/$IMAGE"
    
  3. コマンドの実行

    gcloud artifacts repositories create $REPOSITORY_NAME --location=$REGION --repository-format=docker --project=$PROJECT_ID
    
    gcloud auth configure-docker $REGION-docker.pkg.dev
    
    pack build $IMAGE_PATH --builder gcr.io/buildpacks/builder
    
    docker tag $IMAGE_PATH $IMAGE_PATH:$TAG
    
    docker push $IMAGE_PATH:$TAG
    
    gcloud run deploy --image $IMAGE_PATH:$TAG --platform=managed --project=$PROJECT_ID
    

参考資料

https://cloud.google.com/run/docs/deploying?hl=ja
https://cloud.google.com/artifact-registry/docs/overview?hl=ja
https://cloud.google.com/docs/buildpacks/overview?hl=ja
https://cloud.google.com/sdk/gcloud/reference/artifacts/repositories/create
https://cloud.google.com/sdk/gcloud/reference/run/deploy

Discussion