GCPのCloud RunをTerraformでいい感じに利用する方法を考えてみました。
ソースコードからイメージをビルドしてCloud Runにデプロイするところまでを目指します。
既存の機能だとビルドができないっぽいのでシェルやらハッシュチェックやらを駆使していい感じに仕上げます。若干Dirty hack感はありますが。
# ソースコードをzipに固める。
data "archive_file" "src_archive" {
type = "zip"
source_dir = "./src"
output_path = "./src.zip"
}
# 既存の機能でビルドはできないので、シェルを直接たたく。
resource "null_resource" "build" {
triggers = { # ファイルのハッシュ変更を実行のトリガにする。
file_hashes = jsonencode({
for fn in fileset("src", "**") :
fn => filesha256("src/${fn}")
})
}
provisioner "local-exec" {
# ビルドコマンド
command = "gcloud builds submit --project your-project-name --tag gcr.io/your-project-name/image_name"
working_dir = "./src/"
}
}
# Cloud Runをデプロイする。
resource "google_cloud_run_service" "service" {
depends_on = [null_resource.build]
name = "service"
location = "us-east1"
template {
spec {
containers {
image = "gcr.io/your-project-name/image_name"
env {
# 環境変数が変わるとリソースが作り直されるので、ソースコードのハッシュを入れている。
name = "SOURCECODE_MD5"
value = data.archive_file.src_archive.output_md5
}
}
}
}
traffic {
percent = 100
latest_revision = true
}
}
いじょう。
こんなに頑張ってハックしなくても簡単にできるようにアップデートしてほしいですね。