Je suis développeur et je travaille quotidiennement dans des environnements de développement intégré (IDE), tels qu'Intellij IDEA ou Eclipse. Ces IDE sont des applications de bureau. Depuis l'avènement de Google Documents, j'ai vu de plus en plus de personnes déplacer leur travail des versions de bureau de Word ou Excel vers le cloud en utilisant un équivalent en ligne d'un traitement de texte ou d'un tableur.
Il existe des raisons évidentes d'utiliser un cloud pour conserver votre travail. Aujourd'hui, par rapport aux applications bureautiques traditionnelles, certaines applications Web ne présentent pas d'inconvénient significatif en termes de fonctionnalités. Le contenu est disponible partout où il y a un navigateur Web, et de nos jours, c'est presque partout. La collaboration et le partage sont plus faciles et la perte de fichiers est moins probable.
Malheureusement, ces avantages du cloud ne sont pas aussi courants dans le monde du développement logiciel que pour les applications métier. Il y a quelques tentatives pour fournir un IDE en ligne, mais elles sont loin d'être proches des IDE traditionnels.
C'est un paradoxe; alors que nous sommes toujours liés à notre bureau pour le codage quotidien, le logiciel est maintenant généré sur plusieurs serveurs. Les développeurs doivent travailler avec des éléments qu'ils ne peuvent plus conserver sur leur ordinateur. En effet, les ordinateurs portables n'augmentent plus leur puissance de traitement; avoir plus de 16 Go de RAM sur un ordinateur portable est rare et coûteux, et les appareils plus récents, les tablettes, par exemple, en ont encore moins.
Cependant, même s'il n'est pas encore possible de remplacer les applications de bureau classiques pour le développement de logiciels, il est possible pour déplacer l'ensemble de votre bureau de développement vers le cloud . Le jour où j'ai réalisé qu'il n'était plus nécessaire d'avoir tous mes logiciels sur mon ordinateur portable, et constatant la disponibilité de la version web des terminaux et du VNC, j'ai tout déplacé vers le cloud. Finalement, j'ai développé un kit de construction pour créer cet environnement de manière automatisée.
Dans cet article, je présente un ensemble de scripts pour créer un environnement de développement basé sur le cloud pour Échelle et des applications Big Data, fonctionnant avec Docker dans Amazon AWS, et comprenant un bureau accessible sur le Web avec IntelliJ IDE, Spark, Hadoop et Zeppelin en tant que services, ainsi que des outils de ligne de commande tels que SSH, SBT et Ammonite basés sur le Web. Le kit est disponible gratuitement sur GitHub , et je décris ici la procédure pour l'utiliser pour construire votre instance. Vous pouvez créer votre environnement et le personnaliser selon vos besoins particuliers. Cela ne devrait pas vous prendre plus de 10 minutes pour le faire fonctionner.
Mon objectif principal en développant le kit était que mon environnement de développement devrait être quelque chose que je puisse simplement lancer, avec tous les services et serveurs avec lesquels je travaille, puis les détruire lorsqu'ils ne sont plus nécessaires. Ceci est particulièrement important lorsque vous travaillez sur différents projets, dont certains impliquent un grand nombre de serveurs et de services, comme lorsque vous travaillez sur des projets Big Data.
Mon environnement cloud idéal devrait:
Tirant parti de l'infrastructure et des logiciels cloud modernes, de la puissance des navigateurs modernes, d'une large disponibilité du haut débit et de l'inestimable Docker, j'ai créé un environnement de développement pour Scala et développement de big data qui, pour le mieux, a remplacé mon ordinateur portable de développement.
Actuellement, je peux travailler à tout moment, que ce soit depuis un MacBook Pro, une Surface Tablet, ou même un iPad (avec un clavier), même si la dernière option n'est certes pas idéale. Tous ces appareils ne sont que des clients; le bureau et tous les serveurs sont dans le cloud.
Mon environnement actuel est construit à l'aide des services en ligne suivants:
J'utilise également quelques services gratuits, comme Canard pour les adresses IP dynamiques et Crypterons pour obtenir un certificat SSL gratuit.
Dans cet environnement, j'ai actuellement:
Plus important encore, l'accès Web est entièrement crypté avec HTTPS, à la fois pour VNC et SSH Web, et il existe plusieurs mesures de protection pour éviter de perdre des données, une préoccupation qui est, bien sûr, importante lorsque vous ne «possédez» pas le contenu sur votre disque dur physique. Notez que l'obtention d'une copie de tout votre travail sur votre ordinateur est automatique et très rapide. Si vous perdez tout parce que quelqu'un a volé votre mot de passe, vous en avez quand même une copie sur votre ordinateur, tant que vous avez tout configuré correctement.
Maintenant, commençons à décrire le fonctionnement de l’environnement. Lorsque je commence à travailler le matin, la première chose à faire est de me connecter à la console Amazon Web Services où je vois toutes mes instances. Habituellement, j'ai de nombreuses instances de développement configurées pour différents projets et je garde les inutilisées désactivées pour économiser la facturation. Après tout, je ne peux travailler que sur un seul projet à la fois. (Eh bien, parfois je travaille sur deux.)
Alors, je sélectionne l'instance que je veux, je la lance, j'attends un peu ou je vais prendre une tasse de café. Ce n’est pas si différent d’allumer votre ordinateur. Cela prend généralement quelques secondes pour que l'instance soit opérationnelle. Une fois que je vois l'icône verte, j'ouvre un navigateur et je vais à une URL bien connue: https://msciab.duckdns.org/vnc.html
. Remarque, ceci est mon URL; lorsque vous créez un kit, vous créez votre URL unique.
Étant donné qu'AWS attribue une nouvelle adresse IP à chaque machine lorsque vous démarrez, j'ai configuré un service DNS dynamique afin que vous puissiez toujours utiliser la même URL pour accéder à votre serveur, même si vous l'arrêtez et le redémarrez. Vous pouvez même le mettre en signet dans votre navigateur. De plus, j'utilise HTTPS, avec des clés valides pour obtenir une protection totale de mon travail contre les renifleurs, au cas où je devrais gérer des mots de passe et d'autres données sensibles.
Une fois chargé, le système vous accueillera avec un client Web Web VNC, NoVNC. Connectez-vous simplement et un bureau apparaît. J'utilise un bureau minimal, intentionnellement, juste un menu avec des applications, et mon seul luxe est un bureau virtuel (puisque j'ouvre beaucoup de fenêtres lorsque je développe). Pour le courrier, je compte toujours sur d'autres applications, de nos jours surtout d'autres onglets de navigateur.
Dans la machine virtuelle, j'ai ce dont j'ai besoin pour développer des applications Big Data. Tout d'abord, il y a un IDE. Dans la version, j'utilise l'édition communautaire IntelliJ Idea. En outre, il existe l'outil de construction SBT et un REPL Scala, Ammonite.
Cependant, les principales caractéristiques de cet environnement sont les services déployés en tant que conteneurs dans la même machine virtuelle. En particulier, j'ai:
http://zeppelin:8080
)http://sparkjobserver:8080
).http://hadoop:50070
).Notez que ces URL sont fixes mais sont accessibles dans l'environnement virtuel. Vous pouvez voir leurs interfaces Web dans la capture d'écran suivante.
Chaque service s'exécute dans un conteneur Docker distinct. Sans devenir trop technique, vous pouvez considérer cela comme trois serveurs distincts à l'intérieur de votre machine virtuelle. La beauté de l'utilisation de Docker est que vous pouvez ajouter des services et même ajouter deux ou trois machines virtuelles. À l'aide de conteneurs Amazon, vous pouvez facilement faire évoluer votre environnement.
Enfin, vous disposez d'un terminal Web. Accédez simplement à votre URL avec HTTPS et vous serez accueilli avec un terminal dans une page Web.
Dans la capture d'écran ci-dessus, vous pouvez voir que je liste les conteneurs, qui sont les trois serveurs plus le bureau. Ce shell de ligne de commande vous donne accès à la machine virtuelle contenant les conteneurs, vous permettant de les gérer. C’est comme si vos serveurs étaient «dans la matrice» (virtualisés dans des conteneurs), mais ce shell vous permet d’échapper à la «matrice» pour gérer les serveurs et le bureau. De là, vous pouvez redémarrer les conteneurs, accéder à leurs systèmes de fichiers et effectuer d'autres manipulations autorisées par Docker. Je ne parlerai pas en détail de Docker ici, mais il existe une grande quantité de documentation sur Site Web Docker .
Aimez-vous cela jusqu'à présent et vous voulez votre instance? C'est facile et bon marché. Vous pouvez l'obtenir pour le seul coût de la machine virtuelle sur Amazon Web Services, plus le stockage. Le kit dans la configuration actuelle nécessite 4 Go de RAM pour que tous les services fonctionnent. Si vous faites attention à n'utiliser la machine virtuelle que lorsque vous en avez besoin et que vous travaillez, par exemple, 160 heures par mois, une machine virtuelle aux tarifs actuels coûtera 160 x 0,052 USD, soit 8 USD par mois. Vous devez ajouter le coût du stockage. J'utilise environ 30 Go, mais tout peut être conservé à moins de 10 $.
Cependant, cela inclut le coût d'un (éventuel) compte Dropbox (Pro), si vous souhaitez sauvegarder plus de 2 Go de code. Cela coûte 15 $ de plus par mois, mais cela garantit une sécurité importante pour vos données. En outre, vous aurez besoin d'un référentiel privé, soit un GitHub payant ou un autre service, tel que Bitbucket, qui propose des référentiels privés gratuits.
Je tiens à souligner que si vous ne l'utilisez que lorsque vous en avez besoin, il est moins cher qu'un serveur dédié. Oui, tout ce qui est mentionné ici peut être configuré sur un serveur physique, mais comme je travaille avec du Big Data, j'ai besoin de beaucoup d'autres services AWS, donc je pense qu'il est logique de tout avoir au même endroit.
Voyons comment effectuer toute la configuration.
Avant de commencer à créer une machine virtuelle, vous devez vous inscrire auprès des quatre services suivants:
Le seul pour lequel vous avez besoin de votre carte de crédit est Amazon Web Services. DuckDns est entièrement gratuit, tandis que DropBox vous offre 2 Go de stockage gratuit, ce qui peut être suffisant pour de nombreuses tâches. Let’s Encrypt est également gratuit et est utilisé en interne lorsque vous créez l’image pour signer votre certificat. En plus de cela, je recommande également un service d'hébergement de référentiel, comme GitHub ou Bitbucket, si vous souhaitez stocker votre code, cependant, il n'est pas nécessaire pour la configuration.
Pour commencer, accédez au Dépôt GitHub BigDataDevKit .
Faites défiler la page et copiez le script affiché dans l'image dans l'éditeur de texte de votre choix:
Ce script est nécessaire pour amorcer l'image. Vous devez le modifier et fournir des valeurs aux paramètres. Modifiez soigneusement le texte entre les guillemets. Notez que vous ne pouvez pas utiliser des caractères tels que la citation, la barre oblique inverse ou le signe dollar dans le mot de passe, sauf si vous citation leur. Ce problème n'est pertinent que pour le mot de passe. Si vous voulez jouer en toute sécurité, évitez les guillemets, le signe dollar ou les contre-obliques.
Le PASSWORD
paramètre est un mot de passe que vous choisissez pour accéder à la machine virtuelle via une interface Web. Le EMAIL
est votre e-mail et sera utilisé lorsque vous enregistrerez un certificat SSL. Vous devrez fournir votre e-mail, et c'est la seule condition pour obtenir un certificat SSL gratuit de Let’s Encrypt.
Pour obtenir les valeurs de TOKEN
et HOST
, allez sur le site DuckDNS et connectez-vous. Vous devrez choisir un nom d'hôte inutilisé.
Regardez l'image pour voir où vous devez copier le jeton et où vous devez ajouter votre nom d'hôte. Vous devez cliquer sur le bouton «ajouter un domaine» pour réserver le nom d'hôte.
En supposant que vous ayez tous les paramètres et que vous ayez édité le script, vous êtes prêt à lancer votre instance. Connectez-vous à l'interface de gestion d'Amazon Web Services, accédez au panneau Instances EC2 et cliquez sur «Lancer l'instance».
Dans le premier écran, vous choisirez une image. Le script est construit autour d'Amazon Linux et aucune autre option n'est disponible. Sélectionnez Amazon Linux, la première option de la liste QuickStart.
Sur le deuxième écran, choisissez le type d'instance. Compte tenu de la taille du logiciel en cours d'exécution, il existe plusieurs services et vous avez besoin d'au moins 4 Go de mémoire, je vous recommande donc de sélectionner le t2.medium exemple. Vous pouvez le réduire, en utilisant le t2.small si vous fermez certains services, ou même le micro si vous ne voulez que le bureau.
Sur le troisième écran, cliquez sur «Détails avancés» et collez le script que vous avez configuré à l'étape précédente. Je vous recommande également d'activer la protection contre la résiliation, de sorte qu'en cas de résiliation accidentelle, vous ne perdiez pas tout votre travail.
L'étape suivante consiste à configurer le stockage. La valeur par défaut pour une instance est de 8 Go, ce qui n'est pas suffisant pour contenir toutes les images que nous allons créer. Je recommande de l'augmenter à 20 Go. De plus, bien que ce ne soit pas nécessaire, je suggère un autre périphérique de bloc d'au moins 10 Go. Le script montera le deuxième périphérique de bloc en tant que dossier de données. Vous pouvez créer un instantané de son contenu, mettre fin à l'instance, puis la recréer à l'aide de l'instantané et récupérer tout le travail. De plus, un périphérique de bloc personnalisé n'est pas perdu lorsque vous mettez fin à l'instance, vous bénéficiez donc d'une double protection contre la perte accidentelle de vos données. Pour augmenter encore plus votre sécurité, vous pouvez sauvegarder vos données automatiquement avec Dropbox.
La cinquième étape consiste à nommer l'instance. Faites votre choix. La sixième étape offre un moyen de configurer le pare-feu. Par défaut, seul SSH est disponible mais nous avons également besoin de HTTPS, alors n'oubliez pas d'ajouter également une règle ouvrant HTTPS. Vous pouvez ouvrir HTTPS au monde entier, mais il est préférable que ce soit uniquement sur votre adresse IP pour empêcher d'autres personnes d'accéder à votre bureau et à votre shell, même si cela est toujours protégé par un mot de passe.
Une fois cette dernière configuration effectuée, vous pouvez lancer l'instance. Vous remarquerez que l’initialisation peut prendre quelques minutes la première fois depuis que le script d’initialisation est en cours d’exécution et qu’elle effectuera également de longues tâches comme la génération d’un certificat HTTPS avec Let’s Encrypt.
Lorsque vous voyez finalement la console de gestion «en cours d'exécution» avec une confirmation et qu'elle n'est plus «en cours d'initialisation», vous êtes prêt à partir.
En supposant que tous les paramètres sont corrects, vous pouvez accéder à https://YOURHOST.duckdns.org
.
Remplacer YOURHOST
avec le nom d'hôte que vous avez choisi, mais n'oubliez pas que c'est un site HTTPS, pas HTTP, donc votre connexion au serveur est chiffrée, vous devez donc écrire https//
dans l'URL. Le site présentera également un certificat valide pour Let’s Encrypt. S'il y a des problèmes pour obtenir le certificat, le script d'initialisation générera un certificat auto-signé. Vous pourrez toujours vous connecter avec une connexion cryptée, mais le navigateur vous avertira qu'il s'agit d'un site inconnu et que les connexions ne sont pas sécurisées. Cela ne devrait pas arriver, mais on ne sait jamais.
En supposant que tout fonctionne, vous accédez alors au terminal Web, Butterfly. Vous pouvez vous connecter en utilisant l'utilisateur app
et le mot de passe que vous avez mis dans le script de configuration.
Une fois connecté, vous disposez d'une machine virtuelle amorcée, qui comprend également Docker et d'autres goodies, tels qu'un Nginx Frontend, Git et le terminal Web Butterfly. Vous pouvez maintenant terminer la configuration en créant les images Docker pour votre environnement de développement.
Ensuite, tapez les commandes suivantes:
git clone https://github.com/sciabarra/BigDataDevKit cd BigDataDevKit sh build.sh
La dernière commande vous demandera également de taper un mot de passe pour l'accès au bureau. Une fois cela fait, il commencera à construire les images. Notez que la construction prendra environ 10 minutes, mais vous pouvez voir ce qui se passe car tout est affiché à l'écran.
Une fois la construction terminée, vous pouvez également installer Dropbox avec la commande suivante:
/app/.dropbox-dist/dropboxd
Le système affichera un lien sur lequel vous devez cliquer pour activer Dropbox. Vous devez vous connecter à Dropbox et vous avez terminé. Tout ce que vous mettez dans le dossier Dropbox est automatiquement synchronisé entre toutes vos instances Dropbox.
Une fois terminé, vous pouvez redémarrer la machine virtuelle et accéder à votre environnement sur le https://YOURHOST.dyndns.org/vnc.html
URL.
Vous pouvez arrêter votre machine et la redémarrer lorsque vous reprenez le travail. L'URL d'accès reste la même. De cette façon, vous ne paierez que pour le temps que vous l'utilisez, plus un supplément mensuel pour le stockage utilisé.
La discussion suivante nécessite une certaine connaissance du fonctionnement de Docker et d'Amazon. Si vous ne voulez pas comprendre les détails, gardez simplement à l'esprit la règle simple suivante: Dans la machine virtuelle, il y a un /app/Dropbox
dossier disponible, quel que soit votre emplacement /app/Dropbox
est préservé et tout le reste est jetable et peut disparaître. Pour améliorer encore la sécurité, stockez également votre précieux code dans un système de contrôle de version.
Maintenant, si vous voulez comprendre cela, lisez la suite. Si vous avez suivi mes instructions dans la création de la machine virtuelle, la machine virtuelle est protégée contre la résiliation, vous ne pouvez donc pas la détruire accidentellement. Si vous décidez expressément d'y mettre fin, le volume principal sera détruit. Toutes les images Docker seront perdues, y compris toutes les modifications que vous avez apportées.
Cependant, puisque le dossier /app/Dropbox
est monté en tant que volume Docker pour les conteneurs, il ne fait pas partie des images Docker. Dans la machine virtuelle, le dossier /app
est monté dans le volume Amazon que vous avez créé, qui n'est pas non plus détruit même lorsque vous arrêtez expressément la machine virtuelle. Pour supprimer le volume, vous devez le supprimer expressément.
Ne confondez pas les volumes Docker, qui sont une entité logique Docker, avec Amazon Volumes, qui est une entité quelque peu physique. Ce qui se passe, c'est que le /app/Dropbox
Le volume Docker est placé à l'intérieur du /app
Volume d'Amazon.
Le volume Amazon n'est pas automatiquement détruit lorsque vous arrêtez la machine virtuelle, donc tout ce qui y est placé sera conservé, jusqu'à ce que vous détruisez également expressément le volume. De plus, tout ce que vous mettez dans le volume Docker est stocké à l'extérieur du conteneur, il n'est donc pas détruit lorsque le conteneur est détruit. Si vous avez activé Dropbox, comme recommandé, tout votre contenu est copié sur les serveurs Dropbox et sur votre disque dur si vous synchronisez Dropbox avec votre (vos) ordinateur (s). En outre, il est recommandé que le code source soit stocké dans un système de contrôle de version.
Donc, si vous placez vos données dans le système de contrôle de version sous le dossier Dropbox, pour perdre vos données, tout cela doit se produire:
J'espère que vos données sont suffisamment sûres.
Je garde une machine virtuelle pour chaque projet, et lorsque j'ai terminé, je garde les machines virtuelles inutilisées désactivées. Bien sûr, j'ai tout mon code sur GitHub et sauvegardé dans Dropbox. De plus, lorsque j'arrête de travailler sur un projet, je prends un instantané du bloc Amazon Web Services avant de supprimer complètement la machine virtuelle. De cette façon, chaque fois qu'un projet reprend, par exemple pour la maintenance, il ne me reste plus qu'à démarrer une nouvelle machine virtuelle à l'aide de l'instantané. Toutes mes données sont remises en place et je peux reprendre le travail.
Premièrement, si vous disposez d'un accès Internet direct, non médiatisé par un proxy, vous pouvez utiliser des clients SSH et VNC natifs. L'accès SSH direct est important si vous devez copier des fichiers dans et hors de la machine virtuelle. Cependant, pour le partage de fichiers, vous devez considérer Dropbox comme une alternative plus simple.
L'accès Web VNC est inestimable, mais parfois, il peut être plus lent qu'un client natif. Vous avez accès au serveur VNC sur la machine virtuelle à l'aide du port 5900. Vous devez l'ouvrir expressément car il est fermé par défaut. Je vous recommande de ne l'ouvrir qu'à votre adresse IP, car Internet regorge de «robots» qui analysent Internet à la recherche de services auxquels se connecter, et VNC est une cible fréquente de ces robots.
Cet article explique comment vous pouvez tirer parti de la technologie cloud moderne pour mettre en œuvre un environnement de développement efficace. Bien qu'une machine dans le cloud ne puisse pas remplacer complètement votre ordinateur de travail ou un ordinateur portable, elle est suffisante pour effectuer des travaux de développement lorsqu'il est important d'avoir accès à l'EDI. D'après mon expérience, avec les connexions Internet actuelles, il est assez rapide pour fonctionner.
Être dans le cloud, accéder et manipuler les serveurs est plus rapide que les avoir localement. Vous pouvez rapidement augmenter (ou diminuer) la mémoire, lancer un autre environnement, créer une image, etc. Vous avez un centre de données à portée de main, et lorsque vous travaillez avec des projets Big Data, eh bien, vous avez besoin de services robustes et de beaucoup d'espace. C'est ce que fournit le cloud.