Sorti en 2006 aux États-Unis (2007 en Europe), deux ans après le tout premier service SQS (Simple Queue Service), S3 est maintenant un des services les plus avancés et utilisés sur AWS.
Fonctionnalités de base
Amazon S3 va vous permettre de stocker des données sur le Cloud de manière simple et sécurisée. S3 est organisé en compartiments appelés « buckets » contenant des objets, équivalents aux fichiers et dossiers sur un système de stockage classique.
S3 vient avec tous les avantages du Cloud et de l’expertise AWS en mettant l’accent sur :
- La durabilité : les données sont stockées de manière redondante dans plusieurs data centers et sur plusieurs disques afin d’assurer une durabilité allant de 99,99% à 99,999999999% (« eleven nines ») sur une période d’un an.
- La disponibilité : l’infrastructure mise en place derrière le service permet d’assurer une disponibilité des données allant de 99,9% à 99,99% (hors Glacier) sur une période d’un an.
- La sécurité : le service offre par défaut des mécanismes de sécurité flexibles permettant de protéger vos données en fonction de vos besoins.
- La latence : en plus de sa haute disponibilité, le service permet d’accéder aux données avec la latence le plus faible et stable possible.
Afin de lire ou écrire sur S3, un panel de commandes est mis à disposition pour réaliser des opérations sur les objets. On peut notamment citer les plus connues :
- GET, pour la récupération
- PUT, pour la création et la modification
- DELETE, pour la suppression
Pour les opérations de création de nouveaux objets, le service assure la lecture de la donnée après son écriture. Par contre pour les opérations de modification et suppression, la cohérence des données est assurée à terme (quelques secondes), contrainte dû à la redondance des données. Les interactions avec S3 se font à partir de l’interface Web (site principal d’AWS), le CLI (interface de commandes) et le SDK (intégré dans un programme).
Fonctionnalités avancées
Classes de stockage
S3 offre plusieurs types de stockage (appelés « classes ») en fonction de la taille et de l’utilisation des données qui vont permettre d’optimiser vos coûts drastiquement.
- La classe « Standard » est attribuée par défaut lors de la création d’un objet. Elle répond aux 99,999999999% de durabilité et 99,99% de disponibilité sur les données et est adéquat pour une utilisation fréquente des données stockées sur S3.
- La classe « Standard – Infrequent Access » est destinée au stockage des données dites « froides » c’est-à-dire moins utilisées. Les coûts de stockage seront réduis par contre les coûts d’accès se verront augmentés. La disponibilité des données est 99,9% pour cette classe.
- La classe « Reduced Redundancy » est optimale pour des données non cruciales et/ou reproductibles. Le service réduit la redondance des données pour des coûts plus bas les utilisateurs. La durabilité se voit donc réduite à 99,99%.
- La classe « Glacier » est parfaite pour l’archivage des données. Le coût de stockage est très faible au dépend de la disponibilité des données. Il faudra attendre plusieurs heures avant de pouvoir accéder aux données.
Sécurité
S3 fournit de nombreux outils afin d’assurer la sécurité des données à tout moment :
-
La communication avec S3 utilise le protocole sécurisé HTTPS.
-
L’accès aux données est restreint par défaut. Il existe plusieurs moyens de gérer ces accès :
- IAM (Identity and Access Management) : le service AWS qui permet de gérer des utilisateurs et rôles attribuables à des ressources (machine EC2, fonction Lambda, etc).
- ACL (Access Control List) : des règles d’accès aux buckets et objets S3 au format XML.
- Chaînes de requête (« token ») : droits d’accès temporaires à un bucket ou objet S3 sous la forme d’un token qu’il faudra ajouter à la requête.
- Politiques de buckets : règles définis au niveau du bucket permettant de partager simplement le contenu du bucket.
-
Le chiffrement des données peut se faire de différentes manières :
- Au moment du chargement ou sur les objets stockés sur S3, il est possible de spécifier une option de chiffrage « managé » où AWS va chiffrer vos données avant de les stocker dans leur data centers et les déchiffrer à la volée lors de l’accès à la donnée. De plus, AWS s’occupe de la génération et du stockage des clés de chiffrage pour vous.
- Il est aussi possible de spécifier l’option de chiffrage et de fournir ses propres clés de chiffrage. Vous pouvez spécifier des clés que vous avez générées vous-même et il est désormais de votre responsabilité de stocker les clés de manière sécurisée. Ou alors vous pouvez obtenir des clés via le service AWS KMS (Key Management Service) qui vous offre la possibilité de gérer vos clés sur le Cloud et de les utiliser avec d’autres services AWS.
- Bien évidemment, vous pouvez toujours chiffrer vos données avant de les charger sur S3 en utilisant des clés que vous avez générées ou des clés provenant de KMS.
-
La protection de la suppression par MFA (Multi-Factor Authentication) est un outil pratique et efficace pour éviter la perte de données due à une fausse manipulation ou à des droits d’accès pas assez restrictifs.
-
Le contrôle de version permet d’ajouter un niveau supplémentaire de sécurité. En effet cette option, une fois activée, va permettre de garder toutes les versions d’un objet et donc de protéger vos données contre la suppression involontaire. Les accès aux fichiers répondront avec la dernière version de l’objet et le coût de stockage s’appliquera à toutes les versions stockées.
Les cycles de vie des objets S3
Imaginez que vous avez un site Web de partage de vidéos entre amis et que ce dernier fait un carton. Vous allez donc stocker toutes ces vidéos sur S3 et grâce à son caractère hautement évolutif, vous ne rencontrerai pas de problèmes en terme de limite de stockage. Toutes les vidéos seront stockées dans la classe de stockage Standard répondant aux besoins de l’application. Vos coûts de stockage seront donc linéaires au nombre de vidéos chargées. Est-ce qu’il n’y aurait pas la possibilité d’optimiser ces coûts de manière automatisée ?
S3 permet de migrer automatiquement les objets dans d’autres classes de stockage en fonction de l’ancienneté des données. Vous remarquerez que les utilisateurs de votre application de partage de vidéos en ajoutent fréquemment et en général uniquement les dernières vidéos partagées sont visionnées par vos amis ou font le « buzz ».
En quelques clics vous pouvez appliquer à votre bucket S3 des règles de cycles de vie de vos objets afin de :
- Migrer les objets vers une classe moins onéreuse en stockage pour les données vieillissantes (quelques mois).
- Migrer les objets vers un archivage long terme pour les données anciennes (plusieurs années ou considérées comme supprimées).
- Prévoir une suppression automatique pour le très long terme.
- Gérer l’archivage des versions (si activée) de vos objets pour réduire leur coût.
Voici un exemple d’activation de règles de cycle de vie sur un bucket à travers l’interface Web d’AWS :
Les notifications d’événements
S3 propose une fonctionnalité très intéressante pour les développeurs : les notifications d’événements. Lorsqu’une opération est réalisée sur un objet (chargement, suppression, etc) S3 est capable de notifier cette opération vers d’autres services AWS :
- Amazon SNS (Simple Notification Service) : le service permettant d’envoyer des notifications « push » rapidement et de manière évolutive. En intégrant avec les notifications de suppression de S3, on peut par exemple recevoir par email un détail des fichiers importants supprimés.
- Amazon SQS (Simple Queue Service) : le service de file d’attente permettant de stocker des messages de manière centralisée et de les lire par d’autres applications. On peut imaginer une application de conversion d’images, qui, au chargement de nouvelles images dans S3, insère le nom des objets S3 dans la file d’attente. Cette dernière est ensuite consommée par des machines responsables de la conversion des images.
- AWS Lambda : le service permettant d’exécuter du code « sans serveur », l’infrastructure derrière est gérée par AWS. Très pratique pour des prototypes ou des micro services.
Et plus encore
En plus des fonctionnalités citées précédemment, S3 offre d’autres possibilités répondant à des problématiques plus précises, on peut notamment citer :
- Hébergement de sites Web statiques
- Point de terminaison VPC (Virtual Private Cloud)
- Journaux d’audit
- Réplication entre régions
- Surveillance et contrôle des coûts
- Transfert de grandes quantités de données
- Chargement sur S3 en plusieurs parties
- Accélération du transfert des données
Tarification
Comme pour la majorité des services proposés par AWS, la tarification d’Amazon S3 est basée sur la taille des données stockées, le nombre d’opérations et la taille des données en transit. Le détail des tarifs est disponible sur le site d’AWS. Nous vous proposons une petite exploration des tarifs à titre indicatif.
Prenons pour exemple la région Oregon, les coûts du stockage dépendra des classes utilisées (premier 1 To/mois) :
- Standard : $0.03 par Go
- Standard – Infrequent Access : $0.0125 par Go
- Glacier : $0.007 par Go
Les coûts pour les opérations sur les objets S3 dépendent aussi de la classe des objets :
- Standard
- Créations, modifications : $0.005 par tranche de 1 000 opérations
- Récupérations : $0.004 par tranche de 10 000 opérations
- Standard – IA
- Créations, modifications : $0.01 par tranche de 1 000 opérations
- Récupérations : $0.01 par tranche de 10 000 opérations
- Glacier
- Archivages, restaurations : $0.05 par tranche de 1 000 demandes
- Attention aux restaurations : 5% du stockage Glacier total gratuit par mois et $0.01 par Go au delà
Les transferts de données font aussi partie des coûts S3. Par exemple les transferts de S3 vers Internet vous couteront $0.09 par Go (premiers 10 To/mois).
Limites
Le service Amazon S3 comprend certaines limites imposées par l’infrastructure managée derrière :
- Chaque compte est limité à 100 buckets. Il est possible d’augmenter cette limite, uniquement depuis Août 2015, en contactant le support AWS.
- Le nom d’un bucket est unique pour tous. Il peut être judicieux de préfixer certains noms de bucket afin d’empêcher des erreurs lors de la création automatique de buckets via une application.
- La taille maximale d’un chargement sur S3 est 5 Go.
- La taille maximale d’un object est 5 To. Il faudra donc utiliser la fonctionnalité de chargement en plusieurs parties pour arriver à la taille maximale d’un objet.
- Il n’y a pas de limite sur le nombre maximum d’objets que peut contenir un bucket.
Quelques astuces
Amazon S3 fait partie du niveau d’utilisation gratuit d’AWS (« Free Tier« ) en offrant à chaque nouveau compte pendant un an (par mois) :
- 5 Go de stockage
- 20 000 opérations GET
- 2 000 opérations PUT
- 15 Go transfert de données entrantes
- 15 Go transfert de données sortantes
Concernant le chargement des objets sur S3, il est recommandé d’utiliser le chargement en plusieurs parties pour les fichiers dépassant les 100 Mo. Cette méthode comprend plusieurs avantages :
- La parallélisation du chargement, pour une exploitation maximale de la bande passante de votre connexion Internet.
- La mise en pause du chargement, en chargeant uniquement les parties manquantes.
Dernière astuce si vous avez de nombreuses opérations de récupération sur S3. Le service stocke les objets sous le format « clé/valeur » et répartit tous les objets sur plusieurs disques et machines. Pour optimiser la répartition des objets et donc la répartition de la charge serveur lorsque le trafic est important (au delà de 100 requêtes par seconde), il est conseillé d’ajouter une partie aléatoire au début de la clé de l’objet. Cette partie aléatoire peut être un « hash » (quelques caractères générés aléatoirement) ou, pour les clés contenant une valeur temporelle, une inversion de cette valeur temporelle (secondes puis minutes puis heures, etc).
Cas d’utilisation
Pour finir cet article, nous allons présenter quelques cas d’utilisation basés sur la puissance d’Amazon S3.
Archivage à faible coût
Aujourd’hui, les entreprises produisent beaucoup de données et il est nécessaire de pouvoir les stocker avec la meilleure durabilité et le coût le plus faible possible. S3 permet, via la gestion des cycles de vie des objets, d’archiver facilement les données non-utilisées mais qui ne doivent pas être supprimées. Pour rappel la classe de stockage Glacier propose un stockage à la hauteur de $0.007 par Go, pour une réduction des coûts maximale. À garder en tête que la récupération des données de Glacier peut être coûteuse si une grande partie des données est récupérée rapidement.
Site vitrine
S3 offre la possibilité d’héberger son site Web statique avec tous les avantages du service :
- Durabilité des données
- Gestion de trafic important
- Gestion des hausses de trafic soudaines
Pour améliorer les performances du site en terme de latence, il est même possible d’utiliser le service Amazon CloudFront afin de distribuer le contenu du site dans plusieurs pays (appelé CDN, Content Delivery Network), au plus proche des utilisateurs.
Stockage de fichiers sur le Cloud
À la manière de Google Drive ou Dropbox, on pourrait créer une application grand public destinée au stockage de fichiers. Cette application serait composée des éléments suivants :
Une interface qui permet aux utilisateurs de se connecter et de gérer leurs fichiers : cette interface peut être un site statique hébergé sur S3 qui pourra gérer un grand nombre d’utilisateurs et des hausses de trafic soudaines. Une flotte de serveurs pour gérer la logique applicative : AWS offre plusieurs services permettant d’exécuter cette logique (EC2, Lambda/API Gateway, ECS, etc). Un espace de stockage pour stocker les données chiffrées : S3 est parfait pour cela, le stockage est illimité, le chiffrage des données est disponible en fonction des besoins.
Reprise de sinistre
Lorsque votre site Web est lancé et que vous avez du trafic constant, il est important de mettre en place des mécanismes pour se rapprocher du 100% de disponibilité (ou « zero downtime »). Ces mécanismes doivent comprendre une gestion des sinistres afin de pouvoir fournir le meilleur service possible à vos utilisateurs en cas de panne plus ou moins générale tout en prenant en compte les coûts.
Une stratégie peut être de dupliquer toute l’infrastructure permettant le fonctionnement du site Web (serveurs, bases de données, données statiques, etc) dans un autre data center à l’autre bout du monde (une autre région AWS). Lorsqu’une panne générale intervient sur un data center, vous pouvez rediriger tout le trafic sur l’autre. Cette stratégie (aussi appelée « multi-régions ») assure la meilleure disponibilité mais est très onéreuse (coûts d’infrastructure multipliés, synchronisation des bases de données, réplication des données S3 dans une autre région, etc).
Une autre solution plus simple, faiblement coûteuse consiste à créer une version statique du site Web, de le mettre sur S3 dans une (ou plusieurs) autre région AWS. Ainsi, lors d’une panne générale il sera possible de rediriger vos utilisateurs sur cette version simplifiée du site Web. Bien que ce mécanisme ne permet pas de maintenir toutes les fonctionnalités du site Web, celui-ci reste toujours accessible et les utilisateurs ne paniqueront pas comparé à l’affichage d’une page blanche.
Gestion des logs applicatifs
Beaucoup de services AWS permettent de rediriger leur sortie ou leurs résultats vers S3. Ce principe est notamment utilisé pour les logs applicatifs qui, toutes les 20 minutes par exemple, sont envoyés sur S3 dans le but d’y avoir accès pour analyse ou sauvegarde en cas de défaillance de serveurs.
On va pouvoir utiliser les notifications d’événements pour réaliser notre exploitation des logs et ainsi identifier et comprendre les différents problèmes que notre application pourrait avoir. En définissant une fonction AWS Lambda sur les notifications d’écriture sur S3, il sera possible de mettre en place le processus suivant :
- Écriture du log sur S3
- Déclenchement de la notification
- Appel d’une fonction Lambda
- Lecture du fichier S3
- Insertion des lignes de logs dans une base de données
- Exploitation des données par le développeur en agrégeant les lignes de logs
Traitements gourmands
Une autre exploitation des notifications d’événements est le traitement de gros fichiers, de vidéos, d’images qui nécessite d’exécuter en arrière-plan des tâches de conversion, d’analyse, etc. Au chargement de ces fichiers sur S3, il est possible d’enregistrer ces notifications dans une file d’attente SQS et de les traiter ensuite. Sur des opérations d’analyse d’image ou d’agrégation de données, on va pouvoir créer une flotte de serveurs capable de consommer cette file d’attente, de réaliser les traitements nécessaires et de gérer la taille de la flotte en fonction de la taille de la file d’attente (toujours d’en l’optique d’optimiser les coûts en fonction des besoins).
En espérant vous avoir donné envie de réaliser votre prochaine application avec Amazon S3 et d’autres services AWS.
Sylvain BRUAS
Je suis architecte solution AWS depuis plus de 8 ans. J'interviens dans les grands groupes pour les aider dans leur transformation vers le cloud AWS.
Mes compétences principales sont les fondations AWS, le Dev(SecFin*)Ops et les containers.
AWS Community Builder et AWS Authorized Instructor depuis 2024