À propos des cookies sur ce site Pour fonctionner correctement, nos sites Internet nécessitent certains cookies (requis). En outre, d'autres cookies peuvent être utilisés avec votre consentement pour analyser l'utilisation d'un site, améliorer l'expérience des utilisateurs et à des fins publicitaires. Pour plus informations, passez en revue vos options de préférences en. En visitant notre site Web, vous acceptez que nous traitions les informations comme décrit dans ladéclaration de confidentialité d’IBM. Pour faciliter la navigation, vos préférences en matière de cookie seront partagées dans les domaines Web d'IBM énumérés ici.
Installation de logiciels sur des instances de serveur virtuel dans VPC
Ce tutoriel peut entraîner des coûts. Utilisez l'Estimateur de coûts pour générer une estimation du coût en fonction de votre utilisation projetée.
Ce tutoriel vous guide dans les opérations de mise à disposition de l'infrastructure IBM Cloud® Virtual Private Cloud (VPC) et l'installation de logiciels sur des instances de serveur virtuel (VSI) à l'aide d'outils d'infrastructure en tant que code (IaC), tels que Terraform et Ansible.
Après une introduction sur l'architecture du tutoriel, vous allez préparer votre environnement pour ce tutoriel et passer en revue les principes de base liés à l'installation de logiciels dans IBM Cloud. À ce stade, vous pouvez décider d'évaluer toutes les technologies ou de passer directement à l'une des sections spécifiques telles que Terraform ou Ansible.
Objectifs
- Comprendre les logiciels de système d'exploitation fournis par IBM.
- Utiliser des étapes manuelles pour mettre à jour le logiciel de système d'exploitation et installer de nouveaux logiciels.
- Comprendre comment utiliser l'interface de ligne de commande IBM Cloud, Terraform et Ansible pour automatiser la mise à disposition des ressources et l'installation des logiciels.
Dans ce tutoriel, vous allez déployer la configuration présentée dans un autre tutoriel, Sous-réseaux publics (front-end) et privés (back-end) dans un cloud privé virtuel. Vous allez mettre à disposition un serveur de front-end accessible depuis l'Internet public en communication avec un serveur de back-end sans connectivité Internet.
La configuration comprend également un hôte bastion faisant office de serveur intermédiaire (jump server) permettant la connexion sécurisée aux instances mises à disposition sans adresse IP publique :

Tout en mettant à disposition des ressources, vous allez également déployer des applications sur les instances de serveur virtuel. Lors du déploiement des applications sur le cloud, les logiciels peuvent provenir de sources différentes :
- Système de fichiers d'un poste de travail en local - en utilisant des outils tels que Terraform pour créer l'infrastructure nécessaire ou Ansible,
ssh
etscp
pour installer et configurer des logiciels sur les instances de serveur virtuel ; - Miroirs IBM pour mettre à jour les systèmes d'exploitation ou installer des packages pris en charge ;
- Référentiels de logiciels sur Internet ou intranet.

Vous allez explorer comment utiliser ces différentes sources.
Avant de commencer
Créez une clé SSH VPC
Lors de la mise à disposition d'instances de serveur virtuel, une clé SSH est injectée dans ces instances pour que vous puissiez vous connecter aux serveurs par la suite.
- Si vous ne possédez pas de clé SSH sur votre machine locale, reportez-vous aux instructions de création d'une clé pour VPC. Par défaut, la clé privée se trouve dans
$HOME/.ssh/id_rsa
. - Ajoutez la clé SSH dans la console VPC sous Calcul / clés SSH. Assurez-vous de créer la clé dans le même groupe de ressources où vous allez créer les autres ressources de ce tutoriel.
Définissez les variables d'environnement
Ce tutoriel est livré avec un exemple de code pour illustrer les différentes options permettant de mettre à disposition des ressources et d'installer ou mettre à jour des logiciels dans un environnement VPC.
Il vous guidera par le biais d'exemples d'étapes à effectuer sur un terminal en utilisant le shell, terraform
et ansible
. Vous allez installer ces outils dans les étapes ultérieures. Pour que les scripts fonctionnent,
vous devez définir un ensemble de variables d'environnement.
-
Clonez le référentiel de code sourcedu tutoriel:
git clone https://github.com/IBM-Cloud/vpc-tutorials.git
-
Définissez une variable nommée
CHECKOUT_DIR
pointant vers le répertoire du code source :cd vpc-tutorials export CHECKOUT_DIR=$PWD
-
Accédez au répertoire du tutoriel :
cd $CHECKOUT_DIR/vpc-app-deploy
-
Copiez le fichier de configuration :
cp export.template export
-
Editez le fichier
export
et définissez les valeurs des variables d'environnement :-
TF_VAR_ibmcloud_api_key
est une clé d'API IBM Cloud. Vous pouvez en créer une à partir de la console. -
TF_VAR_ssh_key_name
est le nom de la clé publique SSH VPC identifiée à la section précédente. Il s'agit de la clé publique qui sera chargée dans les instances de serveur virtuel pour assurer l'accès SSH sécurisé via la clé privée sur votre poste de travail. Utilisez l'interface de ligne de commande pour vérifier qu'elle existe :ibmcloud is keys
-
TF_VAR_resource_group_name
est un groupe de ressources dans lequel seront créées les ressources. Voir la rubrique sur la création et la gestion des groupes de ressources. -
TF_VAR_region
est une région dans laquelle des ressources seront créées. Cette commande affiche les régions :ibmcloud is regions
-
TF_VAR_zone
est une zone dans laquelle des ressources seront créées. Cette commande affiche les zones :ibmcloud is zones
-
TF_VAR_ssh_agent
indique qu'une clé SSH protégée par une phrase passe est utilisée. Activez la variable en supprimant sa mise en commentaire. Utilisez ensuitessh-add ~/.ssh/id_rsa
pour ajouter la clé SSH à l'agent d'authentification.
-
-
Chargez les variables dans l'environnement :
source export
Veillez à toujours utiliser la même fenêtre de terminal dans les sections suivantes ou à définir les variables d'environnement si vous utilisez une nouvelle fenêtre. Les variables d'environnement dans
export
sont au format Terraform (remarquez le préfixeTF_VAR_
) pour plus de commodité. Elles sont utilisées dans les sections qui suivent.
Principes de base liés à l'installation des logiciels
Mise à disposition des instances de serveur virtuel à partir d'images de base
Lorsque vous mettez à disposition une instance de serveur virtuel, vous sélectionnez l'image de base à partir d'un ensemble prédéfini d'images de système d'exploitation fournies par IBM. Utilisez la commande ibmcloud is images
pour rechercher la liste des images disponibles.
IBM dispose de miroirs internes pour prendre en charge les images IBM. Ces miroirs contiendront les nouvelles versions des logiciels dans les images fournies par IBM ainsi que dans les packages facultatifs associés à la distribution. Les miroirs font partie des noeuds finaux de service disponibles pour IBM Cloud VPC. Il n'y a pas de frais d'entrée pour la lecture des miroirs.
Envisagez de mettre à jour les listes de versions disponibles dans les instances mises à disposition et de mettre à niveau les logiciels installés à partir de ces miroirs.
Initialisation et personnalisation des instances de cloud avec cloud-init
Lors de l'approvisionnement d'une instance de serveur virtuel, vous pouvez spécifier un script cloud-init à exécuter lors de l'initialisation du serveur. Cloud-init est un package multi-distribution qui traite l'initialisation anticipée d'une instance de cloud. Il définit une collection de formats de fichier pour coder l'initialisation des instances de cloud.
Dans IBM Cloud, le contenu du fichier cloud-init est fourni dans le paramètre user-data
au moment de la mise à disposition du serveur. Voir Formats des données utilisateur pour le contenu acceptable des données utilisateur. Si vous avez besoin de déboguer l'exécution du script, cloud-init consigne la sortie du script d'initialisation dans
le fichier /var/log/cloud-init-output.log
sur les instances de serveur virtuel.
Ce tutoriel utilise un script shell nommé install.sh comme script d'initialisation :
#!/bin/bash
set -x
apt-get update
apt-get install -y nginx
indexhtml=/var/www/html/index.html
# Demonstrate the availability of internet repositories. If www.python.org is availble then other software internet software like
# npm, pip, docker, ... if isolated only the software from the ibm mirrors can be accessed
if curl -o /tmp/x -m 3 https://www.python.org/downloads/release/python-373/; then
echo INTERNET > $indexhtml
else
echo ISOLATED > $indexhtml
fi
Dans ce script, la mise à niveau des logiciels installés et l'installation de nginx
et d'autres packages à l'aide des outils d'installation de logiciels fournis par le système d'exploitation, montrent que même les instances isolées
ont accès aux miroirs fournis par IBM. Pour Ubuntu, les commandes apt-get
permettent d'accéder aux miroirs.
La commande curl
utilisée pour accéder à www.python.org montre la tentative d'accès et éventuellement d'installation de logiciels à partir d'Internet.
Selon que l'hôte dispose ou non d'une connectivité Internet, le script modifie la page index.html
diffusée par nginx
.
Téléchargement à partir du système de fichiers et exécution sur l'instance
Il se peut que des données et des logiciels soient disponibles sur le système de fichiers de votre système local ou qu'un pipeline CI/CD doive être téléchargé sur l'instance de serveur virtuel avant d'être exécuté.
Dans ce cas, vous pouvez utiliser la connexion SSH au serveur pour télécharger les fichiers avec scp
, puis exécuter des scripts sur le serveur avec ssh
. Les scripts peuvent également récupérer les programmes d'installation
de logiciels sur Internet ou sur vos systèmes locaux, en supposant que vous ayez établi une connexion de type VPN entre vos systèmes locaux et le cloud.
Le code du tutoriel contient un script nommé uploaded.sh
qui sera téléchargé depuis votre
poste de travail vers les instances de serveur virtuel (manuellement ou par le biais d'une automatisation comme Terraform et Ansible ).
Dans les sections suivantes, vous utiliserez le script test_provision.bash pour confirmer que les serveurs
ont été correctement approvisionnés, qu'ils peuvent (ou non) accéder à Internet et que le script uploaded.sh
a été correctement exécuté.
Utilisation de l'interface de ligne de commande IBM Cloud et de scripts shell
L'''interface de ligne de commande IBM Cloud fournit des commandes permettant d'interagir avec toutes les ressources que vous pouvez créer dans IBM Cloud. Cette section explique comment utiliser ces commandes, mais vous n'allez pas créer de ressources. Il est recommandé d'utiliser Terraform pour déployer des solutions complètes.
Avant de commencer
Installez les outils de l'interface de ligne de commande en suivant cette procédure
Mise à disposition d'instances de serveur virtuel et installation de logiciels
L'interface de ligne de commande dispose d'un plug-in pour toutes les fonctionnalités liées à VPC, y compris les ressources de calcul et de réseau.
-
Avant d'utiliser des ressources VPC, définissez le groupe de ressources et la région en cours:
ibmcloud target -g $TF_VAR_resource_group_name -r $TF_VAR_region
-
Pour mettre à disposition une instance de serveur virtuel, exécutez la commande d'interface de ligne de commande
ibmcloud is instance-create
. Dansshared/install.sh
se trouve le fichier cloud-init utilisé pour initialiser les serveurs frontaux et dorsaux. Vous pouvez transmettre le script avec le paramètre--user-data
comme suit:ibmcloud is instance-create ... --user-data @shared/install.sh
-
Avec les instances de serveur virtuel de front-end et de back-end déployées et en mode maintenance, vous pouvez envoyer un script à, par exemple, le serveur de front-end, puis exécuter le script pour installer le logiciel à partir d'Internet. Envoyez un script au serveur de front-end :
scp -F ../scripts/ssh.notstrict.config -o ProxyJump=root@$BASTION_IP_ADDRESS shared/uploaded.sh root@$FRONT_NIC_IP:/uploaded.sh
Exécutez ensuite ce script :
ssh -F ../scripts/ssh.notstrict.config -o ProxyJump=root@$BASTION_IP_ADDRESS root@$FRONT_NIC_IP sh /uploaded.sh
L'initialisation du service ssh sur le serveur peut prendre quelques minutes, et quelques minutes supplémentaires seront nécessaires pour que le script d'
cloud-init
s soit terminé. Le scriptuploaded.sh
attend la fin de l'initialisation avant de quitter.
Mise à disposition de l'infrastructure avec Terraform
Terraform vous permet de créer, modifier et améliorer les infrastructures de manière sûre et prévisible. Il s'agit d'un outil open source qui codifie les API dans des fichiers de configuration déclaratifs pouvant être partagés par les membres de l'équipe, traités comme du code, modifiés, revus et corrigés.
Avant de commencer
Suivez les instructions pour installer Terraform et le plug-in IBM Cloud le plug-in Provider pour Terraform sur votre poste de travail.
Mise à disposition d'une instance de serveur virtuel unique
Avant de déployer une architecture plus complexe et afin de vérifier l'installation du fournisseur Terraform, commencez par déployer une seule instance de serveur virtuel avec une adresse IP flottante, puis accédez à ce serveur via SSH.
Vérifiez le main.tf fichier pour un script terraform. Il utilise les variables d'environnement définies auparavant.
-
Accédez au dossier du script Terraform pour cet exemple :
cd $CHECKOUT_DIR/vpc-app-deploy/tfinstance
-
Initialisez Terraform :
terraform init
-
Appliquez le plan Terraform :
terraform apply
Le script crée un cloud privé virtuel (VPC), une instance de serveur virtuel (VSI) et active l'accès SSH.
-
Examinez la sortie générée par le plan :
terraform output
-
Vous pouvez effectuer un copier-coller de la sortie de la commande précédente ou utiliser la commande
terraform output
comme suit pour vous connecter à l'instance de serveur virtuel via SSH :$(terraform output -raw sshcommand)
L'utilisation des sorties dans Terraform peut s'avérer utile lorsque vous souhaitez réutiliser les propriétés des ressources dans d'autres scripts après avoir appliqué un plan Terraform.
-
Supprimez les ressources créées par Terraform :
terraform destroy
Mise à disposition de sous-réseaux et d'instances de serveur virtuel
L'ensemble de fichiers Terraform sous le dossier vpc-app-deploy/tf
du référentiel vpc-tutorials
implémente l'architecture du tutoriel Public frontal et backend privé dans un nuage privé virtuel .
Le script vpc-app-deploy/tf/main.tf contient la définition des ressources. cela importe un module Terraform partagé avec cet autre tutoriel :
module vpc_pub_priv {
source = "../../vpc-public-app-private-backend/tfmodule"
basename = "${local.BASENAME}"
ssh_key_name = "${var.ssh_key_name}"
zone = "${var.zone}"
backend_pgw = false
profile = "${var.profile}"
image_name = "${var.image_name}"
resource_group_name = "${var.resource_group_name}"
maintenance = "${var.maintenance}"
frontend_user_data = "${file("../shared/install.sh")}"
backend_user_data = "${file("../shared/install.sh")}"
}
Dans cette définition :
- backend_pgw contrôle si le serveur de back-end a accès à l'Internet public. Une passerelle publique peut être connectée au sous-réseau de back-end. Le sous-réseau de front-end dispose d'une adresse IP qui fournit à la fois une adresse IP publique et une passerelle pour l'accès Internet. Cela va permettre l'accès Internet pour l'installation des logiciels. Le sous-réseau de back-end n'aura pas accès à Internet.
- frontend_user_data et backend_user_data pointent vers les scripts d'initialisation cloud-init.
Avec Terraform, toutes les ressources peuvent avoir des services de mise à disposition associés. Le service de mise à disposition (provisioner) null_resource
ne fournit pas de ressource de cloud mais peut être utilisé pour copier
des fichiers sur des instances de serveur. Cette construction est utilisée dans le script pour copier le uploaded.sh fichier puis de l'exécuter comme indiqué ci-dessous. Pour se connecter aux serveurs, Terraform prend en charge l'utilisation de l'hôte bastion tel que prévu dans le tutoriel :
resource "null_resource" "copy_from_on_prem" {
connection {
type = "ssh"
user = "root"
host = "${module.vpc_pub_priv.frontend_network_interface_address}"
private_key = "${file("~/.ssh/id_rsa")}"
bastion_user = "root"
bastion_host = "${local.bastion_ip}"
bastion_private_key = "${file("~/.ssh/id_rsa")}"
}
provisioner "file" {
source = "../shared/${local.uploaded}"
destination = "/${local.uploaded}"
}
provisioner "remote-exec" {
inline = [
"bash -x /${local.uploaded}",
]
}
}
Pour mettre les ressources à disposition :
- Accédez au dossier de script Terraform :
cd $CHECKOUT_DIR/vpc-app-deploy/tf
- Initialisez Terraform :
terraform init
- Appliquez le plan Terraform :
terraform apply
- Examinez la sortie générée par le plan :
terraform output
Test de la configuration des serveurs virtuels
Terraform disposant maintenant de ressources déployées, vous pouvez vérifier qu'elles ont été mises à disposition correctement.
- Vérifiez que l'instance de serveur virtuel de front-end est accessible et dispose d'un accès sortant sur Internet :
Le résultat de la commande doit être :../test_provision.bash $(terraform output -raw FRONT_IP_ADDRESS) INTERNET hi
success: httpd default file was correctly replaced with the following contents: INTERNET success: provision of file from on premises worked and was replaced with the following contents: hi
- Vérifiez que le serveur de back-end est accessible via l'hôte bastion et n'a pas accès à Internet :
Le résultat de la commande doit être :../test_provision.bash $(terraform output -raw BACK_NIC_IP) ISOLATED hi "ssh -F ../../scripts/ssh.notstrict.config root@$(terraform output -raw FRONT_NIC_IP) -o ProxyJump=root@$(terraform output -raw BASTION_IP_ADDRESS)"
success: httpd default file was correctly replaced with the following contents: ISOLATED success: provision of file from on premises worked and was replaced with the following contents: hi
Suppression de ressources
- Supprimez les ressources créées par Terraform :
terraform destroy
Installation de logiciels avec Ansible
Ansible est un outil de gestion de la configuration et de provisionnement, similaire à Chef et Puppet, et est conçu pour automatiser les déploiements d'applications à plusieurs niveaux et le provisionnement dans le cloud. Développé en Python, Ansible utilise la syntaxe YAML pour décrire les tâches d'automatisation, ce qui facilite son apprentissage et son utilisation.
Bien qu'Ansible soit utilisable pour la mise à disposition de ressources VPC et l'installation de logiciels, cette section utilise Terraform pour mettre à disposition des ressources VPC et Ansible pour déployer les logiciels.
Avant de commencer
Cette section utilise à la fois Terraform et Ansible.
- Suivez les instructions pour installer Terraform et le plug-in IBM Cloud le plug-in Provider pour Terraform sur votre poste de travail.
- Suivez ces instructions pour installer Ansible.
Playbook Ansible
Un playbook Ansible fournit les tâches à exécuter. L'exemple ci-dessous comporte un ensemble de tâches requises pour installer NGINX et télécharger un script. Vous pourrez observer les similitudes avec le script cloud-init
décrit
précédemment. Le script uploaded.sh
est identique.
- hosts: FRONT_NIC_IP BACK_NIC_IP
remote_user: root
tasks:
- name: update apt cache manual
# this should not be required but without it the error: Failed to lock apt for exclusive operation is generated
shell: apt update
args:
executable: /bin/bash
- name: update apt cache
apt:
update_cache: yes
- name: ensure nginx is at the latest version
apt:
name: nginx
state: latest
notify:
- restart nginx
- name: execute init.bash
script: ./init.bash
- name: upload execute uploaded.sh
script: ../shared/uploaded.sh
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
Inventaire Ansible
Ansible s'applique à plusieurs systèmes de votre infrastructure simultanément. L'inventaire Ansible contient la liste de ces systèmes. Le didacticiel fournit un script inventory.bash
pour générer l'inventaire d' Ansible s à partir de la sortie Terraform.
#!/bin/bash
TF=tf
printf 'all:
children:
FRONT_NIC_IP:
hosts:
%s
BACK_NIC_IP:
hosts:
%s
' $(cd $TF; terraform output -raw FRONT_NIC_IP) $(cd $TF; terraform output -raw BACK_NIC_IP)
Mise à disposition de sous-réseaux et d'instances de serveur virtuel
L'annuaire vpc-app-deploy/ansible/tf
contient une configuration Terraform similaire à celle
décrite dans la section précédente, à l'exception de l'installation du logiciel qui a été supprimée. Le script Ansible installera les logiciels à partir de miroirs et téléchargera ensuite les logiciels depuis votre poste de travail.
- Accédez au dossier de script Ansible pour cet exemple :
cd $CHECKOUT_DIR/vpc-app-deploy/ansible/tf
- Initialisez Terraform :
terraform init
- Appliquez le plan Terraform :
terraform apply
- Examinez la sortie générée par le plan :
terraform output
- Générez l'inventaire Ansible :
cd .. && ./inventory.bash > inventory
- Mettez à disposition les logiciels sur le serveur de front-end :
ansible-playbook -T 40 -l FRONT_NIC_IP -u root \ --ssh-common-args "-F ../../scripts/ssh.notstrict.config -o ProxyJump=root@$(cd tf; terraform output -raw BASTION_IP_ADDRESS)" \ -i inventory lamp.yaml
- Mettez à disposition les logiciels sur le serveur de back-end :
ansible-playbook -T 40 -l BACK_NIC_IP -u root \ --ssh-common-args "-F ../../scripts/ssh.notstrict.config -o ProxyJump=root@$(cd tf; terraform output -raw BASTION_IP_ADDRESS)" \ -i inventory lamp.yaml
Test de la configuration des serveurs virtuels
Terraform ayant déployé des ressources et Ansible ayant installé les logiciels, vous pouvez vérifier que leur mise à disposition est correcte.
- Vérifiez que l'instance de serveur virtuel de front-end est accessible et dispose d'un accès sortant sur Internet :
Le résultat de la commande doit être :../test_provision.bash $(cd tf && terraform output -raw FRONT_IP_ADDRESS) INTERNET hi
success: httpd default file was correctly replaced with the following contents: INTERNET success: provision of file from on premises worked and was replaced with the following contents: hi
- Vérifiez que le serveur de back-end est accessible via l'hôte bastion et n'a pas accès à Internet :
Le résultat de la commande doit être :../test_provision.bash $(cd tf && terraform output -raw BACK_NIC_IP) ISOLATED hi "ssh -F ../../scripts/ssh.notstrict.config root@$(cd tf && terraform output -raw FRONT_NIC_IP) -o ProxyJump=root@$(cd tf && terraform output -raw BASTION_IP_ADDRESS)"
success: httpd default file was correctly replaced with the following contents: ISOLATED success: provision of file from on premises worked and was replaced with the following contents: hi
Suppression de ressources
-
Supprimez les ressources créées par Terraform :
cd $CHECKOUT_DIR/vpc-app-deploy/ansible/tf
and
terraform destroy
En fonction de la ressource, le service peut ne pas être supprimé immédiatement mais conservé un certain temps (7 jours par défaut). Pour récupérer la ressource, vous pouvez la supprimer de manière définitive ou la restaurer pendant la période de conservation. Pour savoir comment utiliser la récupération de ressources, consultez ce document.