Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Diffusez du contenu statique dans un compartiment Amazon S3 via un VPC en utilisant Amazon CloudFront
Créée par Angel Emmanuel Hernandez Cebrian
Environnement : PoC ou pilote | Technologies : diffusion de contenu ; mise en réseau ; sécurité, identité, conformité ; sans serveur ; applications Web et mobiles | AWSservices : Amazon CloudFront ; Elastic Load Balancing (ELB) ; AWS Lambda |
Récapitulatif
Lorsque vous diffusez du contenu statique hébergé sur Amazon Web Services (AWS), l'approche recommandée consiste à utiliser un bucket Amazon Simple Storage Service (S3) comme origine et à utiliser CloudFront Amazon pour distribuer le contenu. Cette solution présente deux avantages principaux : la commodité de la mise en cache du contenu statique à des emplacements périphériques et la possibilité de définir des listes de contrôle d'accès Web (WebACLs) pour la CloudFront distribution, ce qui vous permet de sécuriser les demandes relatives au contenu avec un minimum de configuration et de frais administratifs.
Cependant, il existe une limite architecturale commune à l'approche standard recommandée. Dans certains environnements, vous souhaitez que des dispositifs de pare-feu virtuels soient déployés dans un cloud privé virtuel (VPC) pour inspecter l'ensemble du contenu, y compris le contenu statique. L'approche standard n'achemine pas le trafic à des VPC fins d'inspection. Ce modèle fournit une solution architecturale alternative. Vous utilisez toujours une CloudFront distribution pour diffuser du contenu statique dans un compartiment S3, mais le trafic est acheminé via le à l'aide VPC d'un Application Load Balancer. Une fonction AWS Lambda récupère et renvoie ensuite le contenu du compartiment S3.
Conditions préalables et limitations
Prérequis
Un compte AWS actif.
Contenu de site Web statique hébergé dans un compartiment S3.
Limites
Les ressources de ce modèle doivent se trouver dans une seule AWS région, mais elles peuvent être provisionnées dans différents AWS comptes.
Les limites s'appliquent à la taille maximale des demandes et des réponses que la fonction Lambda peut recevoir et envoyer, respectivement. Pour plus d'informations, consultez la section Limits des fonctions Lambda en tant que cibles (documentation Elastic Load Balancing).
Il est important de trouver un bon équilibre entre performances, évolutivité, sécurité et rentabilité lors de l'utilisation de cette approche. Malgré la grande évolutivité de Lambda, si le nombre d'appels Lambda simultanés dépasse le quota maximum, certaines demandes sont limitées. Pour plus d'informations, consultez les quotas Lambda (documentation Lambda). Vous devez également tenir compte de la tarification lorsque vous utilisez Lambda. Pour minimiser les appels Lambda, assurez-vous de définir correctement le cache pour la distribution. CloudFront Pour plus d'informations, consultez Optimisation de la mise en cache et de la disponibilité (CloudFront documentation).
Architecture
Pile technologique cible
CloudFront
Amazon Virtual Private Cloud (AmazonVPC)
Application Load Balancer
Lambda
Amazon S3
Architecture cible
L'image suivante montre l'architecture suggérée lorsque vous devez l'utiliser CloudFront pour diffuser du contenu statique à partir d'un compartiment S3 via unVPC.
Le client demande à la CloudFront distribution URL d'obtenir un fichier de site Web particulier dans le compartiment S3.
CloudFront envoie la demande à AWSWAF. AWSWAFfiltre la demande en utilisant le Web ACLs appliqué à la CloudFront distribution. S'il est déterminé que la demande est valide, le flux continue. S'il est déterminé que la demande n'est pas valide, le client reçoit une erreur 403.
CloudFront vérifie son cache interne. Si une clé valide correspond à la demande entrante, la valeur associée est renvoyée au client sous forme de réponse. Dans le cas contraire, le flux continue.
CloudFront transmet la demande à URL l'Application Load Balancer spécifié.
L'Application Load Balancer possède un écouteur associé à un groupe cible basé sur une fonction Lambda. L'Application Load Balancer appelle la fonction Lambda.
La fonction Lambda se connecte au compartiment S3, effectue une
GetObject
opération sur celui-ci et renvoie le contenu sous forme de réponse.
Automatisation et mise à l'échelle
Pour automatiser le déploiement de contenu statique à l'aide de cette approche, créez des pipelines CI/CD pour mettre à jour les compartiments Amazon S3 hébergeant des sites Web.
La fonction Lambda s'adapte automatiquement pour gérer les demandes simultanées, dans les limites des quotas et des limites du service. Pour plus d'informations, consultez la section Dimensionnement des fonctions Lambda et quotas Lambda (documentation Lambda). Pour les autres AWS services et fonctionnalités, tels que CloudFront l'Application Load Balancer, les AWS adapte automatiquement.
Outils
Amazon CloudFront accélère la diffusion de votre contenu Web en le diffusant via un réseau mondial de centres de données, ce qui réduit la latence et améliore les performances.
Elastic Load Balancing (ELB) distribue le trafic applicatif ou réseau entrant sur plusieurs cibles. Dans ce modèle, vous utilisez un Application Load Balancer provisionné via Elastic Load Balancing pour diriger le trafic vers la fonction Lambda.
AWSLambda est un service de calcul qui vous permet d'exécuter du code sans avoir à approvisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
Amazon Virtual Private Cloud (AmazonVPC) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages de l'utilisation de l'infrastructure évolutive deAWS.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Créez unVPC. | Créez un VPC pour héberger les ressources déployées selon ce modèle, telles que l'Application Load Balancer et la fonction Lambda. Pour obtenir des instructions, consultez Create a VPC (VPCdocumentation Amazon). | Architecte du cloud |
Créez un AWS WAF site WebACL. | Créez un AWS WAF site WebACL. Plus tard dans ce modèle, vous appliquerez ce site Web ACL à la CloudFront distribution. Pour obtenir des instructions, voir Création d'un site Web ACL (AWSWAFdocumentation). | Architecte du cloud |
Créez la fonction Lambda. | Créez la fonction Lambda qui diffuse le contenu statique hébergé dans le compartiment S3 sous forme de site Web. Utilisez le code fourni dans la section Informations supplémentaires de ce modèle. Personnalisez le code pour identifier votre compartiment S3 cible. | Général AWS |
Téléchargez la fonction Lambda. | Entrez la commande suivante pour télécharger le code de fonction Lambda dans une archive de fichiers .zip dans Lambda.
| Général AWS |
Créez un Application Load Balancer. | Créez un Application Load Balancer connecté à Internet qui pointe vers la fonction Lambda. Pour obtenir des instructions, consultez la section Création d'un groupe cible pour la fonction Lambda (documentation Elastic Load Balancing). Pour une configuration à haute disponibilité, créez l'Application Load Balancer et associez-le à des sous-réseaux privés dans différentes zones de disponibilité. | Architecte du cloud |
Créez une CloudFront distribution. | Créez une CloudFront distribution qui pointe vers l'Application Load Balancer que vous avez créé.
| Architecte du cloud |
Ressources connexes
AWSdocumentation
Optimisation de la mise en cache et de la disponibilité (CloudFront documentation)
Les fonctions Lambda en tant que cibles (documentation Elastic Load Balancing)
Quotas Lambda (documentation Lambda)
AWSsites Web de services
Informations supplémentaires
Code
L'exemple de fonction Lambda suivant est écrit dans Node.js. Cette fonction Lambda agit comme un serveur Web qui exécute une GetObject
opération sur un compartiment S3 contenant les ressources du site Web.
/** * This is an AWS Lambda function created for demonstration purposes. * It retrieves static assets from a defined Amazon S3 bucket. * To make the content available through a URL, use an Application Load Balancer with a Lambda integration. * * Set the S3_BUCKET environment variable in the Lambda function definition. */ var AWS = require('aws-sdk'); exports.handler = function(event, context, callback) { var bucket = process.env.S3_BUCKET; var key = event.path.replace('/', ''); if (key == '') { key = 'index.html'; } // Fetch from S3 var s3 = new AWS.S3(); return s3.getObject({Bucket: bucket, Key: key}, function(err, data) { if (err) { return err; } var isBase64Encoded = false; var encoding = 'utf8'; if (data.ContentType.indexOf('image/') > -1) { isBase64Encoded = true; encoding = 'base64' } var resp = { statusCode: 200, headers: { 'Content-Type': data.ContentType, }, body: new Buffer(data.Body).toString(encoding), isBase64Encoded: isBase64Encoded }; callback(null, resp); } ); };