packer et terraform: un outil puissant pour le déploiement efficace DevOps
Cet article explique comment utiliser le packer Open Source DevOps Tools et Terraform pour collaborer à la construction et à la gestion des infrastructures pour réaliser un déploiement d'applications efficace.
Points de base:
Alibaba Cloud a publié un merveilleux livre blanc sur DevOps, qui déclare: "DevOps ne consiste pas seulement à mettre en œuvre simplement des principes agiles pour gérer les infrastructures, John Willis et Damon Edwards utilisent des cames (culture, automatisation, mesure et partage) pour définir DevOps. DevOps est conçu pour faciliter la collaboration entre les équipes de développement et d'opération. Mais la pratique DevOps ne se limite pas aux grandes entreprises, et les développeurs peuvent facilement l'intégrer dans leur travail quotidien. Ce tutoriel montre comment orchestrer facilement l'intégralité du processus de déploiement en utilisant uniquement un petit nombre de fichiers de configuration et exécuter des applications sur les instances Alibaba Cloud Elastic Computing Services (ECS).
Introduction du packer:
Packer est un outil Open Source DevOps développé par Hashicorp. Le logiciel est compatible multiplateforme et peut créer plusieurs images en parallèle. L'installation utilisant Homebrew est très simple: brew install packer
. Packer crée des images "prêtes à l'emploi" contenant le logiciel supplémentaire requis par le système d'exploitation et les applications, tout comme la création d'une distribution personnalisée. Par exemple, vous pouvez facilement créer une image Debian contenant une application PHP personnalisée.
Introduction à Terraform:
Le déploiement se compose de deux tâches principales: l'emballage de l'application dans le bon environnement (création d'une image) et la création de l'infrastructure (serveur) qui exécute l'application. Terraform provient également de Hashicorp, basé sur les mêmes principes que Packer, vous permettant de créer une infrastructure dans Alibaba Cloud en utilisant un seul profil de format TF, qui facilite le contrôle de version et a une compréhension claire du fonctionnement de l'application sous-jacente. Pour l'installation de Terraform et la configuration du fournisseur officiel du cloud Alibaba, veuillez vous référer à d'autres articles connexes.
cible:
Ce didacticiel créera et déploiera des applications PHP simples dans DevOps, couvrant tout, de l'exécution du logiciel à l'infrastructure de support.
Étape:
Pour simplifier le processus, nous créerons une application basée sur la composition Docker pour obtenir des données météorologiques Metar à partir de l'aéroport (en utilisant le code de l'aéroport de l'OACI et en obtenant des données du US National Weather Service). Nous allons ensuite créer l'image à l'aide d'Ubuntu et Packer et déployer l'infrastructure à l'aide de cette image et Terraform.
Application PHP:
Pour plus de commodité, nous fournissons une application standard. Vous pouvez afficher le code source (y compris index.php, 2 fichiers JavaScript pour le décodage des données Metar, une petite quantité de CSS et une image PNG). L'application est basée sur Docker-Compose, que nous installerons en tant que dépendance à l'aide de Packer plus tard.
Créer des images avec Packer:
Créez un dossier nommé ~ / metar-app sur votre ordinateur, puis accédez à ce dossier et créez un fichier nommé meta-build.json, comme suit:
{ "variables": { "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}", "region": "{{env `ALICLOUD_REGION`}}", "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}" }, "builders": [ { "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" } ], "provisioners": [ { "type": "shell", "script": "base-setup" } ] }
Dans le même répertoire, créez un fichier nommé Base-Settup, avec le contenu suivant:
#!/usr/bin/env bash apt-get update && apt-get install -y apt-transport-https ca-certificates 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 git clone https://github.com/roura356a/metar.git /var/docker/metar
Lorsque vous préparez ces deux fichiers, exécutez packer build metar-build.json
et attendez qu'ils se terminent. Notez que pour que cela prenne effet, vous devez définir trois variables d'environnement dans votre ordinateur: ALICLOUD_REGION
, ALICLOUD_ACCESS_KEY
et ALICLOUD_SECRET_KEY
. Cette étape prend un certain temps car elle crée une instance ECS, installe tous les logiciels dessus, puis arrête l'instance, crée un instantané de son et crée enfin une image de l'ensemble du système. Une fois l'image créée, Packer sortira ==> Builds finished
.
Déployer l'infrastructure avec Terraform:
Maintenant, dans le même dossier, créez un fichier nommé main.tf, avec le contenu suivant:
provider "alicloud" {} data "alicloud_images" "search" { name_regex = "metar_app" } data "alicloud_instance_types" "search" { instance_type_family = "ecs.xn4" cpu_core_count = 1 memory_size = 1 } data "alicloud_security_groups" "search" {} data "alicloud_vswitches" "search" {} resource "alicloud_instance" "app" { instance_name = "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 = "${file("user-data")}" } output "ip" { value = "${alicloud_instance.app.public_ip}" }
Dans le même répertoire, créez un fichier nommé des données utilisateur, avec le contenu suivant:
#!/usr/bin/env bash cd /var/docker/metar && docker-compose up -d
Maintenant, votre structure de fichiers devrait ressembler à ceci:
<code>metar_app/ ├── metar-build.json ├── base-setup ├── main.tf └── user-data</code>
Exécutez terraform init
, puis exécutez terraform plan
pour vérifier si tout est normal, et enfin exécuter terraform apply
pour démarrer le processus de déploiement.
Une fois l'infrastructure construite, Terraform publiera l'adresse IP de l'instance ECS nouvellement créée, par exemple: 111.111.111.111.111.
Test:
Si tout se passe bien, vous pouvez consulter le dernier rapport météo pour l'aéroport de San Sebastian (situé dans le nord de l'Espagne avec de beaux itinéraires d'entrée).
Résumé:
Vous n'avez presque aucun effort pour terminer le déploiement complet de DevOps de votre demande. Cela simplifiera considérablement le cycle de libération de maintenance, les mises à jour de l'infrastructure et améliorera la disponibilité du système sans avoir à traiter directement les commandes Host et Linux.
Des questions fréquemment posées sur Packer et Terraform:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!