1) Cloud Run Provision using Cloud Console.
Get image from dockerhub public
Như bạn thấy thường dockerhub theo kiểu official thì chúng ta chỉ cần copy tên image là ok!
Get image from different hub that isn’t Dockerhub Official(hub.docker.com)
Mình ví dụ như mình sử dụng harbor
docker pull docker.nimtechnology.com/dockerhub/kennethreitz/httpbin:latest
Chúng ta cần push image lên gcr
Mình sẽ cho gửi bạn 1 link
https://console.cloud.google.com/gcr/images/google-samples/global/hello-app
Giờ click create thôi
Nếu bạn có container của bạn có expose port http thì lúc này bạn cấu hình port là gì
tý chúng ta có thể truy cập bằng link như ở trên ảnh và có ssl luôn –> ngon
Giờ bạn có nhu cầu deploy 1 verision mới cho app đó
Giờ xoá và qua tạo bằng terraform thôi:
2) Hands-on Cloud Run with Terraform
2.1) Cloud Run with Terraform
resource "google_cloud_run_service" "run-app-from-tf" {
name = "run-app-from-tf"
location = "asia-southeast1"
template {
spec {
containers {
image = "gcr.io/google-samples/hello-app:1.0"
}
}
}
}
Giờ bạn gõ terraform init và terraform apply
và đương nhiên là chúng ta sẽ gặp lỗi
Error: Error creating Service: googleapi: Error 403: Permission ‘run.services.create
‘ denied on resource ‘namespaces/terraform-gcp-346216/services/run-app-from-tf’ (or resource may not exist).
Giờ terraform apply tiếp
2.2) allow Public access
Chúng ta sẽ tìm hiểu link dưới:
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_service_iam
role
– (Required) The role that should be applied. Only onegoogle_cloud_run_service_iam_binding
can be used per role. Note that custom roles must be of the format[projects|organizations]/{parent-name}/roles/{role-name}
.policy_data
– (Required only bygoogle_cloud_run_service_iam_policy
) The policy data generated by agoogle_iam_policy
data source.
2.2.1) Practice in UI
2.2.2)Config terraform script
resource "google_cloud_run_service" "run-app-from-tf" {
name = "run-app-from-tf"
location = "asia-southeast1"
template {
spec {
containers {
image = "gcr.io/google-samples/hello-app:1.0"
# image = "gcr.io/google-samples/hello-app:2.0"
}
}
}
}
resource "google_cloud_run_service_iam_policy" "pub_access" {
service = google_cloud_run_service.run-app-from-tf.name
location = google_cloud_run_service.run-app-from-tf.location
policy_data = data.google_iam_policy.pub-1.policy_data
}
data "google_iam_policy" "pub-1" {
binding {
role = "roles/run.invoker"
members = [ "allUsers", ]
}
}
Bạn cần đọc thêm về google_iam_policy
Giờ apply tiếp
Giờ thì chắc chắn là truy cập được!
2.3) Deploy new revision
resource "google_cloud_run_service" "run-app-from-tf" {
name = "run-app-from-tf"
location = "asia-southeast1"
template {
spec {
containers {
# image = "gcr.io/google-samples/hello-app:1.0"
image = "gcr.io/google-samples/hello-app:2.0"
}
}
}
}
resource "google_cloud_run_service_iam_policy" "pub_access" {
service = google_cloud_run_service.run-app-from-tf.name
location = google_cloud_run_service.run-app-from-tf.location
policy_data = data.google_iam_policy.pub-1.policy_data
}
data "google_iam_policy" "pub-1" {
binding {
role = "roles/run.invoker"
members = [ "allUsers", ]
}
}
Mình thực hiện thay đổi version của image và chạy terraform apply
Vậy giờ chúng ta muốn cần bằng tải.
Bạn cần nhớ tên của các container để cấu hình cần bằng tải:
resource "google_cloud_run_service" "run-app-from-tf" { name = "run-app-from-tf" location = "asia-southeast1" template { spec { containers { # image = "gcr.io/google-samples/hello-app:1.0" image = "gcr.io/google-samples/hello-app:2.0" } } } traffic { revision_name = "run-app-from-tf-ldhlx" percent = 50 } traffic { revision_name = "run-app-from-tf-qdkh6" percent = 50 } } resource "google_cloud_run_service_iam_policy" "pub_access" { service = google_cloud_run_service.run-app-from-tf.name location = google_cloud_run_service.run-app-from-tf.location policy_data = data.google_iam_policy.pub-1.policy_data } data "google_iam_policy" "pub-1" { binding { role = "roles/run.invoker" members = [ "allUsers", ] } }
Cuối cũng xong khi đã học xong thì đừng quên terraform destroy nhé