Google Cloud Platformのステートレスコンテナ実行サービスであるCloud Runに、DockerコンテナをCLIでお手軽にデプロイするスクリプトを作ってみました。
コードはGitHubにあげています。
https://github.com/yolo-kiyoshi/cloud_run_cli
root/
├ .env
├ .param
├ Dockerfile
└ scripts/
└ build_and_push.sh
└ deploy_cloud_run.sh
前提
-
gcloud
コマンドをインストールしていること - Cloud Run APIを有効化していること
参考:こんなに簡単にコンテナをデプロイできちゃって良いんですか?GCP Cloud Runでコンテナを爆速デプロイしてみた
Cloud Runとは
Classmethodさんが簡潔にまとめてくれていますので引用します。
Cloud Runは、HTTPでリクエストを受ける事が可能なステートレスコンテナを実行できるサービスです。
Knativeによって構築されており、Cloud Runによる管理または、GKEクラスタ上にデプロイする事が可能です。前者の場合、開発者がインフラストラクチャを意識する必要が無く、スケールアップ/ダウンも自動で行われます。この為、開発者はコア機能の実装にのみ集中できます。
(引用:https://dev.classmethod.jp/cloud/gcp/gcp_cloud_run_tutorial_sys/)
DockerイメージのビルドとGCRへのプッシュ
DockerfileをもとにDockerイメージをビルドし、Container Repositoryにイメージをプッシュします。
(今回は軽量なalpine
をベースにテキトーなDockerfileを用意しています。)
# for sample
FROM alpine:latest
#!/usr/bin/env bash
set -eu
project=${1:-}
image=${2:-}
tag=${3:-latest}
fullname="gcr.io/${project}/${image}:${tag}"
# read setting file
docker build -t ${image}:${tag} .
docker tag ${image}:${tag} ${fullname}
docker push ${fullname}
echo "image successfully pushed to: ${fullname}"
上記をもとに、イメージ名とタグを引数にbuild_and_push.sh
を実行することで、ビルドとGCRへのプッシュができます。
./scripts/build_and_push.sh <project_name> <image_name> <tag>
Cloud RunへのDockerコンテナのデプロイ
環境変数.env
とCloud Run実行引数.param
を用意します。
PATH1=hoge
PATH2=fuga
# set platform from [managed, gke, kubernetes]
PLATFORM=managed
# set region from [managed, gke, kubernetes]
REGION=us-central1
#!/usr/bin/env bash
set -eu
service=${1:-}
project=${2:-}
image=${3:-}
tag=${4:-latest}
fullname="gcr.io/${project}/${image}:${tag}"
# read param
env=$(cat ./.env | tr '\n' ',' | sed -e 's/,$/\n/g')
. .param
gcloud run deploy ${service} \
--image=${fullname} \
--platform=${PLATFORM} \
--region=${REGION} \
--update-env-vars ${env}
上記をもとに、サービス名、イメージ名、タグを引数にdeploy_cloud_run.sh
を実行することで、GCR上のDockerイメージからCloud Runにコンテナをデプロイできます。
./scripts/deploy_cloud_run.sh <service_name> <project_name> <image_name> <tag>
注意
- .envに記載した環境変数は、./scripts/deploy_cloud_run.sh実行時に--update-env-varsパラメータにカンマ区切りで展開されので、コメントは入れないこと
- --clusterなどの実行パラメータを追加する場合は./scripts/deploy_cloud_run.shにも合わせて追加すること