Рубрики
Uncategorized

Развертывание в Google Cloud Run с Terraform

Cloud Run — это платформа без сервера от Google Cloud для развертывания и запуска контейнеров. Это полностью … Tagged с Terraform, Googlecloud, DevOps.

Облачный запуск это платформа без сервера от 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»