- Activer et configurer Swift dans DevStack
- Comprendre les concepts du stockage objet Swift
- Manipuler des conteneurs et des objets via CLI
- Gérer les permissions et métadonnées
Durée estimée : 1 heure
cd ~/devstack
source openrc admin admin
openstack service list | grep swiftSi Swift n'apparaît pas, vous devez l'activer.
cd ~/devstack
./unstack.shcd ~/devstack
nano local.confAjoutez les lignes suivantes dans la section appropriée (après [[local|localrc]]) :
# Activer Swift
enable_service s-proxy s-object s-container s-account
# Configuration Swift
SWIFT_HASH=secret_hash_value_change_me
SWIFT_REPLICAS=1
SWIFT_DATA_DIR=$DEST/data/swiftExplication des services :
s-proxy: Service proxy Swift (point d'entrée API)s-object: Service de stockage d'objetss-container: Service de gestion des conteneurss-account: Service de gestion des comptes
Sauvegardez avec Ctrl+O, Entrée, puis Ctrl+X.
./stack.shAttention : Cette opération peut prendre 10-15 minutes.
source openrc admin admin
openstack service list | grep swift
openstack endpoint list | grep swiftRésultat attendu : Vous devez voir le service "swift" avec ses endpoints (public, internal, admin).
openstack object store account showRésultat attendu : Des informations sur votre compte Swift (0 conteneurs, 0 objets au démarrage).
openstack container create formation
openstack container create images
openstack container create documentsopenstack container listmkdir ~/swift-tp
cd ~/swift-tp
echo "Bienvenue dans Swift!" > test1.txt
echo "Formation OpenStack" > test2.txt
dd if=/dev/urandom of=fichier-5mo.bin bs=1M count=5openstack object create formation test1.txt
openstack object create formation test2.txt
openstack object create documents fichier-5mo.binopenstack object list formation
openstack object list documentsopenstack object show formation test1.txtQuestion : Quelle est la taille de l'objet ? Quel est son ETag ?
openstack object save formation test1.txt --file test1-copie.txt
cat test1-copie.txtopenstack container set --property Projet=Formation --property Environnement=TP imagesopenstack container show imagesopenstack object create images test1.txt \
--property Auteur=Stagiaire \
--property Type=Demo \
--property Date=2024-12-17openstack object show images test1.txtopenstack object store account showObservation : Notez le nombre de conteneurs, d'objets et l'espace utilisé.
openstack container create demo-public
openstack container set --property read=.r:*,.rlistings demo-publicExplication :
.r:*= lecture autorisée pour tous.rlistings= listing du conteneur autorisé
echo "<h1>Page publique Swift</h1><p>Ceci est accessible sans authentification</p>" > index.html
openstack object create demo-public index.htmlPROJET_ID=$(openstack token issue -f value -c project_id)
SWIFT_URL=$(openstack catalog show swift -f value -c endpoints | grep public | awk '{print $2}')
echo "${SWIFT_URL}/demo-public/index.html"curl http://localhost:8080/v1/AUTH_${PROJET_ID}/demo-public/index.htmlRésultat attendu : Le contenu HTML doit s'afficher sans authentification.
openstack container unset --property read demo-publiccurl http://localhost:8080/v1/AUTH_${PROJET_ID}/demo-public/index.htmlRésultat attendu : Erreur 401 ou 403.
dd if=/dev/urandom of=gros-fichier.bin bs=1M count=20openstack object create documents gros-fichier.bin --segment-size 5242880Explication : Le fichier est divisé en segments de 5 Mo.
openstack container list
openstack object list documents
openstack object list documents_segmentsObservation : Un conteneur documents_segments a été créé automatiquement pour stocker les morceaux.
Obtenir un token et l'URL Swift :
export OS_TOKEN=$(openstack token issue -f value -c id)
export SWIFT_URL=$(openstack catalog show swift -f value -c endpoints | grep public | awk '{print $2}')curl -X GET -H "X-Auth-Token: $OS_TOKEN" $SWIFT_URLcurl -X PUT -H "X-Auth-Token: $OS_TOKEN" $SWIFT_URL/api-testcurl -X PUT -H "X-Auth-Token: $OS_TOKEN" \
-H "Content-Type: text/plain" \
--data "Créé via API REST" \
$SWIFT_URL/api-test/fichier-api.txtopenstack container list
openstack object list api-testScénario : Vous devez créer un système de stockage pour des logs d'application.
Consignes :
- Créer un conteneur nommé
logs-app - Créer 3 fichiers de logs simulés :
echo "2024-12-17 10:00:00 INFO Application démarrée" > app-2024-12-17.log
echo "2024-12-17 11:30:00 ERROR Erreur de connexion" >> app-2024-12-17.log
echo "2024-12-17 14:15:00 INFO Traitement terminé" >> app-2024-12-17.log
echo "2024-12-16 09:00:00 INFO Application démarrée" > app-2024-12-16.log
echo "2024-12-15 09:00:00 INFO Application démarrée" > app-2024-12-15.log- Uploader ces fichiers avec des métadonnées appropriées (date, type, application)
- Afficher la liste des logs
- Récupérer le log du 17 décembre
Solution suggérée :
# 1. Créer le conteneur
openstack container create logs-app
# 2 & 3. Uploader avec métadonnées
openstack object create logs-app app-2024-12-17.log \
--property Date=2024-12-17 \
--property Type=log \
--property App=DemoApp
openstack object create logs-app app-2024-12-16.log \
--property Date=2024-12-16 \
--property Type=log \
--property App=DemoApp
openstack object create logs-app app-2024-12-15.log \
--property Date=2024-12-15 \
--property Type=log \
--property App=DemoApp
# 4. Lister
openstack object list logs-app
# 5. Récupérer
openstack object save logs-app app-2024-12-17.log
cat app-2024-12-17.log# Supprimer les objets
openstack object delete formation test1.txt
openstack object delete formation test2.txt
openstack object delete documents fichier-5mo.bin
openstack object delete documents gros-fichier.bin
# Supprimer les conteneurs
openstack container delete formation
openstack container delete images
openstack container delete documents
openstack container delete demo-public
openstack container delete api-test
openstack container delete logs-app
# Vérifier
openstack container list✅ Swift = Stockage objet distribué
- Pas de hiérarchie de dossiers (seulement conteneurs et objets)
- Identifiant unique par objet
- Métadonnées personnalisables
✅ Architecture :
- Compte → Conteneurs → Objets
- API REST standard
✅ Cas d'usage :
- Stockage de fichiers média (images, vidéos)
- Backups et archives
- Logs applicatifs
- Contenu statique de sites web
✅ Différences avec Cinder (stockage bloc) :
- Swift : objets immuables, accès HTTP, scalabilité horizontale
- Cinder : volumes, accès bloc, attachés aux instances
- Quelle est la différence entre un conteneur et un objet ?
- Pourquoi utiliser des métadonnées ?
- Dans quels cas rendre un conteneur public ?
- Comment Swift gère-t-il les gros fichiers ?
- Quels sont les avantages de l'API REST ?
Félicitations ! Vous savez maintenant utiliser Swift !
- Documentation officielle Swift : https://docs.openstack.org/swift/
- Swift API Reference : https://docs.openstack.org/api-ref/object-store/
- OpenStack Client Commands : https://docs.openstack.org/python-openstackclient/