Librairie de modules Terraform réutilisables pour concevoir des déploiements dans le laboratoire d'expérimentation infonuagique du CEAI.
- Linux/MacOs/WSL
- Client Terraform
- Client AWS v2 (Pour modules aws)
- jq
Importer le module vide ceai-lib
pour importer le contenu du dépôt Git. Vous pourrez par la suite référencer les modules via le chemin d'import Terraform: ./.terraform/{nom_module_import}/
.
Vous pouvez spécifier le tag de version de la librairie via le paramètre ref
. Sinon vous obtenez la version la plus récente (non recommandé).
module "ceai_lib" {
source = "github.com/CQEN-QDCE/ceai-cqen-terraform-lib?ref=v1.0"
}
module "sea_network" {
source = "./.terraform/modules/ceai-lib/aws/sea-network"
}
Les modules tiennent compte de l'utilisation de certaines bonnes pratiques dans leur fonctionnement.
Sur la machine qui exécute le déploiement, modifier le fichier $HOME/.aws/config
(Le créer s'il n'existe pas).
[profile {CompteExemple}]
sso_start_url = {Url de connexion AWS SSO}
sso_region = ca-central-1
sso_account_id = {Numéro du compte}
sso_role_name = {Nom du role que vous possédez sur ce compte}
region = ca-central-1
output = json
Votre déploiement devra connaître le nom du profil utilisé pour se connecter à AWS. L'utilisation d'une variable est recommandée.
variable "aws_profile" {
type = string
description = "Nom du profil de connexion SSO dans le fichier .aws/config du poste qui exécute le déploiement"
}
Les modules pour les ressources à déployer dans SEA sont presque tous dépendant du module sea-network
. Celui-ci doit connaître le type de compte de travail utilisé (Sandbox, Dev ou Prod). L'utilisation d'une variable est recommandée.
variable "workload_account_type" {
type = string
description = "Type de compte de travail ASEA (Prefix du VPC partagé) [Sandbox, Dev, Prod]"
}
module "sea_network" {
source = "./.terraform/modules/ceai-lib/aws/sea-network"
aws_profile = var.aws_profile
workload_account_type = var.workload_account_type
}
Prévoir des valeurs pour les tags system
et environment
et forcer ceux-ci en déclarent votre provider.
Nous recommandons d'utiliser deux variables dans le fichier variables.tf
variable "system" {
type = string
description = "Nom du système déployé."
default = "Exemple"
}
variable "environment" {
type = string
description = "Nom de l'environnement du système déployé."
default = "Dev"
}
Forcer les tags dans provider.tf
provider "aws" {
region = "ca-central-1"
profile = var.aws_profile
default_tags {
tags = {
system = var.system
environment = var.environment
}
}
}
Pour contribuer un module à la librairie assurez-vous que celui-ci respecte certaines règles de base:
- Suivre la nomenclature des répertoires en cours: [fournisseur]/[nom-du-module];
- Créer un exemple démontrant l'utilisation de votre module dans le répertoire
examples
, celui-ci vous servira de tests; - Appliquer le formatage Terraform au code:
terraform fmt -recursive
- Générer la documentation de votre module à l'aide de Terraform-docs;
# Sur un système ayant l'environnement golang installé go install -v github.com/terraform-docs/terraform-docs@latest cd [repertoire module] terraform-docs markdown . > README.md
- Créer une branche
release/vX.X-rcX
Pour un premier release candidate, s'il n'y en a pas en cours. - Taguer le release candidate dans la branche release quand il est prêt.
- Contacter un mainteneur pour migrer et taguer la nouvelle version dans la branche main
- Utiliser le modules
aws-sea-network
pour retrouver les VPC du compte de travail.
Ce projet est sous la Licence Libre du Québec - Permissive (LiLiQ-P) version 1.1.
Référez-vous au fichier LICENSE pour plus de détails.