Configuration de la mise à jour automatisée en 5 minutes
Ok les gars. Le meilleur moyen pour l'instant d'effectuer une mise à jour automatique de CloudFront (invalidation) est de créer une fonction Lambda qui sera déclenchée à chaque fois qu'un fichier est téléchargé dans le compartiment S3 (un nouveau ou une réécriture).
Même si vous n'avez jamais utilisé les fonctions lambda auparavant, c'est vraiment facile - suivez simplement mes instructions étape par étape et cela ne prendra que 5 minutes:
Étape 1
Accédez à https://console.aws.amazon.com/lambda/home et cliquez sur Créer une fonction lambda
Étape 2
Cliquez sur Fonction vide (personnalisé)
Étape 3
Cliquez sur la case vide (barrée) et sélectionnez S3 dans le combo
Étape 4
Sélectionnez votre bucket (comme pour la distribution CloudFront)
Étape 5
Définissez un type d'événement sur "Objet créé (tout)"
Étape 6
Définissez le préfixe et le suffixe ou laissez-le vide si vous ne savez pas ce que c'est.
Étape 7
Cochez la case Activer le déclencheur et cliquez sur Suivant
Étape 8
Nommez votre fonction (quelque chose comme: YourBucketNameS3ToCloudFrontOnCreateAll )
Étape 9
Sélectionnez Python 2.7 (ou version ultérieure) comme Runtime
Étape 10
Collez le code suivant au lieu du code Python par défaut:
from __future__ import print_function
import boto3
import time
def lambda_handler(event, context):
for items in event["Records"]:
path = "/" + items["s3"]["object"]["key"]
print(path)
client = boto3.client('cloudfront')
invalidation = client.create_invalidation(DistributionId='_YOUR_DISTRIBUTION_ID_',
InvalidationBatch={
'Paths': {
'Quantity': 1,
'Items': [path]
},
'CallerReference': str(time.time())
})
Étape 11
Ouvrez https://console.aws.amazon.com/cloudfront/home dans un nouvel onglet de navigateur et copiez votre ID de distribution CloudFront pour l'utiliser à l'étape suivante.
Étape 12
Revenez à l'onglet lambda et collez votre ID de distribution au lieu de _VOTRE_DISTRIBUTION_ID_ dans le code Python. Gardez les citations environnantes.
Étape 13
Définir le gestionnaire : lambda_function.lambda_handler
Étape 14
Cliquez sur la liste déroulante des rôles et sélectionnez Créer un rôle personnalisé . Un nouvel onglet dans le navigateur sera ouvert.
Étape 15
Cliquez sur afficher le document de stratégie , cliquez sur modifier , cliquez sur OK et remplacez la définition de rôle par ce qui suit (tel quel):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation"
],
"Resource": [
"*"
]
}
]
}
Étape 16
Cliquez sur autoriser . Cela vous ramènera à un lambda. Vérifiez que le nom de rôle que vous venez de créer est sélectionné dans la zone de liste déroulante Rôle existant .
Étape 17
Réglez la mémoire (Mo) sur 128 et le délai d' expiration sur 5 sec.
Étape 18
Cliquez sur Suivant , puis sur Créer une fonction
Étape 19
Tu es prêt! Désormais, chaque fois que vous téléchargerez / remettez en ligne un fichier sur S3, il sera évalué dans tous les emplacements CloudFront Edge.
PS - Lorsque vous testez, assurez-vous que votre navigateur charge des images depuis CloudFront, et non depuis le cache local.
PSS - Veuillez noter que seules les 1000 premières invalidation de fichiers par mois sont gratuites, chaque invalidation dépassant la limite coûte 0,005 USD. Des frais supplémentaires pour la fonction Lambda peuvent également s'appliquer, mais c'est extrêmement bon marché.