Distribuire un Sito Web su S3 e CloudFront con Bitbucket Pipelines
In questo articolo imparerai come distribuire il tuo sito web statico su un Bucket S3 e l'invalidazione automatica della cache...

Bitbucket è un prodotto Atlassian e uno store di codice basato su Git con strumenti CI/CD ottimizzati per team di collaborazione che usano Jira. Quando modifichi il tuo codice e mantieni revisioni e storico in Bitbucket, hai anche bisogno di automazione per il deployment.
CI/CD sta per automazione e significa Continuous Integration e Continuous Delivery. In questo articolo, useremo CI e CD contemporaneamente.
Tralascio "Come usare Bitbucket?" e ti presenterò le Bitbucket Pipelines per il continuous deployment su AWS S3 che utilizza CloudFront per la distribuzione in tutto il mondo.
Quando crei un bucket S3 con hosting statico abilitato, devi fare sync dalla tua cartella locale al bucket S3. Normalmente, dovremmo eseguire il comando aws s3 sync LOCAL_FOLDER/ s3://STATIC_HOSTING_ENABLED_BUCKET_NAME --delete per sincronizzare al 100% la cartella locale con il Bucket S3.
Se utilizzi CloudFront per la distribuzione, vedrai il vecchio contenuto quando visiti il sito web. Il motivo è che CloudFront memorizza nella cache tutti i contenuti su tutte le edge location e serve il contenuto dalle edge location. Dobbiamo "invalidare la cache" per il nuovo contenuto e fare il re-caching sulle edge location.
Quale Policy IAM usare per S3 e CloudFront?
Per la massima sicurezza, amo mettere la massima restrizione e il minimo permesso per le Policy IAM. Puoi vedere le policy qui sotto:
Policy IAM per Bucket S3
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3BucketPolicy",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::NOME_BUCKET",
"arn:aws:s3:::NOME_BUCKET/*"
],
"Condition": {
"ForAnyValue:IpAddress": {
"aws:SourceIp": [
"34.199.54.113/32",
"34.232.25.90/32",
"34.232.119.183/32",
"34.236.25.177/32",
"35.171.175.212/32",
"52.54.90.98/32",
"52.202.195.162/32",
"52.203.14.55/32",
"52.204.96.37/32",
"34.218.156.209/32",
"34.218.168.212/32",
"52.41.219.63/32",
"35.155.178.254/32",
"35.160.177.10/32",
"34.216.18.129/32",
"3.216.235.48/32",
"34.231.96.243/32",
"44.199.3.254/32",
"174.129.205.191/32",
"44.199.127.226/32",
"44.199.45.64/32",
"3.221.151.112/32",
"52.205.184.192/32",
"52.72.137.240/32"
]
}
}
}
]
}Eseguiremo i nostri deployment in Bitbucket Pipelines e questi sono gli IP in uscita di Bitbucket Pipelines. Puoi vedere il riferimento da https://support.atlassian.com/bitbucket-cloud/docs/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall/
Policy IAM per l'Invalidazione della Cache CloudFront
Per eseguire il comando di invalidazione della cache CloudFront via Bitbucket Pipelines, puoi usare la Policy IAM qui sotto. Puoi allegare la policy allo stesso utente AWS autorizzato per le operazioni S3 Sync.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudFrontCacheInvalidationPolicy",
"Effect": "Allow",
"Action": "cloudfront:CreateInvalidation",
"Resource": "arn:aws:cloudfront::ACCOUNT_ID:distribution/CF_DISTRIBUTION_ID",
"Condition": {
"ForAnyValue:IpAddress": {
"aws:SourceIp": [
"34.199.54.113/32",
"34.232.25.90/32",
"34.232.119.183/32",
"34.236.25.177/32",
"35.171.175.212/32",
"52.54.90.98/32",
"52.202.195.162/32",
"52.203.14.55/32",
"52.204.96.37/32",
"34.218.156.209/32",
"34.218.168.212/32",
"52.41.219.63/32",
"35.155.178.254/32",
"35.160.177.10/32",
"34.216.18.129/32",
"3.216.235.48/32",
"34.231.96.243/32",
"44.199.3.254/32",
"174.129.205.191/32",
"44.199.127.226/32",
"44.199.45.64/32",
"3.221.151.112/32",
"52.205.184.192/32",
"52.72.137.240/32"
]
}
}
}
]
}
Bitbucket Pipelines
In precedenza, hai già creato un utente AWS per eseguire le Bitbucket Pipelines per le operazioni CI/CD. È il momento di inserire le variabili d'ambiente nel repository. AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY sono sufficienti.

File della Pipeline
Ora, in questo passaggio, possiamo creare un file bitbucket-pipelines.yml per eseguire S3 Sync e CloudFront Cache Invalidation.
pipelines:
branches:
main:
- step:
name: Deploy to S3 Bucket
deployment: Production
script:
- pipe: atlassian/aws-s3-deploy:1.1.0
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: AWS-REGION
S3_BUCKET: 'S3_BUCKET_NAME'
DELETE_FLAG: 'true'
LOCAL_PATH: './'
- pipe: atlassian/aws-cloudfront-invalidate:0.1.1
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: AWS-REGION
DISTRIBUTION_ID: CLOUDFRONT-DIST-IDQuando il branch main riceve un nuovo commit, la pipeline si attiverà e inizierà a eseguire immediatamente. Dopodiché, il percorso root del tuo Repository Bitbucket "/" verrà sincronizzato con il tuo Bucket S3 ed eseguirà immediatamente l'invalidazione della cache per applicare il nuovo sito a tutte le edge location.
Spero che questo articolo ti sia d'aiuto. Se vuoi chiedere qualcosa, lascia un commento. Ti risponderò il prima possibile.
Altro da Ercan
Altri due siti, stesso autore, terreno diverso.
IA, LLMs, agenti, ML applicato.
Note sul campo su workload IA. Analisi dei costi Bedrock, pattern di agenti, trade-off di storage vettoriale, failure mode in produzione.
Visita ercan.ai →L'hub. Chi sono, consulenza, contatti.
Hub personale per entrambe le tracce di scrittura. Chi sono, come funziona la consulenza, come contattarmi.
Visita ercanermis.com →