
Migracja do chmury AWS
Przeniesienie infrastruktury sklepu internetowego do AWS z optymalizacją kosztów i wydajności.
Wyzwanie
Firma e-commerce borykała się z następującymi problemami: • Częste przestoje podczas szczytów sprzedażowych (Black Friday, promocje) • Wysokie koszty utrzymania dedykowanego serwera • Brak automatycznego skalowania i redundancji • Długi czas wdrażania nowych funkcji (ponad 2 godziny) • Problemy z wydajnością bazy danych podczas dużego ruchu
Rozwiązanie
Zaprojektowaliśmy i wdrożyliśmy nowoczesną architekturę w AWS: 1. Infrastruktura jako kod (Terraform): • Automatyczne tworzenie i zarządzanie zasobami • Wersjonowanie infrastruktury • Możliwość szybkiego odtworzenia środowiska 2. Architektura wysokiej dostępności: • Multi-AZ deployment dla zwiększenia niezawodności • Auto Scaling Group dla aplikacji • RDS Multi-AZ dla bazy danych • ElastiCache dla sesji i cache 3. Optymalizacja wydajności: • CloudFront CDN dla statycznych zasobów • Route 53 z GeoDNS dla routingu ruchu • Application Load Balancer z SSL termination • S3 dla przechowywania mediów 4. Monitoring i bezpieczeństwo: • CloudWatch z niestandardowymi metrykami • AWS WAF dla ochrony przed atakami • VPC z podziałem na prywatne i publiczne subnety • Automatyczne backupy i disaster recovery
Rezultaty
- Redukcja kosztów infrastruktury o 35% dzięki optymalizacji zasobów i auto-scaling
- Zwiększenie dostępności do 99.99% poprzez multi-AZ deployment
- Automatyczne skalowanie obsługujące 10x większy ruch w szczytach
- Skrócenie czasu wdrażania zmian z 2 godzin do 15 minut
- Zmniejszenie średniego czasu ładowania strony o 60%
- Redukcja obciążenia bazy danych o 45% dzięki cachowaniu
Technologie
Przykłady implementacji
Konfiguracja Auto Scaling Group w Terraform
resource "aws_autoscaling_group" "web" {
name = "web-asg"
desired_capacity = 2
max_size = 4
min_size = 1
target_group_arns = [aws_lb_target_group.web.arn]
vpc_zone_identifier = aws_subnet.private[*].id
launch_template {
id = aws_launch_template.web.id
version = "$Latest"
}
tag {
key = "Environment"
value = "production"
propagate_at_launch = true
}
}
resource "aws_autoscaling_policy" "web_scale_up" {
name = "web_scale_up"
scaling_adjustment = 1
adjustment_type = "ChangeInCapacity"
cooldown = 300
autoscaling_group_name = aws_autoscaling_group.web.name
}
resource "aws_cloudwatch_metric_alarm" "high_cpu" {
alarm_name = "high-cpu-utilization"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = "2"
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "300"
statistic = "Average"
threshold = "75"
alarm_description = "Scale up if CPU > 75%"
alarm_actions = [aws_autoscaling_policy.web_scale_up.arn]
}
Konfiguracja CloudFront z S3
resource "aws_s3_bucket" "static_assets" {
bucket = "my-static-assets"
}
resource "aws_cloudfront_distribution" "s3_distribution" {
origin {
domain_name = aws_s3_bucket.static_assets.bucket_regional_domain_name
origin_id = "S3-static-assets"
s3_origin_config {
origin_access_identity = aws_cloudfront_origin_access_identity.default.cloudfront_access_identity_path
}
}
enabled = true
is_ipv6_enabled = true
default_root_object = "index.html"
default_cache_behavior {
allowed_methods = ["GET", "HEAD", "OPTIONS"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "S3-static-assets"
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
viewer_protocol_policy = "redirect-to-https"
min_ttl = 0
default_ttl = 3600
max_ttl = 86400
}
price_class = "PriceClass_100"
restrictions {
geo_restriction {
restriction_type = "none"
}
}
viewer_certificate {
cloudfront_default_certificate = true
}
}