#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 минут для меня тоже, хотя это не очень хорошее поведение, я не думаю, что это неправильное поведение.