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