Fermer

août 28, 2018

Comment déployer des applications sans effort avec Packer et Terraform –


Cet article a été publié à l'origine sur Alibaba Cloud . Merci de soutenir les partenaires qui rendent SitePoint possible.

Pensez-vous avoir un meilleur conseil pour tirer le meilleur parti des services Alibaba Cloud? Parlez-en nous et courez la chance de gagner un Macbook Pro (plus d'autres trucs sympas). Plus d'informations ici .

Alibaba Cloud a publié un très beau livre blanc sur DevOps qui est très intéressant à lire. Il montre comment " DevOps est un modèle qui va au-delà de la simple implémentation de principes agiles pour gérer l'infrastructure. John Willis et Damon Edwards ont défini les DevOps en utilisant le terme CAMS: Culture, Automation, Measurement, and Sharing. DevOps cherche à promouvoir la collaboration entre les équipes de développement et d'exploitation ".

Cela signifie en gros qu'il existe un nouveau rôle ou un nouvel état d'esprit dans une équipe visant à connecter le développement logiciel et la gestion de l'infrastructure. Ce rôle nécessite la connaissance des deux mondes et tire parti du paradigme du cloud qui prend de plus en plus d'importance. Mais les pratiques DevOps ne se limitent pas aux grandes entreprises. En tant que développeurs, nous pouvons facilement intégrer les DevOps dans nos tâches quotidiennes. Avec ce tutoriel, vous verrez à quel point il est facile d'orchestrer un déploiement complet avec quelques fichiers de configuration. Nous exécuterons notre application sur une instance Elibre Compute Service (ECS) d'Alibaba Cloud .

Qu'est-ce que Packer?

Packer est un outil DevOps open source conçu par Hashicorp pour créer des images à partir d'un seul Fichier de configuration JSON, qui permet de suivre ses modifications à long terme. Ce logiciel est compatible multi-plateforme et peut créer plusieurs images en parallèle.

Si vous avez Homebrew, tapez brasseur-installateur-empaqueteur pour l'installer.

Il crée essentiellement prêt à l'emploi -Utilisez images avec le système d'exploitation et des logiciels supplémentaires prêts à utiliser pour vos applications, comme créer votre propre distribution . Imaginez que vous vouliez Debian mais avec une application PHP personnalisée que vous avez intégrée par défaut. Eh bien, avec Packer, c'est très facile à faire, et dans ce tutoriel, nous en créerons un.

Qu'est-ce que Terraform? L'une consiste à emballer l'application réelle dans un environnement approprié, en créant une image. L'autre tâche importante consiste à créer l'infrastructure sous-jacente dans laquelle l'application va vivre, c'est-à-dire le serveur hôte de celle-ci.

Pour cela, Terraform, créée par la même société que Packer, Hashicorp comme un outil très intéressant et puissant. Basée sur les mêmes principes que Packer, Terraform vous permet de construire une infrastructure dans Alibaba Cloud en utilisant simplement un seul fichier de configuration, au format TF cette fois, aidant également à gérer les versions et à comprendre comment tous les bits fonctionnent sous votre application.

Pour installer Terraform et le fournisseur officiel d'Alibaba Cloud, veuillez suivre les instructions de cet autre article .

Ce que nous voulons réaliser

Comme mentionné en haut de l'article, nous sommes va créer et déployer une application PHP simple de manière pure DevOps, c'est-à-dire en prenant soin de chaque partie du déploiement, du logiciel qui l'exécute à l'infrastructure sous-jacente qui le supporte.

Steps

Le principe KISS, nous allons créer une application basée sur docker-compose pour récupérer les données météorologiques METAR des aéroports, en utilisant son code aéroport ICAO et en extrayant les données du service météorologique national américain. Ensuite, nous allons créer l'image avec Packer en utilisant Ubuntu et déployer l'infrastructure en utilisant l'image avec Terraform.

Application PHP

Pour des raisons de simplicité, j'ai créé l'application prête à l'emploi. Vous pouvez trouver le code source ici pour avoir un aperçu, qui inclut un index.php, 2 fichiers JavaScript pour décoder les données METAR et un peu de CSS et une image PNG pour le rendre moins ennuyeux. Il indique même la direction du vent! Mais ne vous inquiétez pas, vous n'aurez pas besoin de cloner le dépôt à ce stade.

L'application est basée sur docker-compose et nous allons l'installer ultérieurement avec Packer. 19659020] Construire l'image avec Packer

Mettons la main à la pâte! Pour cela, nous devons créer un dossier quelque part sur notre ordinateur, disons ~ / metar-app . Puis, cd et créer un fichier nommé metar-build.json avec le contenu suivant:

 {
  "variables": {
    "access_key": "{{env` ALICLOUD_ACCESS_KEY`}} ",
    "région": "{{env` ALICLOUD_REGION`}} ",
    "secret_key": "{{env` ALICLOUD_SECRET_KEY`}} "
  },
  "constructeurs": [
    {
      "type": "alicloud-ecs",
      "access_key": "{{user `access_key`}}",
      "secret_key": "{{user `secret_key`}}",
      "region":"{{user `region`}}",
      "image_name": "metar_app",
      "source_image": "ubuntu_16_0402_64_20G_alibase_20180409.vhd",
      "ssh_username": "root",
      "instance_type": "ecs.t5-lc1m1.small",
      "internet_charge_type": "PayByTraffic",
      "io_optimized": "true"
    }
  ],
  "ravitailleurs": [
    {
      "type": "shell",
      "script": "base-setup"
    }
  ]
}

Et juste à côté, un fichier nommé base-setup avec ce qui suit:

 #! / Usr / bin / env bash

apt-get update && apt-get install -y apt-transport-https ca-certificats curl git-core software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $ (lsb_release -cs) stable"
apt-get update && apt-get install -y docker-ce docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o / usr / bin / docker-compose

mkdir / var / docker
clone git https://github.com/roura356a/metar.git / var / docker / metar

Une fois que ces deux fichiers sont prêts, vous pouvez exécuter la compilation metar-build.json et attendre sa fin. Veuillez noter que pour que cela fonctionne, vous devez avoir 3 variables d'environnement sur votre machine avec les valeurs appropriées pour vous: ALICLOUD_REGION ALICLOUD_ACCESS_KEY et ALICLOUD_SECRET_KEY . Cette étape prendra un certain temps, car elle crée un ECS, installe tous les logiciels qu'elle contient, puis arrête l'instance, en crée un instantané et crée finalement l'image de l'ensemble du système.

Une fois l'image terminée, emballeur produira ==> Constructions terminées . Bon, nous avons une image prête à l'emploi! Nous sommes prêts à passer à l’étape suivante.

Déploiement de l’infrastructure avec Terraform

Il est temps de créer l’instance ECS. Pour cela, dans le même dossier, nous allons créer un fichier nommé main.tf avec le contenu suivant:

 provider "alicloud" {}

données "alicloud_images" "recherche" {
  name_regex = "metar_app"
}

données "alicloud_instance_types" "recherche" {
  instance_type_family = "ecs.xn4"
  cpu_core_count = 1
  memory_size = 1
}

données "alicloud_security_groups" "recherche" {}

données "alicloud_vswitches" "recherche" {}

ressource "alicloud_instance" "app" {
  nom_instance = "metar_app"
  image_id = "$ {data.alicloud_images.search.images.0.image_id}"
  instance_type = "$ {data.alicloud_instance_types.search.instance_types.0.id}"

  vswitch_id = "$ {data.alicloud_vswitches.search.vswitches.0.id}"
  security_groups = [
    "${data.alicloud_security_groups.search.groups.0.id}"
  ]
  internet_max_bandwidth_out = 100

  password = "Test1234!"

  user_data = "$ {fichier (" user-data ")}"
}

sortie "ip" {
  value = "$ {alicloud_instance.app.public_ip}"
}

Et, juste à côté, créez un fichier nommé user-data avec ce qui suit:

 #! / Usr / bin / env bash

cd / var / docker / metar && docker-compose -d

Pour être clair, pour le moment nous devrions avoir une structure de fichier comme celle-ci:

 metar_app /
Ar metar-build.json
├── configuration de base
├── main.tf
└── données utilisateur

Prêt à être déployé. Exécuter terraform init puis plan terraform pour vérifier que tout va bien, et terraform appliquer pour lancer le processus.

Lorsque l'infrastructure est construite, Terraform affichera l'adresse IP de l'instance ECS nouvellement créée. Disons, 111.111.111.111 .

Essais

Si tout se passait bien, vous pourrez aller à http://111.111.111.111/LESO et visualiser, dans ce cas, le dernier bulletin météorologique de l'aéroport de San Sebastián, un des aéroports les plus beaux du monde, situé dans le nord de l'Espagne.

Wrapping Up

Voir, presque sans effort a créé un déploiement DevOps complet pour votre application. Cela signifie qu'il sera beaucoup plus facile pour vous et votre équipe de gérer tout ce qui concerne les cycles de publication et les mises à jour de l'infrastructure, et améliorera sa disponibilité. Pas besoin de jouer plus directement avec les hôtes et les commandes Linux au quotidien.




Source link