Cette présentation fait un tour d'horizon sur l'infra as code, quel problème on cherche à résoudre et les avantages et inconvénients des outils les plus connus pour l'IAC (Terraform, Cloud formation, CDK)
TERRAFORM - IAC - DE
TERRAFORM - IAC - DE
QUOI S'AGIT T'IL ?
QUOI S'AGIT T'IL ?
DOMINIQUE DUMONT
DOMINIQUE DUMONT
QUI SUIS-JE ?
QUI SUIS-JE ?
Dominique Dumont (@dod38fr)
Contributeur Open-Source depuis 1996
Debian Developer depuis 2011
Freelance devops depuis 2020
PROBLÈME À RÉSOUDRE
PROBLÈME À RÉSOUDRE
déployer une infra pour héberger une application
déployer plusieurs environments (dev prod…)
la faire évoluer
déroules un Plan de Reprise d'Activité (PRA ou
DRP)
PRINCIPE
PRINCIPE
Décrire le résultat attendu
L'outil se débrouille pour déterminer les actions à
faire en fonction de l'état de l'infra et le résultat
attendu.
AVANTAGES
AVANTAGES
idempotence: on peut relancer la commande sans
soucis en cas de problème
immutabilité: une modif faite dans votre dos est
détectée et corrigée
facile de détruire l'infra (tests)
on peut archiver le code avec GIT
on peut appliquer les changements d'infra avec
une CI/CD
TERRAFORM - HCL
TERRAFORM - HCL
Pour décrire:
les ressources
les relations entre ces ressources
les paramètres d'entrée (e.g. env dev vs
prod)
resource "azurerm_servicebus_namespace" "default" {
name = local.cluster-name
location = var.location
resource_group_name = azurerm_resource_group.cluster.name
sku = "Basic"
}
TERRAFORM - COMMANDES
TERRAFORM - COMMANDES
terraform plan: vérifier ce qui ca se passer
terraform apply: appliquer les changements
terraform destroy: tout détruire
TERRAFORM - PROVIDERS
TERRAFORM - PROVIDERS
Interface entre Terraform et les ressources dans le
cloud
Beaucoup de : Azure, AWS, GitHub,
Kubernetes, OVH, CloudFlare,
providers
TERRAFORM - MODULES
TERRAFORM - MODULES
Abstraction qui englobe plusieurs ressources, un
peu comme une librairie
Beaucoup de modules disponibles
CLOUD FORMATION
CLOUD FORMATION
seulement pour AWS
YAML "enrichi" (exemple: !Sub !Join)
beaucoup moins souple que HCL
PolicyDocument:
Id: CrossAccessPolicy
Statement:
- Sid: CrossAccPolicyDoc
Action: "s3:ListBucket"
Resource: !Sub 'arn:aws:s3:::${S3BUCKET}'
Principal:
AWS: !Join ['', ["arn:aws:iam::", !Ref PublisherAccountID
AWS CDK
AWS CDK
permet de décrire les ressources avec
Python, Java, TypeScript…
Développé par AWS
Originellement disponible que pour AWS
Peut maintenant s'appuyer sur les providers de
Terraform
CDK
function = _lambda.Function(
self,
"lambda_function",
runtime=_lambda.Runtime.PYTHON_3_8,
handler="index.handler",
code=_lambda.Code.from_asset("lambda"),
layers=[layer]
)
TERRAFORM
TERRAFORM
permet de décliner assez facilement des
déploiements dev, pre-prod, prod…
pas trop de problèmes de compatiblité sur les
upgrades
tfstate un peu pénible à gérer et partager