Si vous prévoyez de gérer et travailler avec Amazon Web Services (AWS), l’utilisation du fournisseur AWS de Terraform est un must. Il vous permet d’interagir avec les nombreuses ressources prises en charge par AWS, telles que Amazon S3, Elastic Beanstalk, Lambda, et bien d’autres encore.
Dans ce guide ultime, vous allez apprendre, étape par étape, tout ce que vous devez savoir sur le fournisseur AWS et comment utiliser ce fournisseur avec Terraform pour gérer votre infrastructure Amazon.
Allons-y!
Prérequis
Si vous souhaitez suivre ce tutoriel, assurez-vous d’avoir les éléments suivants en place :
- Un compte Amazon Web Service (AWS).
- Un utilisateur IAM avec une clé d’accès ID et une clé secrète configurées sur votre machine locale.
- Terraform v0.14.9 – Les démonstrations de ce tutoriel sont basées sur Ubuntu 18.04.5 LTS, mais d’autres systèmes d’exploitation avec Terraform fonctionneront.
- A code editor – Even though you can use any text editor to work with Terraform configuration files, you should have one that understands the HCL Terraform language. Try out Visual Studio (VS) Code.
Qu’est-ce que le fournisseur AWS Terraform ?
Terraform dépend de plugins pour interagir avec des fournisseurs de services cloud tels que AWS, Google Cloud Platform (GCP) et Oracle. L’un des fournisseurs les plus largement utilisés est le fournisseur AWS. Ce fournisseur interagit avec de nombreuses ressources prises en charge par AWS, telles que \texttt{Amazon S3}, \texttt{Elastic Beanstalk}, \texttt{Lambda}, et bien d’autres. \texttt{
}Terraform utilise le fournisseur AWS avec les informations d’identification appropriées pour se connecter à Amazon et gérer ou déployer/mettre à jour des dizaines de services AWS. \texttt{
}Le fournisseur AWS est déclaré dans le fichier de configuration Terraform et comprend divers paramètres tels que la version, les URL des points d’extrémité ou les régions cloud, etc. \texttt{
}\texttt{Déclaration du fournisseur AWS}
Quand vous avez besoin de faire référence au nom d’un fournisseur, vous devez définir un nom local. Le nom local est le nom du fournisseur qui est attribué à l’intérieur du bloc required_providers
. Les noms locaux sont attribués lors de la requête d’un fournisseur et doivent être uniques par module.
Lors de la déclaration des required_providers
, vous devez également déclarer le paramètre source
dans Terraform 0.13 et les versions ultérieures. Le paramètre source
définit l’adresse source à partir de laquelle Terraform peut télécharger des plugins.
Les adresses source se composent de trois parties, comme suit :
- Nom d’hôte – Le nom d’hôte du registre Terraform qui distribue le fournisseur. Le nom d’hôte par défaut est registry.terraform.io.
- Espace de noms – Un espace de noms organisationnel dans le registre spécifié.
- Type – Un type est un nom court que vous fournissez pour la plateforme ou le système que le fournisseur gère, et il doit être unique.
Vous pouvez voir ci-dessous la syntaxe de déclaration du paramètre source, où les trois parties d’une adresse source sont délimitées par des barres obliques (/
).
Le fichier de configuration Terraform ci-dessous déclare le nom du fournisseur requis (aws
), ainsi que l’adresse source, la version du fournisseur AWS, et configure la région du fournisseur (us-east-2
).
Authentification d’un Compte AWS avec des Identifiants Intégrés
Maintenant que vous avez une compréhension de base de la façon de déclarer le fournisseur AWS, passons à l’authentification d’un compte AWS.
Vous pouvez authentifier le fournisseur AWS via différentes méthodes, telles que la déclaration de variables d’environnement et le stockage des informations d’identification dans un profil nommé. Mais le moyen le plus rapide d’authentifier un compte AWS est de coder en dur les informations d’identification dans votre fournisseur AWS.
Bien que l’utilisation de crédits codés en dur ne soit pas recommandée car elle est sujette aux fuites, vous pouvez néanmoins déclarer des informations d’identification codées en dur dans la configuration Terraform pour tester rapidement n’importe quelle ressource AWS. Mais continuez à lire et vous découvrirez plus tard une meilleure façon d’authentifier un compte AWS en déclarant des variables d’environnement.
La configuration ci-dessous déclare un nom local (aws
) ainsi que la région du fournisseur (us-east-2
), comme indiqué ci-dessous. Vous pouvez voir que le bloc du fournisseur AWS déclare également une clé d’accès et une clé secrète pour authentifier un compte AWS.
Sécurisation des informations d’identification en déclarant des variables d’environnement
Vous venez d’apprendre qu’il est possible de coder en dur des informations d’identification statiques pour authentifier le service cloud AWS avec Terraform. Cependant, le codage en dur n’est pas sûr et est recommandé uniquement lors du déploiement dans un environnement de test pour tester rapidement le code.
Y a-t-il une autre manière de sécuriser les informations d’identification? Oui, en les déclarant comme des variables d’environnement, il n’y a pas de limite au nombre que vous pouvez déclarer. Les variables d’environnement sont des variables dont les valeurs sont définies en dehors du fichier de configuration Terraform et sont composées d’une paire nom/valeur.
Exécutez la série de commandes export
ci-dessous pour exporter chaque variable d’environnement. L’exportation des variables d’environnement les rend disponibles tout au long du programme ou jusqu’à ce que Terraform s’exécute.
Stockage de plusieurs informations d’identification dans un profil nommé
À la fois le codage en dur et la déclaration des informations d’identification en tant que variables d’environnement vous permettent d’authentifier un compte AWS à la fois. Mais que faire si vous devez stocker plusieurs informations d’identification et les utiliser au besoin? Stocker les informations d’identification dans un profil nommé est l’option idéale.
Le code ci-dessous crée un profil nommé (Myprofile
) qui contient une clé d’accès et une clé secrète.
L’emplacement par défaut des profils nommés est à $HOME/.aws/credentials/Myprofile sur Linux et macOS, ou %USERPROFILE%\.aws\credentials\Myprofile sur Windows. Remplacez Myprofile par le nom réel du profil nommé.
Une fois que vous avez créé un profil nommé dans ~/.aws/credentials, vous pouvez ensuite référencer ce profil dans votre configuration Terraform en utilisant l’attribut profile
. Ci-dessous, vous référencez le profil nommé Monprofil
.
Déclaration de l’Assume Role dans le fournisseur AWS
Vous venez d’apprendre à configurer un fournisseur AWS en déclarant des informations d’identification codées en dur avant d’exécuter Terraform. Mais peut-être que vous voulez déclarer des informations d’identification au moment de l’exécution. Si tel est le cas, l’API AssumeRole est ce dont vous avez besoin. AssumeRole fournit des informations d’identification temporaires contenant un ID de clé d’accès, une clé d’accès secrète et un jeton de sécurité. Ces informations d’identification vous permettent de vous connecter à AWS.
Le code ci-dessous déclare le fournisseur
nommé aws
et un assume_role
qui contient un nom de rôle et un nom de session. Pour configurer l’accès AssumeRole, vous devez définir un rôle IAM qui spécifie les privilèges qu’il accorde et quelles entités peuvent l’assumer.
Déclaration de plusieurs fournisseurs AWS
Jusqu’à présent, vous avez appris comment déclarer et configurer le fournisseur AWS dans Terraform qui fonctionne avec une seule région. Mais que faire si vous devez gérer votre infrastructure ou vos services AWS dans plusieurs régions cloud ? Dans ce cas, vous devrez déclarer le mot-clé alias
.
L’alias permet de définir plusieurs configurations pour le même fournisseur et de sélectionner celui à utiliser sur une base par ressource ou par module ou de prendre en charge plusieurs régions.
Le code ci-dessous déclare le fournisseur AWS par défaut nommé aws
avec la region
définie sur us-east-2
. Puis déclare un autre fournisseur AWS avec le même nom, mais avec un alias
déclaré nommé west
et une region
définie sur us-west-2
.
Déclarer un alias
vous permet de créer des ressources dans la région us-east-2
par défaut ou dans la région us-west-2
si vous choisissez le fournisseur aws.west
en fonction des besoins.
Personnaliser la configuration de l’endpoint du fournisseur AWS
Personnaliser la configuration de l’endpoint est pratique lors de la connexion à des endpoints de service AWS non par défaut, tels que AWS Snowball ou lors de tests locaux.
Configurez le fournisseur AWS de Terraform pour utiliser des points d’accès personnalisés. Faites-le en déclarant le bloc de configuration endpoints
à l’intérieur du bloc du fournisseur, comme indiqué ci-dessous.
La configuration ci-dessous vous permet d’accéder au service AWS S3 sur le port local 4572
comme si vous accédiez réellement au service AWS S3 sur un compte AWS. De même, la configuration vous permet d’accéder localement à dynamodb
sur le port 4569
. DynamoDB est un service de base de données NoSQL qui offre des performances rapides avec une évolutivité transparente.
Vérifiez la liste des points d’accès personnalisés autorisés par le fournisseur AWS Terraform.
Ajout de balises
Auparavant, vous avez appris comment déclarer un fournisseur AWS avec des configurations telles que la région, l’emplacement source, etc. Mais pour mieux gérer vos ressources, vous devez ajouter des balises au niveau du fournisseur.
Les balises sont des étiquettes composées de clés et de valeurs définies par l’utilisateur. Les balises sont pratiques lorsque vous devez vérifier la facturation, la propriété, l’automatisation, le contrôle d’accès et de nombreux autres cas d’utilisation dans le compte AWS.
Au lieu d’ajouter des balises à chaque ressource individuellement, apprenons comment ajouter des balises à toutes les ressources au niveau du fournisseur, ce qui permettra de gagner beaucoup de code et de temps.
Le code ci-dessous configure un fournisseur AWS avec des balises définies à l’intérieur de default_tags
. L’avantage d’ajouter des balises dans le fournisseur est que les balises spécifiées seront automatiquement ajoutées lorsque vous créez une ressource avec ce fournisseur.
Ignorer les balises
Activer les balises au niveau du fournisseur aide à appliquer des balises dans tout l’environnement. Mais parfois, vous devez ignorer les balises, par exemple si vous ne souhaitez pas ajouter de balise par défaut à une instance EC2 et plutôt l’appliquer au reste des ressources dans le compte AWS. Jetons un coup d’œil !
Le code ci-dessous configure un fournisseur AWS avec ignore_tags défini à l’intérieur du fournisseur. L’avantage d’utiliser la balise d’ignorance est lorsque vous ne souhaitez pas ajouter de balises par défaut à certaines ressources et les appliquer au reste des ressources.
Dans le code ci-dessous, lorsque vous créez une ressource avec le fournisseur aws
, toutes les ressources ignoreront les balises LastScanned
et kubernetes.io
.
Création d’un bucket S3 AWS
À présent, vous avez appris tout ce qu’il faut savoir sur la déclaration et la configuration des fournisseurs AWS en profondeur. Mais déclarer simplement le fournisseur AWS ne fait rien tant que vous ne gérez pas les ressources AWS telles que la provision d’un bucket S3 AWS ou la suppression d’une instance Ec2, etc. Alors, apprenons comment créer un bucket S3 AWS !
1. Créez un dossier nommé ~/terraform-s3-demo, puis changez (cd
) le répertoire de travail vers ce dossier. Le dossier ~/terraform-s3-demo contiendra votre fichier de configuration et tous les fichiers associés que Terraform va créer.
2. Copiez et collez la configuration ci-dessous dans votre éditeur de code préféré, et enregistrez-la sous le nom de main.tf dans le répertoire ~/terraform-s3-demo.
Le fichier main.tf crée quelques ressources nécessaires :
- Exigence du fournisseur : Une exigence du fournisseur se compose d’un nom local, d’un emplacement source et d’une contrainte de version.
- Clé de chiffrement: La clé de chiffrement Amazon S3 aide le bucket S3 afin que tous les nouveaux objets soient chiffrés lorsqu’ils sont stockés dans le bucket. Les clés de chiffrement sont créées à l’aide de
aws_kms_key
dans Terraform. - Configuration du fournisseur AWS: Déclaration du nom du fournisseur (
aws
) ainsi que de la régionus-east-2
. - Bucket: Ce module Terraform crée un bucket nommé
terraformdemobucket
. Terraform ne peut pas détruire ce bucket car il contient un indicateurforce_destroy
.
Versioning: La versioning dans Amazon S3 signifie conserver plusieurs versions d’un objet dans le même bucket
3. Maintenant, exécutez les commandes ci-dessous pour naviguer vers le répertoire ~\\terraform-s3-demo
et initialiser Terraform. Terraform initialise les plugins et les fournisseurs nécessaires pour travailler avec les ressources.
Terraform utilise généralement une approche en trois commandes dans l’ordre séquentiel terraform init, terraform plan et terraform apply.
Création d’instances EC2 AWS et d’utilisateurs IAM
Dans la section précédente, vous avez appris à créer un seul objet (un bucket AWS S3) en utilisant Terraform avec le fournisseur AWS. Mais en fait, vous pouvez créer plusieurs objets du même type en utilisant Terraform avec le fournisseur AWS.
1. Créez un dossier nommé ~/terraform-ec2-iam-demo, puis naviguez-y
2. Ouvrez votre éditeur de code favori, copiez/collez la configuration ci-dessous et enregistrez le fichier sous le nom main.tf dans le répertoire ~/terraform-ec2-iam-demo.
Le code ci-dessous crée deux instances EC2 ec21a
et ec21a
, avec les types d’instance t2.micro
et t2.medium
respectivement, puis crée des utilisateurs IAM avec quatre noms différents. L’ami
déclaré dans le code est une Amazon Machine Image (AMI), qui fournit les informations nécessaires pour lancer une instance, telles que le type de système d’exploitation, quels logiciels installer, etc.
Vous pouvez trouver des AMIs Linux en utilisant la console Amazon EC2.
3. Ensuite, créez un autre fichier, copiez/collez le code ci-dessous, et enregistrez le fichier sous vars.tf dans le répertoire ~/terraform-ec2-iam-demo.
Le code ci-dessous déclare toutes les variables, qui sont référencées dans le fichier main.tf. Après avoir exécuté le code Terraform, la variable tag_ec2
avec les valeurs ec21a
et ec21b
est assignée aux deux instances EC2 définies dans le fichier main.tf.
4. Créez un autre fichier de configuration Terraform appelé output.tf dans le répertoire ~/terraform-ec2-iam-demo, puis copiez/collez le code ci-dessous dans le fichier output.tf.
Après l’exécution réussie de la commande terraform apply, vous devriez voir les valeurs de ${aws_instance.my-machine.*.id}
et ${aws_iam_user.accounts.*.name}
à la fin de la sortie de la commande.
Le code ci-dessous indique à Terraform de faire référence aux ressources aws_instance
et aws_iam_user
définies dans le fichier de configuration main.tf.
5. Créez un autre fichier de configuration dans le répertoire ~/terraform-ec2-iam-demo appelé provider.tf, et collez le code ci-dessous dans le fichier provider.tf. Le fichier provider.tf ci-dessous définit le fournisseur AWS Terraform afin que Terraform sache comment interagir avec toutes les ressources AWS que vous avez définies dans les étapes précédentes.
6. Maintenant, vérifiez que tous les fichiers requis ci-dessous sont contenus dans le dossier ~/terraform-ec2-iam-demo en exécutant la commande tree
.

7. Exécutez les commandes ci-dessous dans l’ordre séquentiel pour initialiser Terraform et créer des instances EC2 AWS et des utilisateurs IAM.

Enfin, accédez à la Console de gestion AWS, puis passez au service EC2 AWS et à la console IAM.
Sur les captures d’écran suivantes, vous pouvez vérifier que les instances EC2 et les utilisateurs IAM existent.


Conclusion
Avec ce guide ultime, vous disposez désormais des connaissances nécessaires pour travailler avec le fournisseur AWS, de la déclaration à l’exécution du fournisseur AWS dans Terraform. Vous avez également appris comment le fournisseur AWS vous permet de déclarer des informations d’identification de différentes manières de manière sécurisée.
Maintenant, quel service AWS avez-vous en tête pour gérer avec le fournisseur AWS et Terraform?