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