DEV Community

Cover image for Siti statici con AWS e CloudFront
Luca Minuti
Luca Minuti

Posted on

Siti statici con AWS e CloudFront

Introduzione

Negli ultimi mesi ho deciso di trasferire il mio sito ufficiale da una macchina virtuale EC2 di AWS a S3 sempre su AWS. Il motivo è banalmente la semplicità di gestione, infatti, se il sito comprende solo una serie di pagine statiche, fare un upload (eventualmente anche automatizzabile) su S3 è molto più semplice che avere un'intera macchina da amministrare. Lo svantaggio ovviamente è la flessibilità: avere un'intera macchina virtuale ci da certamente più possibilità.

In questo articolo vedremo prima come preparare il bucket di S3 per ospitare e rendere pubbliche le nostre pagine e poi come abilitare HTTPS attraverso CloudFront (sempre su AWS). In un prossimo articolo vedremo anche come fare tutto il processo su CloudFlare liberandoci completamente di AWS e semplificando molto la configurazione (di contro ci perdiamo tutte le funzionalità di AWS). Quest'ultima soluzione è quella che abbiamo usato per la documentazione di WiRL.

Prerequisiti

In questa guida darò per scontato che sia già presente un account su AWS. La creazione del account è gratuita e ci sono vari piani gratuiti o a basso costo su entrambe le piattaforme. Ovviamente dipende dalla dimensione del vostro sito e soprattutto dal traffico generato.

Creare un nuovo bucket su S2

Per prima cosa è necessario creare il bucket su S3. La scelta del nome del bucket è fondamentale infatti se vogliamo che sia raggiungibile da http://lucaminuti.it/ deve chiamarsi lucaminuti.it, se invece il sito sarà per esempio https://my.project.com/ il bucket dovrà chiamarsi my.project.com (Guida ufficiale).

Nel mio caso il sito sarà https://lucaminuti.it per cui chiamo il bucket lucaminuti.it.

Innanzitutto aprite la console di AWS sulla pagina relativa a S3 e premete il pulsante Crea bucket. Vi si dovrebbe presentare una pagina come questa:

Crea bucket

Dato che deve essere ad accesso pubblico sblocco tutti gli accessi:

Permessi

Una volta creato il bucket è possibile caricare i file (io uso WinSCP ma è anche possibile usare la CLI di AWS). Per ottenere l’accesso tramite browser sono necessari altri due passaggi. Nella pagina “Autorizzazioni” modifico le policy del bucket in modo da ottenere l’accesso in lettura. Attenzione al ARN del bucket.

Policy

Qui il JSON grezzo:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::lucaminuti-it/*"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Poi è necessario nella pagina “properties” modificare la voce "Hosting di siti Web statici” in questo modo:

WebSite

A questo, punto una volta fatto l'upload dei vostri contenuti nel bucket, il sito dovrebbe essere accessibile. È possibile trovare l’URL di accesso nelle “properties” del bucket.

URL

L'URL sarà una cosa del tipo:

http://lucaminuti.it.s3-website.amazonaws.com/

Non proprio semplice da raggiungere e senza supporto per HTTPS. Per risolvere il problema possiamo usare CloudFront, per restare in casa AWS o usare un servizio esterno come CloudFlare.

Creazione del certificato

Per prima cosa dalla console di AWS apriamo la pagina "AWS certificate manager" e da li selezioniamo "richiedi certificato". Ne scegliamo uno pubblico, gli indichiamo il nome del dominio (es. lucaminuti.it) e lasciamo tutti i default. Attenzione: il certificato deve essere creato nella regione us-east-1.

Certificato

Una volta effettuata la richiesta create il record CNAME di conferma come specificato attraverso l'interfaccia con cui gestite il vostro dominio.

CName

Entro pochi minuti (<5) dovrebbe essere approvato.

Configurazione di CloudFront

Apriamo la pagina di "CloudFront" su AWS e selezioniamo "Create distribution". Qui possiamo impostare il dominio il protocollo è la porta che abbiamo usato nella fase precedete.

Origin

Attiviamo il redirect:

Redirect

Impostiamo il dominio dal quale raggiungere l'origine inserita nella fase precedente:

Domain

Gli associamo il certificato creato in precedenza:

Certificato

E l’oggetto di default:

Root

A questo punto l'ultima cosa da fare è andare sulla gestione del vostro DNS e associarla al dominio creato da CloudFrond. In particolare è necessario creare un record CNAME che punti al dominio creato da CloundFront (Distribution domain name nelle proprietà della distribuzione CloudFront). Attenzione: per l'attivazione di CloudFront attendere qualche minuto per il deployment.

Conclusioni

Come penso sia chiaro il processo non è esattamente semplice. Nel prossimo articolo proveremo a fare la stessa cosa usando CloudFlare, decisamente più semplice, ma che richiede il trasferimento della gestione del dominio su CloudFlare.

Top comments (0)