Введение в развёртывание на нескольких облаках

В постоянно меняющемся мире разработки программного обеспечения потребность в эффективных и автоматизированных процессах развёртывания стала первостепенной. С ростом популярности мультиоблачных стратегий разработчики больше не привязаны к одному поставщику облачных услуг, но эта гибкость влечёт за собой ряд проблем. В этой статье мы подробно рассмотрим процесс создания инструмента для автоматизации развёртывания приложений Go в мультиоблачной среде с использованием передовых технологий и лучших практик.

Почему стоит выбрать Go для развёртывания на нескольких облаках?

Go, или Golang, — отличный выбор для создания масштабируемых и безопасных приложений, особенно в мультиоблачной конфигурации. Его переносимость, возможности параллелизма и строгий синтаксис делают его идеальным для разработки микросервисов и межплатформенного развёртывания. Приложения Go могут без проблем работать на различных облачных платформах, включая Google App Engine и Google Cloud Run, обеспечивая лёгкое масштабирование и развёртывание.

Настройка мультиоблачной среды

Прежде чем углубляться в процесс автоматизации, крайне важно настроить мультиоблачную среду. Здесь мы рассмотрим использование Google Cloud Platform (GCP) и других облачных провайдеров, но принципы применимы к любой мультиоблачной настройке.

Инфраструктура как код (IaC)

Инфраструктура как код — ключевой компонент автоматизации мультиоблачного развёртывания. Такие инструменты, как Terraform, позволяют легко управлять ресурсами на нескольких облачных платформах. Вот пример того, как можно настроить базовую конфигурацию Terraform для GCP:

provider "google" {
  project = "your-project-id"
  region  = "us-central1"
}

resource "google_compute_instance" "example" {
  name         = "example-instance"
  machine_type = "f1-micro"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }

  network_interface {
    network = google_compute_network.example.self_link
  }
}

resource "google_compute_network" "example" {
  name                    = "example-network"
  auto_create_subnetworks = "true"
}

Автоматизация развёртывания с помощью Cloud Deploy

Google Cloud Deploy — мощный инструмент для автоматизации развёртывания и развёртывания приложений на нескольких целевых объектах. Вот как вы можете использовать его для автоматизации развёртывания приложения Go.

Создание конвейеров доставки и целевых объектов

Сначала вам нужно определить конвейер доставки и цели развёртывания. Вот пример конфигурации с использованием clouddeploy.yaml:

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
  name: my-automation-demo-app-1
  description: Automation demonstration pipeline
serialPipeline:
  stages:
    - targetId: automation-quickstart-dev
    - targetId: automation-quickstart-staging
  profiles: []
  strategy:
    canary:
      runtimeConfig:
        kubernetes:
          serviceNetworking:
            service: "my-service"
            deployment: "my-deployment"
          canaryDeployment:
            percentages: [25]
            verify: false

---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: automation-quickstart-dev
  description: Dev cluster to demonstrate deploy automation
gke:
  cluster: projects/your-project-id/locations/us-central1/clusters/automation-quickstart-cluster-dev

---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: automation-quickstart-staging
  description: Staging cluster to demonstrate deploy automation
gke:
  cluster: projects/your-project-id/locations/us-central1/clusters/automation-quickstart-cluster-staging

---
apiVersion: deploy.cloud.google.com/v1
kind: Automation
metadata:
  name: my-automation-demo-app-1/promote
  description: promotes a release
suspended: false
serviceAccount: [email protected]
selector:
  targets:
    - id: automation-quickstart-dev
rules:
  - promoteReleaseRule:
      name: "promote-release"
      wait: 1m
      toTargetId: "@next"

---
apiVersion: deploy.cloud.google.com/v1
kind: Automation
metadata:
  name: my-automation-demo-app-1/advance
  description: advances a rollout
suspended: false
serviceAccount: [email protected]
selector:
  targets:
    - id: automation-quickstart-staging
rules:
  - advanceRolloutRule:
      name: "advance-rollout"
      sourcePhases: ["canary-25"]
      wait: 1m

Регистрация конвейера и целевых объектов в Cloud Deploy

Чтобы зарегистрировать конвейер и целевые объекты в Cloud Deploy, используйте следующую команду:

gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=your-project-id

Непрерывная интеграция и непрерывная доставка (CI/CD)

Надёжный конвейер CI/CD имеет решающее значение для автоматизации процесса развёртывания. Вот краткий обзор того, как вы можете интегрировать приложение Go с конвейером CI/CD с помощью таких инструментов, как GitHub Actions или GitLab CI/CD.

Пример рабочего процесса GitHub Actions

Вот пример рабочего процесса GitHub Actions, который создаёт и развёртывает приложение Go:

name: Build and Deploy

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: '1.20'

      - name: Build and test
        run: |
          go build -o myapp main.go
          go test ./...          

      - name: Deploy to Cloud Deploy
        uses: google-github-actions/deploy-cloud-deploy@v0
        with:
          credentials: ${{ secrets.GOOGLE_CREDENTIALS }}
          delivery-pipeline: my-automation-demo-app-1
          release: my-release
          region: us-central1
          project-id: your-project-id

Визуализация процесса развёртывания

Последовательность этапов процесса развёртывания представлена на схеме с использованием синтаксиса Mermaid:

sequenceDiagram participant Разработчик participant GitHub participant Действия GitHub как «Действия GitHub» participant Cloud Deploy как «Cloud Deploy» participant GKE Note over Разработчиком,GitHub: отправить код в основную ветку Разработчик->>GitHub: отправить код GitHub->>Действия GitHub: запустить рабочий процесс Действия GitHub->>Действия GitHub: проверка кода, настройка Go, сборка и тестирование Действия GitHub->>Cloud Deploy: развернуть в Cloud Deploy Cloud Deploy->>GKE: развернуть на целевом объекте dev Примечание Cloud Deploy,GKE: автоматизация продвигает релиз на промежуточный целевой объект Cloud Deploy->>GKE: развертывание на промежуточном целевом объекте с канареечной стратегией Примечание Cloud Deploy,GKE: автоматизация ускоряет выпуск до стабильной фазы Cloud Deploy->>GKE: развёртывание в стабильной фазе

Заключение

Автоматизация развёртывания приложений Go в мультиоблачной среде — сложный, но весьма полезный процесс. Используя такие инструменты, как Terraform для IaC, Google Cloud Deploy для автоматизированных выпусков и конвейеры CI/CD с GitHub Actions или GitLab CI/CD, вы можете упростить процесс развёртывания, уменьшить количество человеческих ошибок и обеспечить согласованность инфраструктуры.

Помните, что ключ к успешной мультиоблачной стратегии заключается в абстрагировании сложности, обеспечении согласованности и автоматизации как можно большего количества процессов. С помощью этих инструментов и методов вы сможете больше сосредоточиться на инновациях и меньше — на повторяющихся задачах, продвигая свой бизнес вперёд в постоянно меняющемся мире разработки программного обеспечения.