SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
@Xebiconfr #Xebicon18
Build the future
Google Cloud Function - Drone Challenge
@Xebiconfr #Xebicon18
Build the future
Google Cloud Function - Drone Challenge
@Xebiconfr #Xebicon18
Qui je suis ?
Antoine Le Taxin
Développeur full stack JS
@modulom
@Xebiconfr #Xebicon18
Qui je suis ?
Nicolas Dechandon
Data Engineer
@ndechandon
@Xebiconfr #Xebicon18
Qui je suis ?
Jean-Baptiste Claramonte
Artiste Back
@jbclaramonte
@Xebiconfr #Xebicon18
Agenda
1. Les Cloud Functions en 5 minutes
2. Le hands on : drone challenge
6
@Xebiconfr #Xebicon18
Google Cloud Functions en 5 minutes
@Xebiconfr #Xebicon18
Les runtimes disponibles
●JavaScript
● Node.js 6
● Node.js 8 (Beta)
●Python 3.7.0 (Beta)
●Go (Alpha)
8
@Xebiconfr #Xebicon18
Google utilise gVisor
9
“gVisor provides a strong isolation
boundary by intercepting
application system calls and acting
as a guest kernel, all while running
entirely in user-space.”
@Xebiconfr #Xebicon18
2 grands types de Cloud Functions
●HTTP Functions
○ trigger HTTP
●Background Functions
○ sources de trigger:
■ Pub/Sub
■ Cloud Storage
■ Firebase
10
@Xebiconfr #Xebicon18
Environnement, limites et quotas
Image de base : Ubuntu 18.04
1000 fonctions / projet
max 2 Go de mémoire d’exécution
temps d’exécution max : 540 s
11
@Xebiconfr #Xebicon18
Exemple de code
12
Fonction déclenchée par HTTP (Node 8)
Le model pour la request et la response est basé le framework “Express”
https://expressjs.com/en/api.html
@Xebiconfr #Xebicon18
Exemple de code
13
Fonction déclenchée par Pub/Sub (Node 8)
@Xebiconfr #Xebicon18
Le hands on
@Xebiconfr #Xebicon18 15
@Xebiconfr #Xebicon18
Le concept
16
Votre but:
Envoyer une commande de
déplacement à votre drone pour
qu’il ...
@Xebiconfr #Xebicon18
Le concept
17
Votre but:
Envoyer une commande de
déplacement à votre drone pour
qu’il aille chercher un paquet ...
@Xebiconfr #Xebicon18
Le concept
18
Votre but:
Envoyer de commande de
déplacement à votre drone pour
qu’il aille chercher un paquet
puis une autre commande pour
qu’il parte le livrer
@Xebiconfr #Xebicon18
Le concept
19
Votre but:
Envoyer une commande de
déplacement à votre drone pour
qu’il aille chercher un paquet
puis une autre commande pour
qu’il parte le livrer
et ainsi de suite !
@Xebiconfr #Xebicon18
Le concept
20
Chaque livraison effectuée vous
fera gagner des points
@Xebiconfr #Xebicon18
Différents types de paquet disponibles
21
CLASSIC : chaque livraison effectuée
vous fera gagner des points (50, 100 ou
200).
SPEED_BOOST : paquet spécial, il
rendra votre drone plus rapide à
chaque fois que vous en prendrez un.
@Xebiconfr #Xebicon18
Le fonctionnement global
22
Projet du moteur de jeux “drone challenge” Votre Projet
Cloud
Function
Cloud
Pub/Sub
1
Moteur du jeux
“drone challenge”
POST HTTP avec les
données temps réel du drone.
Cloud Function HTTP qui
reçoit les données du drones
et prend la décision de la
commande à donner au drone.
Push vers topic Pub/Sub
afin de transmettre la
commande au drone.
2
1
3
2
3
@Xebiconfr #Xebicon18 23
Les 2 événements envoyés par votre drone
à votre Cloud Function
WAITING_FOR_COMMAND
MOVING
Le drone est
arrivé à
destination
- Votre Cloud Function reçoit un événement toutes les secondes.
- Au démarrage, lorsque votre Cloud Function commencera à recevoir des
événements ce sera WAITING_FOR_COMMAND
- Si votre Drone ne bouge pas alors ce sera WAITING_FOR_COMMAND toutes les
secondes
- Quand le drone bougera ce sera MOVING tant qu’il n’est pas arrivé à destination
Etat initial
@Xebiconfr #Xebicon18
C’est parti !
@Xebiconfr #Xebicon18
WARNING
25
@Xebiconfr #Xebicon18
Ouvrir la console Google Cloud Platform
https://console.cloud.google.com
26
@Xebiconfr #Xebicon18
Aller sur le projet de votre team
27
cliquez ici
Puis cherchez le projet
de votre team (le nom
d’une couleur)
Bien sélectionner
l’organisation XEBIA.FR
@Xebiconfr #Xebicon18
Dans votre projet, ouvrez “Cloud Shell”
28
cliquez ici
@Xebiconfr #Xebicon18 29
@Xebiconfr #Xebicon18 30
Dans Cloud Shell cloner le repo github:
https://github.com/xebia-france/drone_company
@Xebiconfr #Xebicon18 31
Ouvrir le “Code Editor”
Il se peut que vous rencontriez des pbs pour ouvrir “Code Editor”:
si tel est le cas essayez de fermer complètement/redémarrer
chrome … :’-/
@Xebiconfr #Xebicon18
Présentation de l’environnement
32
@Xebiconfr #Xebicon18
1ere étape
33
Projet du moteur de jeux “drone challenge” Votre Projet
Moteur du jeux
“drone challenge”
Créer votre Cloud
Function HTTP qui recevra les
événements provenant du
drone
Faire un POST HTTP vers
une url du moteur du jeux
pour lui transmettre l’url de
votre Cloud Function vers
laquelle pousser les
événements de votre drone
2
1
1
2
@Xebiconfr #Xebicon18
Description de l’événement reçu par votre Cloud Function
34
{
"teamId": "pink-719",
"event": "MOVING",
"availableParcelsForTeam": [
],
"droneInfo": {
"parcels": [
],
"command": {
"location": {
"latitude": 48.867271697034234,
"longitude": 2.273857921355812
},
"name": "MOVE"
},
"distancePerTick": 0.3,
"location": {
"latitude": 48.863946199303555,
"longitude": 2.336804643816769
},
"score": 0,
"topicUrl": "https:..."
},
}
[
{
"location": {
"delivery": {
"latitude": 48.89475445863184,
"longitude": 2.277210420377155
},
"pickup": {
"latitude": 48.90351526655187,
"longitude": 2.2563030175595142
}
},
"score": 50,
"status": "AVAILABLE",
"teamId": "pink-719",
"type": "CLASSIC"
},
...
]
@Xebiconfr #Xebicon18
Description de l’événement reçu par votre Cloud Function
35
{
"teamId": "pink-719",
"event": "MOVING",
"availableParcelsForTeam": [
],
"droneInfo": {
"parcels": [
],
"command": {
"location": {
"latitude": 48.867271697034234,
"longitude": 2.273857921355812
},
"name": "MOVE"
},
"distancePerTick": 0.3,
"location": {
"latitude": 48.863946199303555,
"longitude": 2.336804643816769
},
"score": 0,
"topicUrl": "https:..."
},
}
[
{
"location": {
"delivery": {
"latitude": 48.89913913916235,
"longitude": 2.4160708432981473
},
"pickup": {
"latitude": 48.90704487288879,
"longitude": 2.281904373627992
}
},
"parcelId": "03fff885-...",
"score": 50,
"status": "GRABBED",
"teamId": "all",
"type": "CLASSIC"
}
]
@Xebiconfr #Xebicon18
Commande de déplacement à envoyer à votre drone
36
let command = {
teamId: droneEvent.teamId,
command: {
name: 'MOVE',
location: {
latitude: 48.867271697034234,
longitude: 2.273857921355812
},
}
};
@Xebiconfr #Xebicon18
Avant de commencer
Votre cloud function :
- est appelée environ toutes les
secondes
- ne reçoit que les événements de
votre drone
- faites une première version simple !
- et améliorez la ensuite
37

Contenu connexe

Tendances

Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Cédric Leblond
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sArnaud MAZIN
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?ALTER WAY
 
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Publicis Sapient Engineering
 
Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...Publicis Sapient Engineering
 
Kit de Developpement Synolia
Kit de Developpement SynoliaKit de Developpement Synolia
Kit de Developpement SynoliaRachid Zarouali
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Publicis Sapient Engineering
 
Docker Geneva Meetup - Swarm
Docker Geneva Meetup - SwarmDocker Geneva Meetup - Swarm
Docker Geneva Meetup - SwarmSmartWave
 
Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de JhipsterKokou Gaglo
 

Tendances (11)

Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
 
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8sKubernetes Meetup Paris #5 - Metriques applicatives k8s
Kubernetes Meetup Paris #5 - Metriques applicatives k8s
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
 
Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...
 
Kit de Developpement Synolia
Kit de Developpement SynoliaKit de Developpement Synolia
Kit de Developpement Synolia
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
 
Docker Geneva Meetup - Swarm
Docker Geneva Meetup - SwarmDocker Geneva Meetup - Swarm
Docker Geneva Meetup - Swarm
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de Jhipster
 
Intro docker
Intro dockerIntro docker
Intro docker
 

Similaire à Hands on drone challenge - xebicon'18

Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurPublicis Sapient Engineering
 
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...Publicis Sapient Engineering
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...Publicis Sapient Engineering
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?Publicis Sapient Engineering
 
Xebicon'16 : Introduction à Unikernel. Par Jean-Baptiste Claramonte et Tomas ...
Xebicon'16 : Introduction à Unikernel. Par Jean-Baptiste Claramonte et Tomas ...Xebicon'16 : Introduction à Unikernel. Par Jean-Baptiste Claramonte et Tomas ...
Xebicon'16 : Introduction à Unikernel. Par Jean-Baptiste Claramonte et Tomas ...Publicis Sapient Engineering
 
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...Publicis Sapient Engineering
 
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...Publicis Sapient Engineering
 
Kubernetes University - Cap sur l'orchestration
Kubernetes University - Cap sur l'orchestrationKubernetes University - Cap sur l'orchestration
Kubernetes University - Cap sur l'orchestrationWescale
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerJean-Baptiste Claramonte
 
Intégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ciIntégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ciwiemfourati
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Webekino
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Fabien Arcellier
 
la boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsla boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsChristophe Villeneuve
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs WebMickael Dumand
 
La réalité mélangée dans vos applications
La réalité mélangée dans vos applicationsLa réalité mélangée dans vos applications
La réalité mélangée dans vos applicationsChristophe Villeneuve
 
Self-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et GitlabSelf-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et GitlabJulien Wittouck
 
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !Publicis Sapient Engineering
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...Publicis Sapient Engineering
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsCocoaHeads France
 

Similaire à Hands on drone challenge - xebicon'18 (20)

Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
 
Xebicon'16 : Introduction à Unikernel. Par Jean-Baptiste Claramonte et Tomas ...
Xebicon'16 : Introduction à Unikernel. Par Jean-Baptiste Claramonte et Tomas ...Xebicon'16 : Introduction à Unikernel. Par Jean-Baptiste Claramonte et Tomas ...
Xebicon'16 : Introduction à Unikernel. Par Jean-Baptiste Claramonte et Tomas ...
 
Unikernel Xebicon 2016
Unikernel Xebicon 2016Unikernel Xebicon 2016
Unikernel Xebicon 2016
 
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
 
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
 
Kubernetes University - Cap sur l'orchestration
Kubernetes University - Cap sur l'orchestrationKubernetes University - Cap sur l'orchestration
Kubernetes University - Cap sur l'orchestration
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration Docker
 
Intégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ciIntégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ci
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Web
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
 
la boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsla boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtools
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Web
 
La réalité mélangée dans vos applications
La réalité mélangée dans vos applicationsLa réalité mélangée dans vos applications
La réalité mélangée dans vos applications
 
Self-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et GitlabSelf-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et Gitlab
 
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
 

Hands on drone challenge - xebicon'18

  • 1. @Xebiconfr #Xebicon18 Build the future Google Cloud Function - Drone Challenge
  • 2. @Xebiconfr #Xebicon18 Build the future Google Cloud Function - Drone Challenge
  • 3. @Xebiconfr #Xebicon18 Qui je suis ? Antoine Le Taxin Développeur full stack JS @modulom
  • 4. @Xebiconfr #Xebicon18 Qui je suis ? Nicolas Dechandon Data Engineer @ndechandon
  • 5. @Xebiconfr #Xebicon18 Qui je suis ? Jean-Baptiste Claramonte Artiste Back @jbclaramonte
  • 6. @Xebiconfr #Xebicon18 Agenda 1. Les Cloud Functions en 5 minutes 2. Le hands on : drone challenge 6
  • 7. @Xebiconfr #Xebicon18 Google Cloud Functions en 5 minutes
  • 8. @Xebiconfr #Xebicon18 Les runtimes disponibles ●JavaScript ● Node.js 6 ● Node.js 8 (Beta) ●Python 3.7.0 (Beta) ●Go (Alpha) 8
  • 9. @Xebiconfr #Xebicon18 Google utilise gVisor 9 “gVisor provides a strong isolation boundary by intercepting application system calls and acting as a guest kernel, all while running entirely in user-space.”
  • 10. @Xebiconfr #Xebicon18 2 grands types de Cloud Functions ●HTTP Functions ○ trigger HTTP ●Background Functions ○ sources de trigger: ■ Pub/Sub ■ Cloud Storage ■ Firebase 10
  • 11. @Xebiconfr #Xebicon18 Environnement, limites et quotas Image de base : Ubuntu 18.04 1000 fonctions / projet max 2 Go de mémoire d’exécution temps d’exécution max : 540 s 11
  • 12. @Xebiconfr #Xebicon18 Exemple de code 12 Fonction déclenchée par HTTP (Node 8) Le model pour la request et la response est basé le framework “Express” https://expressjs.com/en/api.html
  • 13. @Xebiconfr #Xebicon18 Exemple de code 13 Fonction déclenchée par Pub/Sub (Node 8)
  • 16. @Xebiconfr #Xebicon18 Le concept 16 Votre but: Envoyer une commande de déplacement à votre drone pour qu’il ...
  • 17. @Xebiconfr #Xebicon18 Le concept 17 Votre but: Envoyer une commande de déplacement à votre drone pour qu’il aille chercher un paquet ...
  • 18. @Xebiconfr #Xebicon18 Le concept 18 Votre but: Envoyer de commande de déplacement à votre drone pour qu’il aille chercher un paquet puis une autre commande pour qu’il parte le livrer
  • 19. @Xebiconfr #Xebicon18 Le concept 19 Votre but: Envoyer une commande de déplacement à votre drone pour qu’il aille chercher un paquet puis une autre commande pour qu’il parte le livrer et ainsi de suite !
  • 20. @Xebiconfr #Xebicon18 Le concept 20 Chaque livraison effectuée vous fera gagner des points
  • 21. @Xebiconfr #Xebicon18 Différents types de paquet disponibles 21 CLASSIC : chaque livraison effectuée vous fera gagner des points (50, 100 ou 200). SPEED_BOOST : paquet spécial, il rendra votre drone plus rapide à chaque fois que vous en prendrez un.
  • 22. @Xebiconfr #Xebicon18 Le fonctionnement global 22 Projet du moteur de jeux “drone challenge” Votre Projet Cloud Function Cloud Pub/Sub 1 Moteur du jeux “drone challenge” POST HTTP avec les données temps réel du drone. Cloud Function HTTP qui reçoit les données du drones et prend la décision de la commande à donner au drone. Push vers topic Pub/Sub afin de transmettre la commande au drone. 2 1 3 2 3
  • 23. @Xebiconfr #Xebicon18 23 Les 2 événements envoyés par votre drone à votre Cloud Function WAITING_FOR_COMMAND MOVING Le drone est arrivé à destination - Votre Cloud Function reçoit un événement toutes les secondes. - Au démarrage, lorsque votre Cloud Function commencera à recevoir des événements ce sera WAITING_FOR_COMMAND - Si votre Drone ne bouge pas alors ce sera WAITING_FOR_COMMAND toutes les secondes - Quand le drone bougera ce sera MOVING tant qu’il n’est pas arrivé à destination Etat initial
  • 26. @Xebiconfr #Xebicon18 Ouvrir la console Google Cloud Platform https://console.cloud.google.com 26
  • 27. @Xebiconfr #Xebicon18 Aller sur le projet de votre team 27 cliquez ici Puis cherchez le projet de votre team (le nom d’une couleur) Bien sélectionner l’organisation XEBIA.FR
  • 28. @Xebiconfr #Xebicon18 Dans votre projet, ouvrez “Cloud Shell” 28 cliquez ici
  • 30. @Xebiconfr #Xebicon18 30 Dans Cloud Shell cloner le repo github: https://github.com/xebia-france/drone_company
  • 31. @Xebiconfr #Xebicon18 31 Ouvrir le “Code Editor” Il se peut que vous rencontriez des pbs pour ouvrir “Code Editor”: si tel est le cas essayez de fermer complètement/redémarrer chrome … :’-/
  • 33. @Xebiconfr #Xebicon18 1ere étape 33 Projet du moteur de jeux “drone challenge” Votre Projet Moteur du jeux “drone challenge” Créer votre Cloud Function HTTP qui recevra les événements provenant du drone Faire un POST HTTP vers une url du moteur du jeux pour lui transmettre l’url de votre Cloud Function vers laquelle pousser les événements de votre drone 2 1 1 2
  • 34. @Xebiconfr #Xebicon18 Description de l’événement reçu par votre Cloud Function 34 { "teamId": "pink-719", "event": "MOVING", "availableParcelsForTeam": [ ], "droneInfo": { "parcels": [ ], "command": { "location": { "latitude": 48.867271697034234, "longitude": 2.273857921355812 }, "name": "MOVE" }, "distancePerTick": 0.3, "location": { "latitude": 48.863946199303555, "longitude": 2.336804643816769 }, "score": 0, "topicUrl": "https:..." }, } [ { "location": { "delivery": { "latitude": 48.89475445863184, "longitude": 2.277210420377155 }, "pickup": { "latitude": 48.90351526655187, "longitude": 2.2563030175595142 } }, "score": 50, "status": "AVAILABLE", "teamId": "pink-719", "type": "CLASSIC" }, ... ]
  • 35. @Xebiconfr #Xebicon18 Description de l’événement reçu par votre Cloud Function 35 { "teamId": "pink-719", "event": "MOVING", "availableParcelsForTeam": [ ], "droneInfo": { "parcels": [ ], "command": { "location": { "latitude": 48.867271697034234, "longitude": 2.273857921355812 }, "name": "MOVE" }, "distancePerTick": 0.3, "location": { "latitude": 48.863946199303555, "longitude": 2.336804643816769 }, "score": 0, "topicUrl": "https:..." }, } [ { "location": { "delivery": { "latitude": 48.89913913916235, "longitude": 2.4160708432981473 }, "pickup": { "latitude": 48.90704487288879, "longitude": 2.281904373627992 } }, "parcelId": "03fff885-...", "score": 50, "status": "GRABBED", "teamId": "all", "type": "CLASSIC" } ]
  • 36. @Xebiconfr #Xebicon18 Commande de déplacement à envoyer à votre drone 36 let command = { teamId: droneEvent.teamId, command: { name: 'MOVE', location: { latitude: 48.867271697034234, longitude: 2.273857921355812 }, } };
  • 37. @Xebiconfr #Xebicon18 Avant de commencer Votre cloud function : - est appelée environ toutes les secondes - ne reçoit que les événements de votre drone - faites une première version simple ! - et améliorez la ensuite 37