Configurazione dell'aggiornamento automatico in 5 minuti
Ok ragazzi. Il modo migliore per ora per eseguire l'aggiornamento automatico di CloudFront (invalidazione) è creare la funzione Lambda che verrà attivata ogni volta che un file viene caricato nel bucket S3 (uno nuovo o riscritto).
Anche se non hai mai usato le funzioni lambda prima, è davvero facile: segui le mie istruzioni passo-passo e ci vorranno solo 5 minuti:
Passo 1
Vai su https://console.aws.amazon.com/lambda/home e fai clic su Crea una funzione lambda
Passo 2
Fai clic su Funzione vuota (personalizzata)
Passaggio 3
Fare clic sulla casella vuota (accarezzata) e selezionare S3 dalla combo
Passaggio 4
Seleziona il tuo bucket (come per la distribuzione CloudFront)
Passaggio 5
Impostare un tipo di evento su "Oggetto creato (tutto)"
Passaggio 6
Imposta Prefisso e Suffisso o lascialo vuoto se non sai di cosa si tratta.
Passaggio 7
Seleziona la casella Abilita trigger e fai clic su Avanti
Passaggio 8
Assegna un nome alla tua funzione (qualcosa del tipo: YourBucketNameS3ToCloudFrontOnCreateAll )
Passaggio 9
Seleziona Python 2.7 (o successivo) come Runtime
Passaggio 10
Incolla il seguente codice anziché il codice Python predefinito:
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())
})
Passaggio 11
Apri https://console.aws.amazon.com/cloudfront/home in una nuova scheda del browser e copia il tuo ID di distribuzione CloudFront per utilizzarlo nel passaggio successivo.
Passaggio 12
Torna alla scheda lambda e incolla il tuo ID di distribuzione invece di _YOUR_DISTRIBUTION_ID_ nel codice Python. Mantieni le citazioni circostanti.
Passaggio 13
Imposta gestore : lambda_function.lambda_handler
Passaggio 14
Fai clic sulla casella combinata ruolo e seleziona Crea un ruolo personalizzato . Verrà aperta una nuova scheda nel browser.
Passaggio 15
Fare clic su Visualizza documento politico , fare clic su Modifica , fare clic su OK e sostituire la definizione del ruolo con quanto segue (così com'è):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation"
],
"Resource": [
"*"
]
}
]
}
Passaggio 16
Fai clic su Consenti . Questo ti restituirà a una lambda. Controlla che il nome del ruolo appena creato sia selezionato nella casella combinata Ruolo esistente .
Passaggio 17
Impostare Memory (MB) su 128 e Timeout su 5 sec.
Passaggio 18
Fai clic su Avanti , quindi fai clic su Crea funzione
Passaggio 19
Sei bravo ad andare! Ora, ogni volta che caricherai / ricaricherai qualsiasi file su S3, verrà valutato in tutte le posizioni di CloudFront Edge.
PS: durante il test, assicurati che il tuo browser stia caricando le immagini da CloudFront, non dalla cache locale.
PSS - Si noti che solo i primi 1000 file di invalidazione al mese sono gratuiti, ogni invalidazione oltre il limite costa $ 0,005 USD. Potrebbero essere applicati costi aggiuntivi per la funzione Lambda, ma è estremamente economico.