Davidson Consulting
Contexte de DataHug
La puissance de l'information
DataHug Overview
Overview Connecteur
Overview Analyse
Overview Visualisation
Spécifications Techniques
Rappel des besoins
Moyens d'utilisation
AWS Management Console
AWS CLI
aws dynamodb scan --table-name Sensor
aws SERVICE COMMANDE [--KEY VALUE]
AWS SDKs
Utilité : Streaming de données à une échelle massive pour un traitement temps réel.
Concept : Sorte de pipeline dans laquelle de la donnée est envoyée, et devient accessible par les autres services AWS
Place dans l'archi : Récupération des données et distribution de celle-ci aux autres services AWS, avec l'aide de Firehose ou Lambda.
#Création d'un stream
aws kinesis create-stream --stream-name data-stream --shard-count 1
#Ajout d'un enregistrement
aws kinesis put-record --stream-name data-stream --data "{\"Enregistrement\":\"Bonjour, ceci est mon un enregistrement\", \"salut\":[1,2]}"--partition-key 123
#Récupération d'un Shard Iterator
aws kinesis get-shard-iterator --shard-id $SHARD-ID --shard-iterator-type TRIM_HORIZON --stream-name data-stream
#Récupération de la donnée en base64 de ce shard iterator
aws kinesis get-records --shard-iterator $SHARD-ITERATOR
#Suppression d'un stream
aws kinesis delete-stream --stream-name data-stream
Utilité : Stockage de n'importe quelle quantité ou type de donnée. Récupérable n'importe quand et depuis n'importe où.
Concept : Stockage d'objets dans des buckets.
Place dans l'archi : Stockage brut de la donnée, des rapports, de meta-informations.
#copy, move, remove objects
cp, mv, rm
#synchro an S3 bucket with another S3bucket or local directory
sync
#make & remove buckets
mb, rb
#list objects or buckets
ls
#set a website configuration for a bucket
website
Utilité : Stockage rapide et flexible de documents.
Concept : Base de données NoSQL. Modèle de stockage en mode Clé-Valeurs. Son modèle de données est flexible et ses performances fiables.
Place dans l'archi : Exposer la donnée transformée aux outils BI pour analyse rapide. À une plus petite échelle que Redshift.
Comme j'ai travaillé dessus avec Node.js, le code ci-dessous utilise son SDK.
//Création d'une table
var AWS = require("aws-sdk");
var dynamodb = new AWS.DynamoDB();
var params= {
TableName: "Sensor",
KeySchema: [
{AttributeName:"SensorID", KeyType: "HASH"}
],
AttributeDefinitions:[
{AttributeName: "SensorID", AttributeType: "S"}
],
ProvisionedThroughput: {
ReadCapacityUnits:1,
WriteCapacityUnits:1
}
};
dynamodb.createTable(params, function(err, data){
if(err){
console.log(JSON.stringify(err, null, 2));
}
else{
console.log(JSON.stringify(data, null , 2));
}
});
Amazon Lambda
Utilité : Execution de code sans avoir à mettre en service ou gérer des serveurs.
Concept : Paiement au temps de calcul consommé, sans frais lorsqu'aucun code n'est exécuté. Exécution de code pour n'importe quel type d'application ou service back-end. Il suffit de charger le code, et de choisir les triggers (Manuels, évenements AWS, ou appels depuis des applications Web ou mobile).
Place dans l'archi : Transformation ou déplacement des données à plus petite échelle que le cluster EMR. Peut aussi sortir la donnée des streams Kinesis.
ProcessKinesisRecord.js
exports.handler = function(event, context){
console.log(JSON.stringify(event, null, ' '));
event.Records.forEach(function(record){
//Kinesis data is base64 encoded so decode here
var payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
console.log('Decoded payload :', payload);
});
context.done(null, "Stream data processed");
};
#Create function
aws lambda create-function --function-name ProcessKinesisRecords --zip-file fileb://d:/dev/AWS/lambda/ProcessKinesisRecords.zip --role arn:aws:iam::194248515650:role/lambda-kinesis-execution-role --handler ProcessKinesisRecords.handler --runtime nodejs --timeout 10
#Add Event source
aws lambda create-event-source-mapping --function-name ProcessKinesisRecords --event-source arn:aws:kinesis:eu-west-1:194248515650:stream/data-stream --batch-size 100 --starting-position TRIM_HORIZON
Amazon API Gateway
Utilité : Service permettant de créer, publier, gérer, surveiller et sécuriser facilement des API à n'importe quelle échelle.
Concept : Permet de créer une API qui agit comme "porte d'entrée" pour des applications, afin d'accéder aux données, à la logique métier ou aux fonctionnalités des services Amazon, comme Lambda ou des tâches EC2. API Gateway gère les tâches liées à l'acceptation et le traitement de plusieurs centaines de milliers d'appels d'API simultanés.
Place dans l'archi : Une autre façon de pousser de la donnée sur le cloud Amazon, ou de déclencher des évenements Lambda, directement via des requètes HTTP.
#Créer Rest API
aws apigateway create-rest-api --name DynamoDBOperations
#Récupérer Root ressource
aws apigateway get-resources --rest-api-id 8p7d0py4t2
#response
{
"items": [
{
"path": "/",
"id": "13agzy7geh"
}
]
}
#créer une ressource
aws apigateway create-resource --rest-api-id 8p7d0py4t2 --parent-id 13agzy7geh --path-part DynamoDBManager
#Créer méthode POST sur la ressource
aws apigateway put-method --rest-api-id 8p7d0py4t2 --resource-id d6d6te --http-method POST --authorization-type NONE
#Lier lambda & Api method POST
aws apigateway put-integration --rest-api-id 8p7d0py4t2 --resource-id d6d6te --http-method POST --type AWS --integration-http-method POST --uri arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:194248515650:function:LambdaFunctionOverHttps/invocations
#Préparer la réponse du lambda via l'API
aws apigateway put-method-response --rest-api-id 8p7d0py4t2 --resource-id d6d6te --http-method POST --status-code 200 --response-models "{"\"application/json\":\"Empty\"}"
#Déployer l'API
aws apigateway create-deployment --rest-api-id 8p7d0py4t2 --stage-name prod
#Gérer les permissions
aws lambda add-permission --function-name LambdaFunctionOverHttps --statement-id apigateway-prod-2 --action lambda:InvokeFunction --principal apigateway.amazonaws.com --source-arn "arn:aws:execute-api:eu-west-1:194248515650:8p7d0py4t2/prod/POST/DynamoDBManager"
#Créer un nouvel utilisateur
aws apigateway test-invoke-method
--rest-api-id 8p7d0py4t2
--resource-id d6d6te
--http-method POST
--path-with-query-string ""
--body "{\"operation\":\"create\",\"tableName\":\"User\",\"payload\":{\"Item\":{\"UserID\":\"aaa111\",\"UserName\":\"Alex\"}}}"
Amazon EC2
Utilité : Service fournissant une capacité de calcul redimensionnable dans le cloud.
Concept : Réduit le temps requis pour obtenir et démarrer de nouvelles instances de serveurs à quelques minutes, ce qui permet une haute scalabilité, au fur et à mesure des variations des besoins de calcul.
Place dans l'archi : Intégrée au sein du cluster EMR.
Amazon EMR
Utilité : Permet de traiter de vastes ensembles de données de manière simple rapide et rentable.
Concept : Fournis un framework Hadoop géré qui permet de distribuer et de traiter de grandes quantités de données à travers des instances EC2 dynamiquement évolutives. Permet également d'exécuter d'autres frameworks tels que Spark ou Presto, et d'intéragir avec les données de S3 ou DynamoDB.
Place dans l'archi : Exécuter les scripts d'intelligence sur la donnée stockée dans S3 et/ou DynamoDB. Génération régulière de rapports ou transformation des données entrantes en temps réel.
aws emr create-cluster
--name "demo"
--instance-type m3.xlarge
--instance-count 1
--release-label emr-4.1.0
--ec2-attributes KeyName=nbd1 --use-default-roles
--applications Name=Hive Name=Spark
aws emr terminate-cluster --cluster-name demo
Utilité : Permet d'analyser de manière simple et rentable toutes les données grâce aux outils d'informatique décisionnelle existants.
Concept : Entrepôt de données rapide, entièrement géré et doté d'une capacité de plusieurs pétaoctets. Data warehouse => Column based != DB => Row based
Place dans l'archi : Exposer la donnée transformée aux outils BI pour analyse rapide.
Architecture
Retour d'expérience
Rémi Lejeune
Directeur d'agence Davidson SI Nord
remi.lejeune@davidson.fr
06 33 25 91 44
Alexandre Theve
Ingénieur d'Affaires Davidson SI Nord
alexandre.theve@davidson.fr
06 98 69 47 40
Kevin Sansen
Ingénieur d'Affaires Davidson SI Nord
kevin.sansen@davidson.fr
06 08 15 37 35
Pierre Bausière
Ingénieur d'Etude Davidson SI Nord
pierre.bausiere@davidson.fr
06 83 71 44 40