Des astuces pour utiliser des boucles et des conditions avec Terraform en utilisant le paramètre count
au sein des ressources:
- comme un compteur pour les boucles
- comme un booléen (0=false, 1=true) pour les conditions
On peut ensuite utiliser la fonction element
pour récupérer l'élément d'une liste correspondant à l'indice de count
ou utiliser la fonction replace
pour remplacer 0 ou 1 par des valeurs différentes par exemple.
C'est plutôt tricky mais ça à l'air de faire le job.
Best practices pour Terraform:
- utiliser des modules contenant le code nécessaire au provisinning des services
- appeler les modules depuis les répertoires de configuration spécifiques aux environnements en passant en variables les données spécifiques aux environnements
- séparer les modules et la configuration spécifique aux environnements dans 2 repos git différents afin de pouvoir appeler des versions du module différent selon les environnements (en utilisant les tags git)
ex:
- infrastructure-live-repo
| - dev
| | - app1
| | - app2
| | - db1
| | - vpc
| - test
| | - ...
| - prod
| | - ...
| - mgmt
| | - bastion
| | - ...
| - global
| | - iam
| | - route53
| | - ...
- infrastructure-modules-repo (tags v0.0.1, v0.0.2, ...)
| - app1
| - app2
| - db1
| - vpc
| - bastion
| - ...
Comment centraliser les logs des containers Docker dans Cloudwatch en utilisant awslogs et comment les envoyer par la suite dans une stack ELK en passant par un export S3.
Terraform 0.8 est sorti.
Au menu:
- une amélioration de la gestion des conditions (même s'il reste encore énormément de chemin à faire de ce côté)
- Le mode console permettant d'interroger les states et de tester les interpolations
- les ressources peuvent maintenant être dépendantes d'un module
Attention, certains changements provoquent des incompatibilités avec les versions précédentes. Lire la partie upgrade de la release note pour vérifier les changements nécessaires.
Des bonnes pratiques pour gérer son infrastructure avec terraform:
- utiliser un bucket s3 versionné et chiffré plutôt qu'un repo git comme datastore
- isoler chaque environnements dans des states séparés
- isoler chaque rôle (network, database, application, ...) dans des states séparés
Un script Python pour générer les serveurs et rôles utilisé par Fabric de façon dynamique en utilisant l'API AWS.
Ce script génère les rôles en se basant sur le nom de l'instance.
Je préfère une approche utilisant les tags AWS pour gérer les rôles.
C'est plus compliqué à gérer, mais ça laisse beaucoup plus de flexibilité.
Le calculateur de coûts AWS
Bees crée des instances EC2 à la volée et lance des tests de charge distribués
Alternative à Cloudformation et Terraform pour gérer le provisioning sur AWS
Un script python pour télécharger les logs d'une instance RDS PostgreSQL afin de les analyser avec pgbadger (https://github.com/dalibo/pgbadger)
Un example d'utilisation de Cloudfront + AWS WAF pour se protéger contre le hotlinking (site tierce malveillant utilisant du contenu d'un autre site à ses propres fins)
Hack AWS pour gérer les clés SSH des users dans IAM et permettre aux instances EC2 de récupérer les clés SSH automatiquement
Pour comparer le tarif et les capacités des instances EC2 et RDS.
Attention, les données ne sont pas forcément toujours à jour.
La dernière mise à jour date de début mars 2016
Hack pour installer OpenBSD sur AWS
Une intro très complète aux instances réservées AWS et surtout une explication de la méthode pour calculer le nombre d'instances réservées optimal
Comment créer un honeypot avec AWS API Gateway et Lambda afin de bloquer avec Cloudfront et WAF les ip des bad bots et content scrappers sur le site réel
Pour sauvegarder sur S3 avec Deja Dup sur Ubuntu:
- create your bucket on S3 without 'dot' in the name (https://github.com/boto/boto/issues/2836)
- create your iam user and attach it the following iam policy:
{"Version": "2012-10-17","Statement": [ {"Effect": "Allow","Action": ["s3:ListAllMyBuckets","s3:GetBucketLocation","s3:ListBucket"], "Resource": ["arn:aws:s3:::<MY-BUCKET-NAME>"]}, {"Effect": "Allow","Action": ["s3:DeleteObject","s3:GetObject","s3:PutObject"], "Resource": ["arn:aws:s3:::<MY-BUCKET-NAME>"]}, ]}
sudo apt install python-boto python-cloudfiles dconf-tools
- open deja-dup and select Storage -> S3 then enter your AWS Access Key
- edit the bucket name used by deja-dup with dconf:
dconf write /org/gnome/deja-dup/s3/bucket "'<MY-BUCKET-NAME>'"
- restart deja-dup then launch backup (your AWS Secure Key will be asked
Pour utiliser une registry docker privée avec ECS:
- Ajouter les lignes suivantes dans
/etc/ecs/ecs.config
sur l'instance qui fait tourner ECS:ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
- Redémarrer l'agent docker:
sudo stop ecs && sudo start ecs
Si la registry docker privée utilise un certificat SSL, il peut être nécessaire de l'ajouter au store système de l'instance:
- Ajouter le certificat SSL de la registry dans /usr/share/pki/ca-trust-source/anchors/
- lancer les commandes suivantes pour que le certificat soit ajouté au store:
update-ca-trust extract && update-ca-trust enable
Pour éditer en masse des tags AWS
Comparaison entre Kubernetes et ECS
Kubernetes gagne sur tous les points.
Attention cet article date de juin. Les 2 solutions ont certainement évoluées depuis.