Obsah

  • Přehled řešení a zjednodušený diagram architektury
  • AWS CDK skript (TypeScript)
  • Konfigurace distribuce CloudFront
  • Příklad funkce Lambda@Edge
  • Tipy pro testování výkonu a optimalizaci

Přehled řešení

Toto řešení ukazuje, jak vytvořit globální síť pro doručování obsahu pomocí AWS CloudFront pro efektivní distribuci obsahu po celém světě. Systém používá Amazon S3 jako zdroj pro ukládání obsahu, CloudFront pro globální distribuci a Lambda@Edge pro přizpůsobení doručování obsahu na okraji sítě.

Kombinací AWS CloudFront, Amazon S3 a Lambda@Edge mohou vývojáři vytvořit výkonné a škálovatelné řešení pro doručování obsahu. Tento přístup ukazuje sílu a flexibilitu služeb AWS při budování vysoce výkonných systémů pro distribuci obsahu s nízkou latencí.

Popis případu použití

V tomto scénáři je statický obsah (jako jsou obrázky, videa a webové assety) uložen v S3 bucketu. CloudFront je nakonfigurován tak, aby tento obsah globálně distribuoval prostřednictvím své sítě okrajových lokací. Když uživatel požádá o obsah, CloudFront jej poskytne z nejbližší okrajové lokace, čímž sníží latenci a zlepší výkon.

Distribuce CloudFront je nastavena s S3 bucketem jako zdrojem. Když obsah není k dispozici v cache okrajové lokace, CloudFront jej získá z S3 bucketu a uloží do cache pro budoucí požadavky. Lambda@Edge se používá k přizpůsobení procesu doručování obsahu, například pro přepis URL, přidávání hlaviček nebo provádění autentizace na okraji sítě.

Tento automatizovaný systém pro doručování obsahu je navržen tak, aby byl vysoce škálovatelný a schopný zvládnout velké objemy provozu využitím globální sítě okrajových lokací CloudFront. Eliminuje potřebu správy globální serverové infrastruktury, protože CloudFront se stará o distribuci a ukládání obsahu do cache.

Průmyslové aplikace

Toto řešení je použitelné v různých odvětvích, která vyžadují efektivní globální doručování obsahu, včetně médií a zábavy, e-commerce, distribuce softwaru a online vzdělávání. Jakákoli aplikace, která zahrnuje doručování statického obsahu globálnímu publiku, může těžit z tohoto řešení. Příklady zahrnují platformy pro streamování videa, webové stránky online maloobchodu, systémy distribuce aktualizací softwaru a platformy pro e-learning.

Zjednodušený diagram

AWS Cloudfront

Architektura se skládá z:

  1. Amazon S3 Bucket: Ukládá původní obsah (zdroj).
  2. AWS CloudFront: Distribuuje obsah globálně prostřednictvím okrajových lokací.
  3. Lambda@Edge: Přizpůsobuje doručování obsahu na okraji sítě.
  4. Route 53: Spravuje DNS pro distribuci CloudFront (volitelné).
  5. IAM Role: Udělují nezbytná oprávnění pro CloudFront a Lambda@Edge pro přístup k S3 a dalším službám AWS.

AWS CDK skript (TypeScript)

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as iam from 'aws-cdk-lib/aws-iam';

export class AwsCloudFrontStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Vytvoření S3 bucketu pro zdroj obsahu
    const contentBucket = new s3.Bucket(this, 'ContentBucket', {
      removalPolicy: cdk.RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
    });

    // Vytvoření funkce Lambda@Edge
    const edgeFunction = new lambda.Function(this, 'EdgeFunction', {
      runtime: lambda.Runtime.NODEJS_14_X,
      handler: 'index.handler',
      code: lambda.Code.fromAsset('lambda'),
      role: new iam.Role(this, 'EdgeFunctionRole', {
        assumedBy: new iam.CompositePrincipal(
          new iam.ServicePrincipal('lambda.amazonaws.com'),
          new iam.ServicePrincipal('edgelambda.amazonaws.com')
        ),
      }),
    });

    // Vytvoření distribuce CloudFront
    const distribution = new cloudfront.Distribution(this, 'Distribution', {
      defaultBehavior: {
        origin: new origins.S3Origin(contentBucket),
        viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
        edgeLambdas: [
          {
            functionVersion: edgeFunction.currentVersion,
            eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
          },
        ],
      },
      defaultRootObject: 'index.html',
      priceClass: cloudfront.PriceClass.PRICE_CLASS_100,
    });

    // Výstup doménového jména distribuce
    new cdk.CfnOutput(this, 'DistributionDomainName', {
      value: distribution.distributionDomainName,
      description: 'Doménové jméno distribuce CloudFront',
    });
  }
}

Konfigurace distribuce CloudFront

Distribuce CloudFront je nakonfigurována ve výše uvedeném CDK skriptu. Klíčové body konfigurace zahrnují:

  • S3 bucket jako zdroj
  • Přesměrování na HTTPS pro požadavky prohlížeče
  • Funkce Lambda@Edge přidružená k požadavkům prohlížeče
  • Cenová třída nastavena na PRICE_CLASS_100 (použití pouze okrajových lokací v Severní Americe a Evropě)

Tato nastavení můžete upravit podle svých specifických požadavků, například přidáním vlastního chování pro určité vzory cest nebo změnou cenové třídy pro širší globální pokrytí.

Příklad funkce Lambda@Edge

Zde je jednoduchá funkce Lambda@Edge, která přidává vlastní hlavičku ke všem požadavkům:

exports.handler = async (event) => {
    const request = event.Records[0].cf.request;
    
    // Přidání vlastní hlavičky
    request.headers['x-custom-header'] = [{ key: 'X-Custom-Header', value: 'MojeHodnota' }];
    
    return request;
};

Tato funkce přidává vlastní hlavičku ke každému požadavku. Můžete ji rozšířit o implementaci složitější logiky, jako je přepis URL, autentizace nebo dynamické generování obsahu na okraji sítě.

Tipy pro testování výkonu a optimalizaci

  1. Ukládání obsahu do cache: Ujistěte se, že vaše distribuce CloudFront je nakonfigurována s vhodnými pravidly pro ukládání do cache. Použijte hlavičky Cache-Control na vašem zdroji pro řízení doby ukládání do cache.
  2. Komprese: Povolte kompresi ve vaší distribuci CloudFront pro snížení velikosti souborů a zlepšení doby načítání.
  3. Origin Shield: Zvažte povolení CloudFront Origin Shield pro snížení zátěže vašeho zdroje a potenciální zlepšení poměru zásahů v cache.
  4. Monitorování a analýza: Použijte Amazon CloudWatch a vestavěné analytické nástroje CloudFront pro sledování výkonu a identifikaci oblastí pro zlepšení.
  5. Optimalizace obsahu: Optimalizujte svůj obsah (např. komprese obrázků, minifikace CSS/JS) před nahráním do S3.
  6. Výkon Lambda@Edge: Udržujte funkce Lambda@Edge lehké a efektivní, abyste minimalizovali dopad na latenci.
  7. Geografická omezení: Použijte geografická omezení CloudFront, pokud potřebujete kontrolovat přístup k vašemu obsahu na základě lokace uživatele.

Tento článek poskytuje komplexní návod k nastavení sítě pro doručování obsahu pomocí AWS CloudFront pro globální distribuci obsahu uloženého v Amazon S3. Zahrnuje přehled řešení, diagram architektury, AWS CDK skript pro nastavení infrastruktury, příklad funkce Lambda@Edge a tipy pro optimalizaci výkonu. Tento přístup umožňuje škálovatelné a efektivní doručování obsahu bez nutnosti spravovat globální serverovou infrastrukturu.


Copyright © 2024. All rights reserved.