Облачный запуск это платформа без сервера от Google Cloud развернуть и запустить контейнеры. Он полностью управляется, автоматически, и имеет щедрый бесплатный уровень Анкет Cloud Run можно использовать для обслуживания RESTFUL WEB API, приложений WebSocket или микросервисов, подключенных GRPC. Он также хорошо интегрируется с другими облачными решениями Google, такими как облачные задачи, облачный планировщик и Pub/sub.
Terraform это популярный инструмент с открытым исходным кодом для запуска инфраструктуры в качестве кода. Terraform позволяет вам управлять и развернуть инфраструктуру от нескольких поставщиков, одним из которых является Google Cloud. Если вы впервые читаете о Terraform, вы можете проверить это введение первый.
В этой статье вы увидите, как развернуть сервис Cloud Run в Google Cloud с помощью Terraform. Вся инфраструктура будет написана с использованием HCL, местного синтаксиса для языка Terraform. К концу учебного пособия вы должны получить сервис и запустить в облаке и URL -адрес для его доступа.
Предварительные условия
Чтобы следовать этому уроку, вам понадобится:
- Terraform Cli. Я рекомендую использовать последнюю версию, в настоящее время v0.14. Инструкции по загрузке и установке Terraform можно найти Здесь Анкет
- Google Cloud SDK. Самая последняя версия также должна хорошо работать для этого урока. Инструкции по установке Здесь Анкет
- Учетная запись Google Cloud. Если у вас его нет, создайте его Здесь Анкет
Начальная настройка
Начните с аутентификации SDK в Google Cloud:
# Authenticate to Google Cloud gcloud auth application-default login
Следуйте веб -потокам, чтобы получить учетные данные доступа. К концу этого шага вы сможете выполнять команды на SDK, аналогичную учетной записи службы.
Создайте новый проект, в котором будет развернута ваша служба Cloud Run. Заменить Project_id
и Project_Name
с желаемыми значениями:
gcloud projects create "PROJECT_ID" --name="PROJECT_NAME"
Создайте папку с файлом HCL внутри:
mkdir my-service && cd my-service touch main.tf
Для простоты весь код Terraform в следующих шагах будет добавлен в main.tf
Анкет
Создание вашего первого сервиса
Начните с добавления требований к Terraform и поставщику Google на main.tf
:
# main.tf terraform { required_version = ">= 0.14" required_providers { # Cloud Run support was added on 3.3.0 google = ">= 3.3" } }
Это потребует, чтобы версия Terraform была последней, а провайдер Google был, по крайней мере, в версии 3.3
— Когда была добавлена поддержка Cloud Run.
Теперь добавьте конфигурацию поставщика Google. Заменить Project_id
со значением из предыдущего шага:
# main.tf provider "google" { # Replace `PROJECT_ID` with your project project = "PROJECT_ID" }
API Cloud Run не включен по проектам по умолчанию. Добавьте следующий ресурс, чтобы включить его:
# main.tf # Enables the Cloud Run API resource "google_project_service" "run_api" { service = "run.googleapis.com" disable_on_destroy = true }
Теперь создайте сервис Cloud Run в US-Central1
область, край:
# main.tf # Create the Cloud Run service resource "google_cloud_run_service" "run_service" { name = "app" location = "us-central1" template { spec { containers { image = "gcr.io/google-samples/hello-app:1.0" } } } traffic { percent = 100 latest_revision = true } # Waits for the Cloud Run API to be enabled depends_on = [google_project_service.run_api] }
Давайте остановимся на некоторое время и проверим, что делает код выше:
имя
: название вашего сервиса. Он будет отображаться в публичном URL.Место
: регион, где будет работать ваш сервис. Смотрите все параметры Здесь Анкетизображение
: Изображение Docker, которое будет использоваться для создания контейнера. Cloud Run имеет прямую поддержку изображений из Контейнерный реестр и Реестр артефактов Анкеттрафик
: контролирует трафик для этого пересмотра.процент
Собственность указывает, сколько трафика будет перенаправлен на этот пересмотр.Последняя_Ревиция
Указывает, что эта конфигурация трафика должна быть использована для последней редакции.зависит_on
: В ожидании ресурса будет готов, в данном случае API Cloud Run.
Вызывая услугу
По умолчанию сервисы Cloud Run являются частными и защищены Iam Анкет Чтобы получить к ним доступ, вам понадобятся действительные учетные данные, по крайней мере, с Cloud Run Invoker Набор разрешений.
Давайте изменим это и сделаем услугу публично доступной через конечную точку HTTP.
Есть и другие способы, кроме HTTP -запросов, чтобы запустить услугу. Например, к ним можно получить доступ к запросам GRPC, веб -питаниям и другими облачными продуктами Google, такими как Cloud Scheduler.
Добавьте следующий код на main.tf
Чтобы разоблачить свой сервис:
# main.tf # Allow unauthenticated users to invoke the service resource "google_cloud_run_service_iam_member" "run_all_users" { service = google_cloud_run_service.run_service.name location = google_cloud_run_service.run_service.location role = "roles/run.invoker" member = "allUsers" }
Приведенный выше ресурс добавляет разрешение на вызов услуги всем в Интернете. аллеисты
Идентификатор — это особое значение, которое представляет аутентифицированные и несаутентированные пользователей.
Чтобы отобразить URL -адрес службы в выводе команды Terraform, добавьте этот вывод в конфигурацию:
# main.tf # Display the service URL output "service_url" { value = google_cloud_run_service.run_service.status[0].url }
Развертывание инфраструктуры
На этом этапе у вас есть все, что нужно для развертывания инфраструктуры для Google Cloud с помощью Terraform.
Начните с инициализации конфигурации. Запустите следующую команду в вашем терминале:
# Initialize Terraform configuration terraform init
Запустить План терраформ
Чтобы проверить изменения, которые будут применяться:
# Plan the changes terraform plan
Если все правильно, вы увидите это 3 ресурсы будет создан и будет отображаться URL -адрес службы.
Plan: 3 to add, 0 to change, 0 to destroy. Changes to Outputs: + service_url = (known after apply)
Запустить терраформ применить
Чтобы применить все изменения:
# Apply all the changes terraform apply
Если все пойдет хорошо, вы увидите это в конце вывода:
Apply complete! Resources: 3 added, 0 changed, 0 destroyed. Outputs: service_url = https://app-cvmew7554a-uc.a.run.app
Вы можете проверить, работает ли служба с помощью скручивание
:
curl https://app-cvmew7554a-uc.a.run.app Hello, world! Version: 1.0.0 Hostname: localhost
Обновление службы
Terraform можно использовать не только для того, чтобы подтолкнуть вашу первоначальную инфраструктуру в облачный запуск, но и для ее обновления.
Cloud Run работает с Ревизии Анкет Когда конфигурация изменена или добавляется новое изображение, в результате создается новая ревизия. Затем вы можете перенаправить весь трафик на новую ревизию и начать обслуживание вашего обновленного приложения.
Чтобы обновить свой сервис, просто измените значение в Изображение
свойство и передайте ему новое изображение:
# main.tf resource "google_cloud_run_service" "run_service" { name = "app" # ... template { spec { containers { # Change `hello-app:1.0` to `hello-app:2.0` 👇 image = "gcr.io/google-samples/hello-app:2.0" } } } # ... }
При этом Terraform создаст новую пересмотр в Cloud Run. Предыдущая ревизия сохранилась, но из -за трафик
Опции, определенные ранее, он не получит никакого трафика.
Запустить терраформ применить
Чтобы развернуть изменения:
# Apply all the changes terraform apply
Вы можете проверить, что новое изображение живет с помощью Curl
:
curl https://app-cvmew7554a-uc.a.run.app Hello, world! Version: 2.0.0 # Now serving 2.0.0 Hostname: localhost
Убираться
Чтобы удалить все ресурсы, созданные с помощью Terraform, запустите следующую команду и подтвердите подсказку:
# Destroy all the infrastructure created by Terraform terraform destroy
Это отключит API Cloud Run, удалите службу Cloud Run и его разрешения.
Проект был создан с использованием gcloud
CLI инструмент, поэтому вам нужно будет удалить его вручную. Для этого вы можете бежать:
# Remove the Google Cloud project gcloud projects delete PROJECT_ID
—
Спасибо, что прочитали это далеко!
Оформление Hyperfoo.io Для более терраформных статей!
Оригинал: «https://dev.to/ruanmartinelli/deploying-to-google-cloud-run-with-terraform-2km7»