Развертывание гибкого GAE занимает 30 минут

#google-app-engine #terraform

#google-app-engine #терраформирование #terraform

Вопрос:

У меня есть приведенный ниже код terraform, который работает, но каждый раз, когда я объединяюсь, чтобы освоить и запустить действие github для вызова terraform apply , развертывание занимает 30 минут . Насколько я могу видеть, журналы полны google_app_engine_flexible_app_version.myapp: Still creating... [15m0s elapsed]

и

google_app_engine_service_split_traffic.myapp: Still modifying... [id=apps/myproject/services/myapp, 13m40s elapsed]

Это не совсем часто и быстро выпускается, не так ли? Есть ли что-нибудь, что вы можете объяснить, почему это занимает так много времени?

 resource "google_app_engine_flexible_app_version" "myapp" {
  project    = var.GCP_PROJECT
  service    = "myapp"
  runtime    = "custom"
  version_id = "v${formatdate("YYYYMMDD-hhmmss",timestamp())}"

  noop_on_destroy = false

  lifecycle {
    create_before_destroy = true
  }

  resources {
    cpu = 1
    memory_gb = 1
    disk_gb = 10
  }

  deployment {
    container {
      image = "eu.gcr.io/${var.GCP_PROJECT}/myapp:${var.GIT_SHA}"
    }
  }

  env_variables = {
    ASPNETCORE_ENVIRONMENT = var.ENVIRONMENT
  }

  beta_settings = {
    cloud_sql_instances = "${google_sql_database_instance.gps.connection_name}=tcp:5432"
  }

  manual_scaling {
    instances = 1
  }

  liveness_check {
    path = "/liveness_check"
  }

  readiness_check {
    path = "/readiness_check"
    app_start_timeout = "1800s"
  }
}

resource "google_app_engine_service_split_traffic" "myapp" {
  service = google_app_engine_flexible_app_version.myapp.service

  migrate_traffic = false
  split {
     allocations = {
      (google_app_engine_flexible_app_version.myapp.version_id) = 1.0
     }
  }
}

resource "google_dns_record_set" "myapp" {
  name         = "${local.myapp_domain_name}."
  managed_zone = var.DNS_ZONE_NAME
  type         = "CNAME"
  ttl          = 300
  rrdatas      = ["ghs.googlehosted.com."]
}

resource "google_app_engine_domain_mapping" "myapp" {
  domain_name = local.myapp_domain_name

  override_strategy = "OVERRIDE"

  ssl_settings {
   ssl_management_type = "AUTOMATIC"
  }
}
  

Комментарии:

1. Почему у вас есть google_app_engine_service_split_traffic , если вы просто перенаправляете весь трафик в одно и то же приложение и версию?

2. Кроме того, зачем вам нужно максимальное 30-минутное ожидание проверки готовности? Похоже, что /readiness_check конечная точка вашего приложения может не возвращать ответ 200, а затем, в конечном итоге, она достигает 30-минутного тайм-аута и откатывает развертывание. Я бы проверил это, а также сократил время ожидания до чего-то более разумного, потому что я был бы удивлен, если вы действительно ожидаете, что запуск вашего приложения займет целых 30 минут.

3. Приложение нормально возвращается для готовности, вероятно, следует уменьшить время ожидания, оно проверяет подключения к БД и т.д. Что касается разделения трафика, когда мы выпускаем новую версию, это новая версия, поэтому, я полагаю, она будет медленно переходить к новой версии?

4. Проблема со временем может быть связана с Terraform, созданием контейнеров или облачными сервисами, и, вероятно, потребуется углубленное изучение журналов App Engine, которые мы не можем выполнить здесь. Я бы рекомендовал обратиться в службу поддержки GCP

5. Развертывание обычно занимает около 15-30 минут для меня тоже, хотя это не очень хорошее поведение, я не думаю, что это неправильное поведение.