Download - 4D Summit Europe 2016 - Conférence dA&C Consulting : "Stocker des données sur le cloud avec S3"
Stocker des données sur le Cloud avec S3
4D Summit Europe 2016
Bruno LEGAY
A&C Consultingwww.ac-consulting.fr
Introduction
Définition de «Cloud
Computing»
Définition
Cloud computing : “mise à disposition de services hébergés via Internet”
Caractéristiques
• A la demande• Accès réseau large bande• Réservoir de ressources• Elasticité• Facturation à l’usage
Modèles de service
• IaaS (Infrastructure as a Service)• PaaS (Plateform as a Service)• SaaS (Software as a Service)
Modèles de service (suite)
Storage
Network
Servers
Virtualization
OS
Middleware
Runtime
Data
Application
Traditionnel(pour comparaison)
Vous
gér
ez
Storage
Network
Servers
Virtualization
OS
Middleware
Runtime
Data
Application
Infrastructure(as a Service)
Vous
gér
ez
Fournisseur
Storage
Network
Servers
Virtualization
OS
Middleware
Runtime
Data
Application
Platform(as a Service)
Vous
gér
ez
Fournisseur
Storage
Network
Servers
Virtualization
OS
Middleware
Runtime
Data
Application
Software(as a Service)
Fournisseur
Modèles de déploiement
• Cloud public• Cloud privé• Cloud communautaire• Cloud hybrid
Pourquoi utiliser le Cloud ?
Les avantages
• Fiabilité/résilience• Montée en charge• Coût• Sécurité
Les inconvénients
• Coût (estimation)• Verrouillage fournisseur• Confidentialité / sécurité ?
Exploiter le Cloud avec 4D
Un cas d’espèce
• 4D db avec de gros blobs (>30 Mb)
• Document avec des métadonnées• Faible taux de création de blobs• Faible taux de modification de blobs• Faible taux de lecture des blobs
Le problème
• % de blob dans les données• Gestion des gros fichiers• Backup : intégral vs différentiel
OptionsStore
Infrastructure managed by
Integritymanaged by
Transaction Security Backup
blob (record) na 4D 4D na yes
blob (data file) na 4D 4D na yes
blob (disk) na 4D 4D na yes
file (local disk) you you you you you
file (shared disk) you you you you you
cloud cloud you you you + cloud you + cloud
Notre approche
Everything is an object
• Un fichier est un objet• Un blob est un objet• Mais pour REST un objet est une
«ressource»
Cloud Object
• Un objet identifié par UUID• Metadonnées• Imagette
Métadonnées de ressource• chemin/nom de fichier• Date de création, modification• type (pdf, jpg, png, xml, json, etc...)• Taille, empreinte (md5)• Pdf : nombre de pages• Image : résolution, exif, etc...
Amazon AWS
Amazon AWS
• Visionnaire• Leader• «Eat your own dog food»• Documentation https://aws.amazon.com/documentation/
Services• S3 : stockage d’objets• EC2 : machines virtuelles• Glacier : archivage• DynamoDB : NoSQL database• Beanstalk : déploiement d’application• RDS : bases de données
Créer son compte
• Accès à la Console AWS• Gestion et suivi des services• Obtenir les identifiantso «AccessKeyId» : 20 caractèreso «SecretAccessKey» : 40 caractères
Les «régions» AWS
• 10 régions• Vérifier la disponibilité du service• Choisir une région (proche de vous)
Région Continent Localisationus-east-1 US East N. Virginiaus-west-2 US West Oregonus-west-1 US West N. Californiaus-gov US West ?eu-west-1 EU Irelandeu-central-1 EU Frankfurtap-southeast-1 Asia Pacific Singaporeap-northeast-1 Asia Pacific Tokyoap-southeast-2 Asia Pacific Sydneyap-northeast-2 Asia Pacific Seoulcn-north-1 Asia Pacific Beijingsa-east-1 South America Sao Paulo
AWS endpoint
• La partie Host/domain de l’URL• Exemple :
s3-eu-central-1.amazonaws.com
S3 service EU - Frankfurt
Les outils et APIs AWS
• Online : AWS Management Console• Outil : AWS CLI• SDKs (Java, PHP, Python, Ruby, etc)• APIs :
o RESTful APIso SOAP APIs : déprécié
AWS ligne de commande
• Outil basé sur Python• Unifié pour tous les services• Cross platform• Peut être utilisé dans 4D avec LPE
(LANCER PROCESS EXTERNE)
AWS ligne de commande (suite)
• Télécharger installer• Configurer
$ aws configureAWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLEAWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYDefault region name [None]: us-west-2Default output format [None]: ENTER
• Exemple : • Sortie : json, text (tab / table)• Documentation
http://docs.aws.amazon.com/cli/latest/reference/
$ aws <service> ...
AWS ligne de commande (suite)
• Syntaxe spécifique au service
Les APIs AWS
• Basés sur REST• Mécanisme d’authentification
commun • APIs spécifiques à chaque service
Le service S3 d’Amazon
Tarifs S3• 100 Gb ≈ 3$/mois• Les tarifs dépendent de la région• Calculatrice de coût
http://calculator.s3.amazonaws.com/index.html
Les ressources S3• «Bucket» (conteneur racine)• Objet• Identifié par une «cl黕 Exemple de clé :
map/map/images/map/images/logo.png
Les propriétés d’objet S3• Basiques (clé, taille, dates, ...)• Date d’expiration• Stockage (standard, reduced, ...)• Cryptage (none, AES-256)• Permissions• Métadonnées
Url S3• Deux syntaxes possibles• Exemples avec le bucket «myBucket» :
https://myBucket.s3-eu-central-1.amazonaws.com
https://s3-eu-central-1.amazonaws.com/myBucket
Url S3 (suite)• Avec la clé
https://s3-eu-central-1.amazonaws.com/myBucket/map/images/logo.png
https://myBucket.s3-eu-central-1.amazonaws.com/map/images/logo.png
https://myBucket.s3-eu-central-1.amazonaws.com/<object_key>
https://s3-eu-central-1.amazonaws.com/myBucket/map/images/logo.png?acl
• Avec la clé et une «query string»
Les services S3 avec cli• Deux services• s3 • s3 api• Documentation
http://docs.aws.amazon.com/cli/latest/reference/s3api/http://docs.aws.amazon.com/cli/latest/reference/s3/
$ aws s3 ...
$ aws s3api ...
Les opérations REST S3• Opérations sur les «buckets»• Opérations sur les objets• Les réponses de S3 au format XML ou
JSON• Documentation
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketOps.htmlhttp://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectOps.html
S3 auth/signature• Deux méthodes possibles• Entêtes HTTP• Paramètres «Query string»• Documentation
http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.htmlhttp://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
La signature AWS
La signature S3
Le composant AWS
L’assistant CLI
// call once (AWS client needs to be configured)AWS_cliPathSet ("/Users/ble/.local/lib/aws/bin/aws")
// http://docs.aws.amazon.com/cli/latest/reference/s3/C_POINTEUR($vp_nil)C_TEXTE($vt_list)AWS_cliRun ("s3 ls s3://ac-consulting-test/test/demo/"\ ;Faux;$vp_nil;->$vt_list)ALERTE($vt_list)
L’assistant CLI (suite) // http://docs.aws.amazon.com/cli/latest/reference/s3api/ // we will use json :-)
// first get informations of the object with the "head-object" the json as text and parse the jsonC_TEXTE($vt_json)C_POINTEUR($vp_nil)AWS_cliRun ("s3api "+\ "head-object "+\ "--bucket ac-consulting-test "+\ "--key test/demo/imagePrivate.png";\ Faux;$vp_nil;->$vt_json)
C_OBJET($vo_objectProperties)$vo_objectProperties:=JSON Parse($vt_json) // { // "AcceptRanges": "bytes", // "ContentType": "image/png", // "LastModified": "Mon, 04 Jan 2016 09:43:06 GMT", // "ContentLength": 288548, // "ETag": "\"43ef6cf259c8183e4c79d584ca03733c\"", // "StorageClass": "REDUCED_REDUNDANCY", // "ServerSideEncryption": "AES256", // "Metadata": {} // }
L’assistant CLI (suite) // wouldn't it be nice if we could get the json directly from the AWS_cliRun ?
// list objects in the bucketC_POINTEUR($vp_nil)C_OBJET($vo_objectProperties)EFFACER VARIABLE($vo_objectProperties)AWS_cliRun ("s3api "+\ "head-object "+\ "--bucket ac-consulting-test "+\ "--key test/demo/imagePrivate.png";\ Faux;$vp_nil;->$vo_objectProperties) // { // "AcceptRanges": "bytes", // "ContentType": "image/png", // "LastModified": "Mon, 04 Jan 2016 09:43:06 GMT", // "ContentLength": 288548, // "ETag": "\"43ef6cf259c8183e4c79d584ca03733c\"", // "StorageClass": "REDUCED_REDUNDANCY", // "ServerSideEncryption": "AES256", // "Metadata": {} // }
L’assistant CLI (suite)
// get a resource into a blobC_POINTEUR($vp_nil)C_BLOB($vp_blob)AWS_cliRun ("s3 cp s3://ac-consulting-test/test/demo/imagePrivate.png -"\ ;Faux;$vp_nil;->$vp_blob)
L’API REST AWS API
C_TEXTE($vt_region;$vt_AWSAccessKeyId;$vt_AWSSecretKey)C_BOOLEEN($vb_interprocess)
$vt_region:="us-west-2"$vt_AWSAccessKeyId:="AKIAIOSFODNN7EXAMPLE"$vt_AWSSecretKey:="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"$vb_interprocess:=Vrai
// The parameters are set for the next S3_restApi callsAWS_paramSet ($vt_region;$vt_AWSAccessKeyId;$vt_AWSSecretKey;$vb_interprocess)
Gestion des identifiants
TABLEAU TEXT($tt_requestHeadersArray;0)TABLEAU TEXT($tt_responseHeadersArray;0)C_BLOB($vx_requestBodyBlob;$vx_responseBodyBlob)C_TEXTE($vt_httpVerb;$vt_bucket;$vt_uri)$vt_httpVerb:=HTTP Méthode GET //"GET" $vt_bucket:="ac-consulting-test"$vt_uri:="/"
C_ENTIER LONG($vl_httpReponseStatus) //200 <=> OK$vl_httpReponseStatus:=S3_restApi ($vt_httpVerb;$vt_bucket;$vt_uri;\ ->$tt_requestHeadersArray;\ ->$vx_requestBodyBlob;\ ->$tt_responseHeadersArray;\ ->$vx_responseBodyBlob)
L’API REST AWS APIAppel à l’API S3
Démonstration
Questions & Réponses
Votre avis compte beaucoup pour nous
Visitez summit.4d.comSélectionnez l’agenda, la session et
Wifi gratuit : Novotel_Charentonpas de mot de passe
En participant à l’enquête, vous pouvez gagner des prix remislors de la session des questions/réponses de jeudi
Merci !
Bruno LEGAYA&C Consulting
www.ac-consulting.frwww.linkedin.com/in/brunolegay