Panoramica di Amazon S3

Scritto da Gabriele Pierfederici l’8 Settembre 2006

Amazon Simple Storage Service (Amazon S3) è un web service che permette a chiunque abbia esigenze di archiviazione di dati di sfruttare l’infrastruttura tecnologica e le conoscenze acquisite nel campo dell’alta affidabilità, della scalabilità e della sicurezza dal gigante mondiale dello shopping online. Rispetto ad altre soluzioni di archiviazione e backup online, il vantaggio principale di Amazon S3 è il costo calcolato in base al reale utilizzo delle risorse, anziché essere un canone periodico fisso. Oltre che per l’archiviazione e il backup, il prezzo irrisorio per gigabyte (GB) di spazio e di traffico effettivamente utilizzati e la possibilità di accedere alle risorse attraverso il protocollo HTTP fanno di Amazon S3 una soluzione ideale anche per i webmaster che si trovino a dover affrontare picchi di traffico occasionali o imprevisti e abbiano necessità di distribuire i carico di lavoro dei web server evitando di ricorrere a costosi upgrade hardware o di incorrere negli overage charges imposti dai provider.

Tecnicamente, le API (Application Programming Interface) del web service sono accessibili con richieste standard SOAP (Simple Object Access Protocol) e REST (Representational State Transfer) indipendenti dal linguaggio di programmazione. La documentazione tecnica a riguardo è disponibile in lingua Inglese insieme ad una raccolta di esempi indispensabili per chiunque voglia integrare il web service nelle proprie applicazioni. Tuttavia, non è necessario essere sviluppatori esperti per servirsi di Amazon S3. Infatti, è possibile attingere ad un ampio catalogo di applicazioni che permettono di utilizzare il web service a seconda delle esigenze e dell’abilità dell’utente. Per esempio, un webmaster che voglia sfruttare le caratteristiche di scalabilità e affidabilità di Amazon S3 per trasferire il traffico in eccesso dai siti che gestisce, tipicamente causato da file statici come file multimediali, immagini, programmi o aggiornamenti da scaricare, potrà trovare delle applicazioni che gli permettano di eseguire le operazioni di upload e download dal proprio desktop, di creare o spostare cartelle e di impostare i permessi di accesso utilizzando un’interfaccia familiare come quella di un client FTP o di Windows Explorer.

Accesso ad Amazon S3

Per utilizzare il web service è necessario registrarsi sul portale Amazon Web Services™ Store (è possibile utilizzare un account di Amazon.com se lo si ha già) inserendo i dati della carta di credito sulla quale mensilmente verrà addebitato il costo calcolato in base allo spazio occupato e al traffico generato. Se per uno o più mesi non si usufruisce del servizio non verrà addebitato alcun costo, comunque è possibile monitorare costantemente il totale dovuto nella sezione “Account Activity” del sito. Al termine della registrazione si può accedere alle informazioni necessarie per effettuare l’autenticazione, che sono le stesse per tutti i web services offerti da Amazon Web Services™ e sono accessibili nella sezione “AWS Access Identifiers” del sito. L’autenticazione può avvenire in due modi:

  1. tramite una coppia di chiavi alfanumeriche fornite da Amazon Web Services™: l’Access Key ID, che può essere resa pubblica, e la Secret Access Key, che invece deve rimanere segreta;
  2. con certificato X.509, eventualmente utilizzandone uno che si ha già, anche se non è fornito da una Certification Authority (CA) accreditata.

Screenshot: S3Safe Acccounts, dettagli account

L’immagine sopra mostra un esempio di utilizzo della coppia di chiavi Access Key ID e Secret Access Key nella configurazione di un account del programma S3Safe (versione 1.00.0003).

Creazione di un bucket

Una volta ottenute le chiavi per l’accesso al web service è possibile creare il primo bucket (contenitore di oggetti). Il nome del bucket deve essere univoco e servirà successivamente per accedere con una URL ai file archiviati. è possibile creare più di un bucket, fino ad un massimo di 100. Per esempio, le URL per accedere al file homepage.html saranno queste:

Screenshot: S3Safe, finestra principale

L’immagine sopra mostra il contenuto di un bucket come se fosse una normale cartella di un server FTP. Con S3Safe si può eseguire facilmente l’upload e il download di file tramite semplici operazioni di drag & drop.

Controllo degli accessi

Una guida completa per la configurazione delle liste di controllo degli accessi (ACL) degli oggetti archiviati in Amazon S3 è disponibile nella documentazione tecnica in lingua Inglese sotto la voce “Authentication and Access Control”. Tuttavia, per rendere un file pubblico è sufficiente sapere che bisogna assegnare al gruppo AllUsers i diritti di sola lettura (READ).

Screenshot: NS3 Manager, modifica ACL

L’immagine sopra mostra come configurare la lista di controllo degli accessi (ACL) di un file con NS3 Manager (release 0.0.9) per renderlo pubblico. È possibile aggiungere altri utenti alla lista conoscendone l’indirizzo email dell’account Amazon.com o l’ID univoco assegnato da S3.

Utilizzo di BitTorrent™

Un’altra delle caratteristiche che fanno di Amazon S3 uno strumento efficace per la distribuzione di file da siti web particolarmente congestionati è il supporto per BitTorrent™. Infatti, è possibile usare un qualsiasi client del popolare protocollo di peer-to-peer (p2p) per scaricare i file accessibili pubblicamente da Amazon S3 semplicemente aggiungendo all’URL ?torrent (esempio: http://gabriele.s3.amazonaws.com/vacanze.avi?torrent). I client (peer) che utilizzano BitTorrent™ possono partecipare attivamente alla distribuzione del file riducendo progressivamente il traffico per il download da S3 e quindi contribuiranno a diminuire i costi di utilizzo del servizio.

Screenshot: µTorrent, downloads

L’immagine sopra mostra le proprietà di un torrent durante il download da Amazon S3 con µTorrent (versione 1.4.402). Il tracker (http://tracker.amazonaws.com:6969) viene impostato automaticamente.

Cosa manca

La versione attuale delle API di Amazon S3 (2006-03-01) ha, a mio parere, tre grosse carenze:

  1. un file di log nel formato standard dei web server, almeno per i file accessibili pubblicamente, indispensabile per monitorare l’origine del traffico;
  2. un’API che permetta di effettuare una copia dei file contenuti in S3 e di rinominarli o meglio ancora di creare alias dei nomi dei file, sarebbe particolarmente utile per consentire, ad esempio, il download da zone protette di un’applicazione web;
  3. il supporto per la compressione dell’output per i browser (Accept-Encoding: gzip, deflate) che permetterebbe un notevole risparmio sul traffico consumato.

Allego qui sotto, un esempio di report di utilizzo del servizio scaricabile in formato XML o CSV dalla sezione “Usage Report” del sito di Amazon Web Services™:


<?xml version="1.0" encoding="UTF-8"?>;
<ServiceUsage>
    <OperationUsage>
        <ServiceName>AmazonS3</ServiceName>
        <OperationName>ReadACL</OperationName>
        <UsageType>Request</UsageType>
        <Resource>gabriele</Resource>
        <StartTime>09/01/06 17:00:00</StartTime>
        <EndTime>09/02/06 17:00:00</EndTime>
        <UsageValue>1</UsageValue>
    </OperationUsage>
    <OperationUsage>
        <ServiceName>AmazonS3</ServiceName>
        <OperationName>HeadObject</OperationName>
        <UsageType>Request</UsageType>
        <Resource>gabriele</Resource>
        <StartTime>09/06/06 17:00:00</StartTime>
        <EndTime>09/07/06 17:00:00</EndTime>
        <UsageValue>1</UsageValue>
    </OperationUsage>
    <OperationUsage>
        <ServiceName>AmazonS3</ServiceName>
        <OperationName>GetObject</OperationName>
        <UsageType>Request</UsageType>
        <Resource>gabriele</Resource>
        <StartTime>09/07/06 17:00:00</StartTime>
        <EndTime>09/08/06 17:00:00</EndTime>
        <UsageValue>2</UsageValue>
    </OperationUsage>
    <OperationUsage>
        <ServiceName>AmazonS3</ServiceName>
        <OperationName>ListBucket</OperationName>
        <UsageType>Request</UsageType>
        <Resource>gabriele</Resource>
        <StartTime>09/07/06 17:00:00</StartTime>
        <EndTime>09/08/06 17:00:00</EndTime>
        <UsageValue>2</UsageValue>
    </OperationUsage>
    <OperationUsage>
        <ServiceName>AmazonS3</ServiceName>
        <OperationName>StandardStorage</OperationName>
        <UsageType>TimedStorage-ByteHrs</UsageType>
        <Resource>gabriele</Resource>
        <StartTime>09/03/06 17:00:00</StartTime>
        <EndTime>09/04/06 17:00:00</EndTime>
        <UsageValue>8672576</UsageValue>
    </OperationUsage>
    <OperationUsage>
        <ServiceName>AmazonS3</ServiceName>
        <OperationName>PutObject</OperationName>
        <UsageType>DataTransfer-Bytes</UsageType>
        <Resource>gabriele</Resource>
        <StartTime>09/03/06 17:00:00</StartTime>
        <EndTime>09/04/06 17:00:00</EndTime>
        <UsageValue>948727</UsageValue>
    </OperationUsage>
    <OperationUsage>
        <ServiceName>AmazonS3</ServiceName>
        <OperationName>PutObject</OperationName>
        <UsageType>DataTransfer-Bytes</UsageType>
        <Resource>gabriele</Resource>
        <StartTime>09/04/06 17:00:00</StartTime>
        <EndTime>09/05/06 17:00:00</EndTime>
        <UsageValue>6004300</UsageValue>
    </OperationUsage>
</ServiceUsage>

Credits

Amazon Simple Storage Service (Amazon S3) by Amazon Web Services LLC., S3Safe by Lumen Systems, Inc., NS3 Manager by John Spurlock, µTorrent by Ludvig Strigeus.