Davidson Consulting
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));
}
});
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
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\"}}}"
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.
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.
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