Skip to content

Commit 2ea7ddb

Browse files
author
Vache, Aurelie
committed
feat: tf in french
1 parent 04ed710 commit 2ea7ddb

File tree

2 files changed

+361
-0
lines changed

2 files changed

+361
-0
lines changed

terraform-cheat-sheet-fr.adoc

Lines changed: 361 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,361 @@
1+
= Terraform CLI Cheat Sheet
2+
Aurélie Vache <https://twitter.com/aurelievache>
3+
:author: Aurélie Vache
4+
:authorbio: Cloud Dev(Ops) chez Continental
5+
:pdf-width: 508mm
6+
:pdf-height: 361mm
7+
:version: v1.0.2
8+
9+
== A propos de la Terraform CLI
10+
11+
Terraform, un outil créé par https://www.hashicorp.com/[Hashicorp] en 2014,
12+
écrit en Go, permet de construire, modifier et controller la version de votre infrastructure.
13+
Cet outil a une Command Line Interface (CLI) très intuitive et puissante.
14+
15+
== Installation
16+
17+
=== Installation grâce à curl
18+
19+
....
20+
$ curl -O https://releases.hashicorp.com/terraform/
21+
0.11.10/terraform_0.11.10_linux_amd64.zip
22+
$ sudo unzip terraform_0.11.10_linux_amd64.zip
23+
-d /usr/local/bin/
24+
$ rm terraform_0.11.10_linux_amd64.zip
25+
....
26+
27+
=== Installation possible également grâce à tfenv : un manager de version pour Terraform
28+
29+
Premièrement, téléchargez le binaire de tfenv et mettez le dans votre PATH.
30+
31+
....
32+
$ git clone https://github.com/Zordrak/tfenv.git
33+
~/.tfenv
34+
$ echo 'export PATH="$HOME/.tfenv/bin:$PATH"'
35+
>> $HOME/bashrc
36+
....
37+
38+
Ensuite, vous pouvez installer la version de Terraform désirée :
39+
40+
....
41+
$ tfenv install 0.11.10
42+
....
43+
44+
== Utilisation
45+
46+
=== Afficher la version
47+
48+
....
49+
$ terraform --version
50+
Terraform v0.11.10
51+
....
52+
53+
=== Initialiser Terraform
54+
55+
`$ terraform init`
56+
57+
C'est la première commande que vous devez éxécuter. Sinon, terraform plan, apply,
58+
destroy et import ne fonctionneront pas. Cette commande terraform init va installer :
59+
60+
* les modules terraform
61+
* éventuellement un backend
62+
* et les plugins/providers
63+
64+
=== Initialiser Terraform et forcer de ne pas demander une entrée
65+
66+
`$ terraform init -input=false`
67+
68+
=== Changer la configuration du backend durant l'initialisation
69+
70+
`$ terraform init -backend-config=cfg/s3.dev.tf -reconfigure`
71+
72+
`-reconfigure` est utilisé afin de demander à terraform de ne pas copier le state existant vers le lieu du nouveau remote state.
73+
74+
=== Get
75+
76+
Cette commande est utile lorsque vous avez défini des modules. Les modules sont vendored
77+
donc lorsque l'on en édite un, il faut encore récupérer (faire un get) du nouveau contenu du module.
78+
79+
`$ terraform get -update=true`
80+
81+
Lorsque vous utilisez des modules, la première chose à faire est de faire un terraform get. La commande va faire un pull des modules dans le répertoire .terraform. A ce moment là vous avez le module vendoré.
82+
83+
=== Plan
84+
85+
L'étape plan vérifie la configuration à exécuter et écrit un plan à appliquer chez le fournisseur d'infrastructure.
86+
87+
`$ terraform plan -out plan.out`
88+
89+
C'est une fonctionnalité importante de Terraform qui permet à l'utilisateur de voir quelles actions
90+
Terraform exécutera avant d’apporter des modifications, ce qui augmentera la confiance qu’un
91+
changement aura l'effet désiré une fois appliqué.
92+
93+
Lorsque vous exécutez la commande terraform plan, terraform analyse tous les fichiers *.tf de
94+
votre répertoire et créé le plan.
95+
96+
=== Apply
97+
98+
Vous avez maintenant le state souhaité donc vous pouvez exécuter le plan.
99+
100+
`$ terraform apply plan.out`
101+
102+
*Bon à savoir :* Depuis terraform v0.11+, en mode interactif (pas exécuter dans une chaine de CI/CD/ dans un pipeline autonome), vous pouvez simplement exécuter la commande `terraform apply` qui
103+
affichera les actions que TF effectuera.
104+
105+
En générant le plan et en l’appliquant dans la même commande, Terraform peut
106+
garantir que le plan d'exécution ne changera pas, sans qu'il soit nécessaire de l'écrire sur disque. Cela réduit le risque de laisser des données potentiellement sensibles, ou
107+
d'accidentellement le versionner.
108+
109+
`$ terraform apply`
110+
111+
==== Appliquer et aprouver automatiquement
112+
113+
`$ terraform apply -auto-approve`
114+
115+
==== Appliquer et définir de nouvelle valeurs de variables
116+
117+
....
118+
$ terraform apply -auto-approve
119+
-var tags-repository_url=${GIT_URL}
120+
....
121+
122+
==== Appliquer uniquement un module
123+
124+
....
125+
$ terraform apply -target=module.s3
126+
....
127+
128+
Cette option _-target_ fonctionne également avec la commande _terraform plan_.
129+
130+
=== Destroy
131+
132+
`$ terraform destroy`
133+
134+
Supprime toutes les resources !
135+
136+
Un plan de suppresion peut être créé avant :
137+
138+
`$ terraform plan –destroy`
139+
140+
L'option `-target` permet de détruire uniquement une resource, par exemple un bucket S3 :
141+
142+
....
143+
$ terraform destroy -target aws_s3_bucket.my_bucket
144+
....
145+
146+
=== Debug
147+
148+
La commande Terraform console est utile pour tester les interpolations avant de les utiliser dans les ressources à créer ou modifier. Terraform console va lire le state confgiuré même si ce dernier est en remote.
149+
150+
....
151+
$ echo "aws_iam_user.notif.arn" | terraform console
152+
arn:aws:iam::123456789:user/notif
153+
....
154+
155+
=== Graph
156+
157+
`$ terraform graph | dot –Tpng > graph.png`
158+
159+
Graph visuel des dépendances des ressources Terraform.
160+
161+
=== Validate
162+
163+
La commande validate est utilisée pour valider / vérifier la syntaxe des fichiers Terraform. Une vérification de la syntaxe est effectuée sur tous les fichiers terraform du répertoire et affiche une erreur si l'un des fichiers ne se valide pas. La vérification de la syntaxe ne couvre pas tous les problèmes courants liés à la syntaxe.
164+
165+
....
166+
$ terraform validate
167+
....
168+
169+
=== Providers
170+
171+
Vous pouvez utiliser un grand nombre de providers/plugins dans vos définition de ressources terraform. Il peut donc être utile de disposer d'un arbre de providers utilisés par les modules de votre projet.
172+
173+
....
174+
$ terraform providers
175+
.
176+
├── provider.aws ~> 1.54.0
177+
├── module.my_module
178+
│   ├── provider.aws (inherited)
179+
└── module.elastic
180+
└── provider.aws (inherited)
181+
....
182+
183+
== State
184+
185+
=== Pull le remote state dans une copie locale
186+
187+
....
188+
$ terraform state pull > terraform.tfstate
189+
....
190+
191+
=== Push state dans un stockage de backend remote
192+
193+
....
194+
$ terraform state push
195+
....
196+
197+
Cette commande est utile si par exemple à l'origine vous avez utilisé un tf state en local et qu'ensuite vous definissez un stockage de backend, dans un bucket S3 ou avec COonsul par exemple.
198+
199+
=== Comment demander à Terraform que vous avez déplacé une ressource dans un module ?
200+
201+
Si vous avez déplacé une ressource existante , vous devez mettre a jour le state :
202+
203+
....
204+
$ terraform state mv aws_iam_role.role1 module.mymodule
205+
....
206+
207+
=== Comment importer une ressource existante dans Terraform ?
208+
209+
Si vous avez une ressource existante dans votre provider d’infrastructure, vous pouvez l'importer
210+
dans votre state Terraform :
211+
212+
....
213+
$ terraform import aws_iam_policy.elastic_post
214+
arn:aws:iam::123456789:policy/elastic_post
215+
....
216+
217+
== Workspaces
218+
219+
Terraform workspace est une fonctionnalité qui permet de gérer plusieurs environnements distincts.
220+
221+
Au lieu de créer un répertoire pour chaque environnement à gérer, nous devons simplement
222+
créer l'espace de travail/le workspace nécessaire et l'utiliser :
223+
224+
=== Créer un workspace
225+
226+
Cette commande créé un nouveau workspace et le sélectionne
227+
228+
`$ terraform workspace new dev`
229+
230+
=== Sélectionner un workspace
231+
232+
`$ terraform workspace select dev`
233+
234+
=== Lister les workspaces
235+
236+
....
237+
$ terraform workspace list
238+
default
239+
* dev
240+
prelive
241+
....
242+
243+
=== Afficher le workspace courant
244+
245+
....
246+
$ terraform workspace show
247+
dev
248+
....
249+
250+
== Outils
251+
252+
=== jq
253+
254+
jq est une "command-line JSON processor" légère. Combiné avec les outputs Terraform cela peut être très puissant.
255+
256+
==== Installation
257+
258+
Pour Linux :
259+
260+
`$ sudo apt-get install jq`
261+
262+
ou
263+
264+
`$ yum install jq`
265+
266+
Pour OS X :
267+
268+
`$ brew install jq`
269+
270+
==== Utilisation
271+
272+
Il suffit de définir des outputs dans un module, et lorsque vous exécutez _terraform apply_, les outputs sont affichés :
273+
274+
....
275+
$ terraform apply
276+
...
277+
Apply complete! Resources: 0 added, 0 changed,
278+
0 destroyed.
279+
280+
Outputs:
281+
282+
elastic_endpoint = vpc-toto-12fgfd4d5f4ds5fngetwe4.
283+
eu-central-1.es.amazonaws.com
284+
....
285+
286+
Vous pouvez extraire la valeur désirée afin de l'utiliser dans un script par exemple. Avec jq c'est facile :
287+
288+
....
289+
$ terraform output -json
290+
{
291+
"elastic_endpoint": {
292+
"sensitive": false,
293+
"type": "string",
294+
"value": "vpc-toto-12fgfd4d5f4ds5fngetwe4.
295+
eu-central-1.es.amazonaws.com"
296+
}
297+
}
298+
299+
$ terraform output -json | jq '.elastic_endpoint.value'
300+
"vpc-toto-12fgfd4d5f4ds5fngetwe4.eu-central-1.
301+
es.amazonaws.com"
302+
....
303+
304+
=== Terraforming
305+
306+
Si vous avez un compte AWS existant avec des composants existants tels que
307+
des buckets S3, SNS, VPC… Vous pouvez utiliser l’outil terraforming, un outil écrit en Ruby,
308+
qui extrait les ressources AWS existantes et les convertissent en fichiers Terraform !
309+
310+
==== Installation
311+
312+
`$ sudo apt install ruby`
313+
ou
314+
`$ sudo yum install ruby`
315+
316+
et
317+
....
318+
$ gem install terraforming
319+
....
320+
321+
==== Utilisation
322+
323+
Pré-requis :
324+
325+
Comme avec Terraform, vous devez settez les credentials AWS
326+
327+
....
328+
$ export AWS_ACCESS_KEY_ID="an_aws_access_key"
329+
$ export AWS_SECRET_ACCESS_KEY="a_aws_secret_key"
330+
$ export AWS_DEFAULT_REGION="eu-central-1"
331+
....
332+
333+
Vous pouvez également spécifier le profile des credentials dans _~/.aws/credentials_ avec l'option _–profile_.
334+
335+
....
336+
$ cat ~/.aws/credentials
337+
[aurelie]
338+
aws_access_key_id = xxx
339+
aws_secret_access_key = xxx
340+
aws_default_region = eu-central-1
341+
....
342+
343+
....
344+
$ terraforming s3 --profile aurelie
345+
....
346+
347+
Utilisation
348+
349+
....
350+
$ terraforming --help
351+
Commands:
352+
terraforming alb # ALB
353+
...
354+
terraforming vpc # VPC
355+
....
356+
357+
Exemple :
358+
359+
`$ terraforming s3 > aws_s3.tf`
360+
361+
Remarques : terraforming ne peut pas extraire, pour le moment, les ressources de type API Gateway donc vous devez les écrire manuellement.

terraform-cheat-sheet-fr.pdf

89.8 KB
Binary file not shown.

0 commit comments

Comments
 (0)