Как с помощью CloudFront можно снизить затраты на использование облачных сервисов?

Ответ

Основной способ экономии — эффективное кэширование контента на edge-локациях, что снижает нагрузку и исходящий трафик с origin-серверов (EC2, S3, ALB).

Ключевые настройки для экономии:

  1. Оптимизация TTL:

    • Для статики (изображения, CSS, JS) устанавливаю max_ttl до года.
    • Для динамического контента с частыми обновлениями настраиваю более короткие TTL или инвалидацию.
  2. Использование Origin Shield: Включаю для уменьшения количества запросов к origin, особенно при большом количестве точек присутствия (POP).

  3. Сжатие (Compression): Всегда активирую сжатие Gzip/Brotli для текстовых форматов, что сокращает объем передаваемых данных.

  4. Географическое ограничение (Geo Restriction): Если сервис работает не по всему миру, блокирую трафик из нецелевых регионов, чтобы не платить за него.

Пример настройки кэширования в Terraform для S3 origin:

resource "aws_cloudfront_distribution" "static_site" {
  origin {
    domain_name = aws_s3_bucket.static.bucket_regional_domain_name
    origin_id   = "S3-static"
    s3_origin_config {
      origin_access_identity = aws_cloudfront_origin_access_identity.default.cloudfront_access_identity_path
    }
  }

  default_cache_behavior {
    target_origin_id = "S3-static"
    viewer_protocol_policy = "redirect-to-https"
    allowed_methods  = ["GET", "HEAD", "OPTIONS"]
    cached_methods   = ["GET", "HEAD"]
    compress = true

    forwarded_values {
      query_string = false
      cookies { forward = "none" }
    }
    # Длительные TTL для статики
    min_ttl     = 0
    default_ttl = 86400    # 1 день
    max_ttl     = 31536000 # 1 год
  }

  # Включаем Origin Shield для основного региона
  origin_shield {
    enabled = true
    origin_shield_region = "eu-west-1"
  }
}

Мониторинг: Регулярно анализирую отчеты CloudFront Usage Reports и метрики в CloudWatch (например, BytesDownloaded, Requests), чтобы выявлять неоптимальные паттерны запросов и корректировать политики кэширования.

Ответ 18+ 🔞

Слушай, я тут подумал — как бы нам на CloudFront сэкономить так, чтобы не в ущерб делу, а то иной раз счета приходят — волнение ебать, глаза на лоб лезут. Всё просто, как три копейки: надо грамотно кэшировать на этих самых edge-локациях, чтобы origin-сервера (эти наши EC2, S3, ALB) не вздрачивались по каждому чиху. Меньше запросов к ним — меньше исходящего трафика, а это и есть наша экономия, ёпта.

Вот на чём собаку съел:

  1. TTL настраиваю с умом:
    Статику — картинки, CSS, JS — выставляю max_ttl аж на год, пусть лежат, где положено. А вот для динамического контента, который часто меняется, TTL короче делаю или инвалидацию настраиваю, чтобы не показывал пользователям хуй в пальто — устаревшую хуйню.

  2. Origin Shield включаю:
    Это такая хитрая жопа, которая уменьшает количество прямых запросов к origin, особенно когда точек присутствия (POP) — овердохуища. Одна точка собирает запросы от остальных и сама дёргает origin, вместо того чтобы все скопом на него наваливались.

  3. Сжатие (Compression) не забываю:
    Gzip/Brotli всегда включаю для текстовых форматов. Зачем гонять лишние байты, если можно их прижать? Экономия на ровном месте, ядрёна вошь.

  4. Географическое ограничение (Geo Restriction):
    Если сервис не для всей планеты, а только для своих, то зачем платить за трафик из каких-нибудь левых регионов? Блокирую их нахуй, и всё.

Вот тебе пример, как это в Terraform для S3 origin выглядит, смотри:

resource "aws_cloudfront_distribution" "static_site" {
  origin {
    domain_name = aws_s3_bucket.static.bucket_regional_domain_name
    origin_id   = "S3-static"
    s3_origin_config {
      origin_access_identity = aws_cloudfront_origin_access_identity.default.cloudfront_access_identity_path
    }
  }

  default_cache_behavior {
    target_origin_id = "S3-static"
    viewer_protocol_policy = "redirect-to-https"
    allowed_methods  = ["GET", "HEAD", "OPTIONS"]
    cached_methods   = ["GET", "HEAD"]
    compress = true

    forwarded_values {
      query_string = false
      cookies { forward = "none" }
    }
    # Ставим TTL по-взрослому для статики
    min_ttl     = 0
    default_ttl = 86400    # 1 день
    max_ttl     = 31536000 # 1 год
  }

  # Врубаем Origin Shield, чтоб всё по фэншую
  origin_shield {
    enabled = true
    origin_shield_region = "eu-west-1"
  }
}

А ещё мониторю всё, как ястреб:
Смотрю CloudFront Usage Reports и метрики в CloudWatch (типа BytesDownloaded, Requests). Если вижу, что какие-то запросы идут криво или кэш не попадает — сразу политики подкручиваю. А то бывает, настроил и забыл, а там пиздопроебибна какая-то в логике, и деньги на ветер. Терпения ноль ебать, когда такое вижу.