Ответ
Основной способ экономии — эффективное кэширование контента на edge-локациях, что снижает нагрузку и исходящий трафик с origin-серверов (EC2, S3, ALB).
Ключевые настройки для экономии:
-
Оптимизация TTL:
- Для статики (изображения, CSS, JS) устанавливаю
max_ttlдо года. - Для динамического контента с частыми обновлениями настраиваю более короткие TTL или инвалидацию.
- Для статики (изображения, CSS, JS) устанавливаю
-
Использование Origin Shield: Включаю для уменьшения количества запросов к origin, особенно при большом количестве точек присутствия (POP).
-
Сжатие (Compression): Всегда активирую сжатие Gzip/Brotli для текстовых форматов, что сокращает объем передаваемых данных.
-
Географическое ограничение (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) не вздрачивались по каждому чиху. Меньше запросов к ним — меньше исходящего трафика, а это и есть наша экономия, ёпта.
Вот на чём собаку съел:
-
TTL настраиваю с умом:
Статику — картинки, CSS, JS — выставляюmax_ttlаж на год, пусть лежат, где положено. А вот для динамического контента, который часто меняется, TTL короче делаю или инвалидацию настраиваю, чтобы не показывал пользователям хуй в пальто — устаревшую хуйню. -
Origin Shield включаю:
Это такая хитрая жопа, которая уменьшает количество прямых запросов к origin, особенно когда точек присутствия (POP) — овердохуища. Одна точка собирает запросы от остальных и сама дёргает origin, вместо того чтобы все скопом на него наваливались. -
Сжатие (Compression) не забываю:
Gzip/Brotli всегда включаю для текстовых форматов. Зачем гонять лишние байты, если можно их прижать? Экономия на ровном месте, ядрёна вошь. -
Географическое ограничение (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). Если вижу, что какие-то запросы идут криво или кэш не попадает — сразу политики подкручиваю. А то бывает, настроил и забыл, а там пиздопроебибна какая-то в логике, и деньги на ветер. Терпения ноль ебать, когда такое вижу.