4D Summit Europe 2016 - Conférence dA&C Consulting : "Stocker des données sur le cloud...

Preview:

Citation preview

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

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