From c37e4c4095d88fe4d63de4b0d42a1b2957616421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Wed, 27 Mar 2019 23:18:59 +0100 Subject: [PATCH] [tf] add terraform presentation --- Makefile | 3 + cicd/index.html | 116 +++++---- index.html | 71 +++--- terraform/favicon.png | Bin 0 -> 1104 bytes terraform/index.html | 75 ++++++ terraform/narando_logo.png | Bin 0 -> 16661 bytes terraform/terraform.md | 458 +++++++++++++++++++++++++++++++++++ terraform/terraform_logo.svg | 7 + 8 files changed, 648 insertions(+), 82 deletions(-) create mode 100644 Makefile create mode 100644 terraform/favicon.png create mode 100644 terraform/index.html create mode 100644 terraform/narando_logo.png create mode 100644 terraform/terraform.md create mode 100644 terraform/terraform_logo.svg diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a7750f4 --- /dev/null +++ b/Makefile @@ -0,0 +1,3 @@ +start: + xdg-open http://localhost:8000/ + python -m http.server \ No newline at end of file diff --git a/cicd/index.html b/cicd/index.html index 8f6cfbb..b84095f 100644 --- a/cicd/index.html +++ b/cicd/index.html @@ -1,57 +1,75 @@ - + + + + - - - + CI/CD at TrackCode + + + + + + - CI/CD at TrackCode - - - - - - - - - - -
- -
- - -
+ +
+
+ +
+
-
- - + + - - - - - \ No newline at end of file + // Optional libraries used to extend on reveal.js + dependencies: [ + { + src: "../reveal/lib/js/classList.js", + condition: function() { + return !document.body.classList; + } + }, + { + src: "../reveal/plugin/markdown/marked.js", + condition: function() { + return !!document.querySelector("[data-markdown]"); + } + }, + { + src: "../reveal/plugin/markdown/markdown.js", + condition: function() { + return !!document.querySelector("[data-markdown]"); + } + }, + { + src: "../reveal/plugin/highlight/highlight.js", + async: true, + callback: function() { + hljs.initHighlightingOnLoad(); + } + } + ] + }); + + + diff --git a/index.html b/index.html index d61f05d..0146562 100644 --- a/index.html +++ b/index.html @@ -1,38 +1,43 @@ + + + Apricotes Presentations + - - - Apricotes Presentations - + +

Apricotes Presentations

+

+ JavaScript Meetup Bielefeld +

+ - +

+ CloudLab Bielefeld +

+ + + diff --git a/terraform/favicon.png b/terraform/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..576c5402f01b84b64b1d93c42bcd19a622129e02 GIT binary patch literal 1104 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081EWrWPl)UP|NmqBpT_#W zi1B+0MA3dvLPKB0_&ozM7#RM81pPtc5kS)aX@b|Q(9o++PFth>p2mXIKa2By>gu}D z(Q%W5!zQ4zc;Dxqp4%W?2Zzld?S4-~LmxXjZUicb^?e%a59I#0v)cfajq`m5QsDmt z$gsBunb6PxbPQN9;4zRJ?fEv=56FEM7x)B70uj&zpcZ@k&554RBmD1x1)l;{0!3m# zhCho6cnnkk5eW@l1$1P%*OO?FUXY-(^G2|ZK>tET938g+&5RFtX>Y#;s5m+ZXc15r z=qiwc(9pY4UQm_5fRf&{vL>4nJusee= zV})qcYM>x{iKnkC`$HC1ApwEeu8wg)Jq(^Mjv*GOk6yYNbjU$~^}=e7MI0PE@;eqZ z9BWNz;^xxQ;?jGt@Al{a@{S6rTE&e77kSt3mI;h`dBh}RdX@Ck=I}luo7{c$?kr9>MH3ubGYp1 zTdbZNZ}DJLo$9({uO9BYxaVc#?N71)qjvk=+rH>6``#Zvo@_0z=DPpc`^VMa2LF!L zRJY4a_*bv+e<8yKJ5h!ozrq-P?@D3#Vd!JIVcqNNp(PA1Z)$V|*19YJ29IiqYeY#( zVo9o1a#1RfVlXl=G}kpS(KRp)F|@EUGy@`S10yQ~gQmKRCr~ux=BH$)RpQq0Svj)= zs6i5BLvVgtNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6Hc~)E+#p3EnI$=?4DLnwr3KUE zm3n}};Z-3KB|(Yh3I#>^X_+~x3MG{VsS23|CCLm76>}bc;^8O^)6h8OfBKB)(;xZee9%@5v&}!U`@8CWlj)l{bedoW618#E~;cWR9?(Ztz&(rN{6}T(IPmlj&5T O6%3xPelF{r5}E)~F}WE4 literal 0 HcmV?d00001 diff --git a/terraform/index.html b/terraform/index.html new file mode 100644 index 0000000..266390b --- /dev/null +++ b/terraform/index.html @@ -0,0 +1,75 @@ + + + + + + + Terraform - Theory and Practice + + + + + + + + + +
+
+ +
+
+
+ + + + + + + diff --git a/terraform/narando_logo.png b/terraform/narando_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e26114ae6c0067a008d3b40c7a55accfdfddb6cc GIT binary patch literal 16661 zcmeIZXH=6xw=fz7DbiG=g(jk)AU*UZQX*0#h)6Yr7JBbZkS0};E?p!@m)?<%2m}a4 zsz?t4O7DEbTh4daU1yyiXWjenb+LSsC$snL*?sox3D;DIQ(T2!g+L$_%8wPELLh`t z2;?#c2@!a6TCrLV9tpDk%MHF7QqIwxx@Ug9IO+ySqEDyAZFvlLeoExVZQQ4naX4 zFoMU~)6NCy!DHvl{%;HlX3i)lw1W%U-tN`~Mx=?otBdq)K|AQ{%>HwyZ?Ej zi-CX|2@NMS5DL;p!5-ymYi8%7tRQ_G{K9LBHkIIqi2*K(!uUl6`9;J81jP8ogv5o! z6$O+8VG57Lg#V4>zk^j25Qd4$DT*k_@e2wFD2hE25EW69Q&f~!kP{aLZ~qOeZ0GEP zv_qNwdtNk{_g}EW|0Aq~yptKy#okHV-rnZl8lY)u?_%$4Y431LUQ6WGJvAf>ZFlkF z{)K@4xn2b`C$yWHsgjeu?X7=sSOWduP{0q?`u|?Jg3==aF(si#iVE_8`hUWj{%^R( z2Z-UjP>=tIy8QbU(7}t3|E2uk%YT`VnH{hhCtw^gGW_yc>b2 z4y&`@F0WT&P9{ROVZJLa(w*Dj_Op2-kDlU)hi_FJ7~rU~i%YpLK>{kT!CE>OhGXnl zTy1dc+0o&3C@r|lNv+|v-9^my(5--OIR(mFl;i6VNXt_~ic%4A?QZy;DIq*tUxq(2 zGW|Rkkr6JziO)e;T z80|myJOg=xZRmg7C0gW~vlZ@BYCUs{|>sloZ@W zaW^|Ia_cnY=kr;T0@xq`dk}?5=dkID!h`=0n;{Vk7lr z8cu5w{z*hg0^HUNtcD3cRspc$ufzDCcn&uCM@krR578iGEzeH+FnlaK+b6Shg{4s^ zMW=HSXUAa}REjKX@`HCtzS8(`1nUsUQ8Dt^7R;2al{;>|YvIu7hU+Z~%Ef`WX$?hR zSqj?v1}-aqTrkb1Y$$oP-I-4+MqiORl?d7Hn>wi<+0#@bh%d=8V%nAFQv?A>1=~`( zNV>_L?Z=MSllF}kS3P)yd!8)=-3`b1swH8~tD__&@NNiq^`IO!Co#v<^o=~9*WD$G zY4c`);fo|t`cI)sjSsB!snUB#5a-uj{h+T&jMam<%@zXYvRT&4*A%DOD53+C-b}m$ zL>NAm9mUm%;Y+fOSaxms5D>_?m>fY{EN5QHlj$Y{Grz0_*Bkv|5<>X4{8RWn-1{+~ z?n~`K*?xENiNi0E1I6E7wK->>&GZ7PiYQ?p+Qx)=so|Fn&l44W`SHGpb54qA-I{N_ z(jWW!n*1I^A3RCcXiQr9xqXm_$%CJE^Im}j>|Tdy4hv|G=Jugwc*6iv@qT)Q2NwskjBUz5*s zWpHhOht*temxUV&{_5IZ!0g{mY$k*Rd?g&ZPEpvp2|ry7W0jZT`E>D% zGKfU2oHfs?LjBn(cpXU!9KCRc!#}m(AbOB(`EFMrka-XzvZN&NMQ9jXn~#uky}S_m zb>%lWY~czt16t{?5Hr`)C)SiceF@T1a~!`jq=w=V4-Ye>EfKma*NIB7!QS&Zm1nt*!n%Rmp!<4a7eD!i_J> zN~aSf8=|aV|E#emK?ME!Z8|5O$v4feiO!!SxB+9Fe~5k9L_QmlVghW{l${(MdJaS(eLh-1}+6dZbOE@&Ke zTDOS@rJe4BKE_*GDe3V$vz3c&3H8D@|)3UxKVKM#x2H zbSX7@hV55N;;U18m?{j7WEYsx4!E!UAEu}B#(-aGoC^#2>!gjFrTTle^_F}97M?BN zA2}i3e%xyS1~7!3Ve3)cvb7}hd%7?Xi#_F_{V5dgQC{&?1Q0A;V94Ln`}lK(>6aw?yMHmn z9Bc&B32h;=QC?fI8+^uFTT~bLWB|U<<~Ma6*EW{P5M6ikRIsd`b2wQj!2fc7MvoHm zaEugsw0RxTEdKhqRtle(!;5qBS{fMs`Q&CLGfO46)uUcOx}cnV^I|ZovCzlx-t)+m z5hpLM68o(nwyA;B>@&^!e~$29w1>~W4{`q1F00sR(7ReTpd`(U&t{t%i^$o?UjzwE zd}dbj*5^YihSt*)XD0@g&NlCyXpP+%AQy`0YnLGb>Nj9JW6JV1G27XGq7*tSp^ksv zVwRQqo;PJQU_R%7^ljyioV@Jm6I>(LY*#MY;ohO&y7~783H)^YCVNT2mgr0lAm%o! z$?v8XM^M!;a=fxLY*>9 zyM@~4H{Zxc)Rnsd7T*mF@$=M%7A9*ByJxd7?fQa=7IVDLo-ZDYap5aqA5?IcArG$y zhMd*7;UWMzBZvX@w%T@97daWVRf71<`6QSw6|i~!bc9KCA;n<`78TLoC+U^KH%Y^QM^Q@FS|C5VOY2tv%K_BC;kxWC1C( zZu2d|y{P7tRq-@Ur0tCi%dS1Z?(a2A1j$_YdAVNImJ$wE6E{70r_=UkDMvlBuHl#O z6sP!S;4%}aVJ?$Z=D!dsO_7VN)pGRw(} zGPCS9yqP@L!KqX-jIJ{x_zG%H^_A4Dg&+{yJC-Y-iux3C64H9^Q z0^~}8A$DFS9k$Eig9VlJA`gtARZEM!89$|&AORv8kzO_(>*s2?XA|U#4O|qX zHkdh)p6pnVn#N{kd2hAl&}yx*yPQ<5K!k^L(J>|*jDU_!dt&~dUP{HT~# z9^r``Vbz(~Gt6PZbO6}!%q;y4n##tZD*q${^ku69J>2Z`sWayadNA*Gm`krS*G4(W zyan2eIr^)AKf2l(5z zL;-j=SS6x9Wq=qf2^ju6uj~1QTYA#(;)->j`~CIfzC~`QmyZt?(WSTMXeMe4eSVB5 z3O}20&1Q)+5GI0H^%{Rn({s>It$Z)zgjWy+QED{4Dvd6`UOVDP04jUtn(J$w!h6J* zDlaEnp!p!$)kQz6M9`eRcP&>!W{WDOeP#}ft@y4mvF^Tt)lA)1IhMnva@iiUAl!#c zAQ&qhvX^FoA$#>GTpM`HjJ_uFko2%S#2KhJP47|So6Y5zF(U{>Nezqj>rztFp4juQ zOl&Qt+pWUXqdVU9N7fY%Rc+=qf?$`DnRU8hjIIa!6GQL(pLOWc$3t)R93OkCy&ro% zvF96C2~sM00Xg~O>AWGgfvBUZy{A2m*)vJ6DO5aBx$7)6uJ-F!ATQq&Qmj|q9nm+i z&)a+YqG`&+=++SWrtF$D+Tp4qMX?MB!jDOz6YKX8q0h!Q;BmVQ^wB5lUPiaJvh*A& zwh??qK&ZK2^%%fz<_1{Xw@Yo*U~LrWQY8X%d86{VB82gJ_^MNd3(~X!X}c{?CVkH zU_ybcAUU@zE%PMd)77nR%?!Kh>t^kK_wnq?@y$iyOGw(YkZN&KS`hW=Cj{O@T$9 z*UsUxN`F)CP!+4a$0Z2A4Oo$SomJsLET_}#pphO|hLWQjbhdQPHNMK*1vkI|l!QDE zpkgsV*V~Wi>1{}$OCK(Xr7OK1L)Tzh-D1M(a4y+f{o-( z=U3g_Lq9P&&<%54FqbNrtJWI&nj&|xciC6Zdo>K6_q8>5pT2zg)E<59YJwZ5{8dN* z@&>G;S0KLXI0RErnMm1VP3Ch4KZn}+Fc4N((dxE|68kqU!`$`s+)5WsqjEOmDCA_4 z)NJq5H14*ke$C5}mq|dTUvgVT_@a+$Mu!mMHV2_gZcN{`$IYAY?T8S-qPE+XmWj}a zDqr3aaVEx)yL{IUmtZW&Hcl=ZA-+P-NF*VorIZ9Z!R|lr(R+2$w|sPnAm(w@OOy!P(%$K>}FcRh?{5y;^7^4yb^7o6$Vsf}` zoc(i^$s(V~P-JeBDWtzZrXE%lvXirdtuhE(Ec>5J`}lIdn#5u`#cjldcisC!pmRTY zvhD0vfYy@(trx3m6_Nd1w4*JPomE1nuvF0g{rULDDLLamF;I%Wse2Z@-lT86TGpV` z7CQWLJw)bE3HO}aX5TJ^9MA!DGt^tbu%y*ZHmh>SK;}zU46<#R%VzjG*awhz%;{mT ziWZdiZNhyGtr-Z&tVKXUhNxb*bRP^E8?ES=*2PKYq)Nz{%z}e>T~gGO0#f4ciYKNqK==`(f(nB}c%nHJ{q)i+FCugEFy(8btjnlO|>4#gz6Mtp-Cs^hL-l*s!+x^0~5lr&6g3^@V;)ru4g)VT7Apm*1FeJx`_GchG>#{Ny{s zHhP$pqaRC4d4?NpL`wJ$-kG_eV`LvQ5;-`>(xCs&Ty*BEti~3VH6*g!v)g`iH=V)ucdaST9pWnA;ktZ-G{Ta21D2NXV zW{ybLQk$fLh7zYV^|{pe_cpTrwmhmg>z?1vk1$%UEvb)VXYoRt`1u*pDRHxY^YOzm zliBYtA~>TDYNt8z>~4+)(&G3G5U!}61ldC-?r<(~D)@eBJ6^nmV8xV9&qjLLM#xm~ z;S$mt()+_E;+6J!Og7e(<rYO}K;bA-TjqUjXLTZ{2oltu9LbD$gil*t&uD?t%)Sa&d2DkPxl?{oD zq!y_J%>*FtUC%^1Q}cd!Kf(Hu#d7bQ_m%v9Exvta8Z+d^H>B4&4m{b|`pW#d9Ihi? z#wPN~nWpy=y-&aZEhRcbnNk0tJ&)UNO-wm@K4O{qv#~F0Oy}!;j7THA=+5SVbl<$y zv1yG8TsjTcV5Gj$JwJn!8vU_U#%}qNz{+s)>{zcisW&l7IwuF&mYd%%LG8{sxGgTj z>?Kg&)JvV9@o6MYwt0|hCDm)Hi>Hr}pY>^dE!IP-Y#BB1FTTY;AoSO#&Ru}qCl<|f z*=c;KwLQN7aql&f1S+x20X*B4qTrp+j zR9hwvZ>0t`d95sSrw2`Tacj2&> zKu{5I!woWfPZ<}M_UXf!1s0YC(vHewCzNb7T0?G#2>VVUrA$;^j-;*T7~SCl@8k9j z&zy2&;L9IAd}IFF9!mmM+GL@rN~Wr<3b<;p?YcLID=I|-hqE21<<7LVog{MNXJUOr z2b?q5q)dg>hin2FJ;0S+EMbLZjVd9M?unC)|{-E~;x35CbftR+PaB;T>Il$L9=G%Oej zJsYs*d2pZa+K=E;HsfDgZ>~-@ma$>4dj2g(+m4q?A%7H6&{G%r$LNVw7_A9ZvNIu}>VQ?Dq#p z$EWD|=l4_eb}rf1)lSP~m&G=ZKzET9WQ|5slRqk|dPj;Y^MpDT3cA{Bn&Im#bJmU; zS_SK;RW5xwFKLg`DWLj$p&=j{&3S$TYD>U*So|m>C?<}89&6x*~90z zEj@nAv4&ZU3Vh{3>uU|moBimn*0!USt1!*h#MqLtjw<5n4e5=WCDR*AZN0^BSl>l! zoEk}c&$TVN3=iz4_bdR*Vq@H%*d}e{joF5jm$MQ@FGCuixI1RO@C!X&lYY}qbH9J|xQbrjVGWhvAiNRY!3M`$ldeGKcsX(Pn zw>@hP%Z5D%PbEjfa7ey@Kqo4j0w}EU=+V+?g?YAwq%OOz-(Bz7-mB7&X=HTWj38ua)|)G>gXPCsPsheEv8EAo3B4r-IrQ z6m`6BiX6oy?Ui+ohkZlQzSvS2$fiS`@wo-mbXl3M8$v{?A@j z44T#2VBhE49~ehu_}d0}yo~K_)@ebZrIOI0IW?m-lPbjldy#nK7Tk3To?Ding#ROs zXv`_^yJ_~vK0PbohvofaQi@Ca(okm-Nlz9_ewNh-50vkqCf*VDvvUG~DBoBy3L{j9QBv_HMx$!BT0Rk z?$su=TtfZq`gGOa{!_<*>!-y=R1_G|f;rrSqOvEM`ZVD^f6VQP(>G@l_M%;{U33jF zBD{PV;6m@I?CY>vWDoYkE*b^+@7pB~&Gp$3r*GTzdUr#aim&jG8qw@J+17;2#&{Kp zV7IB-CR0+Z>_kPYQ%6gqe8SewKJ7iIGdvIi8HRw&CL)*9rBmfFz2D`h_;Q!WmrOY< z#AS9j^;cdr?y}bbQp|r`qA7n>Se+&Di|b%UjO2<18Ch)~z>xo(_^LE-Bx#*2GNWvb zY0nrFnr9sZsJdqj2T|Fsdq0&kbTU=1v^rVpLsR=5lL5JN7N9!;PUccdAw5tKS~6Qj zmMdtyP)%SzGBR40tlF=XCJ{)w_;jm!no}t)nP~RQh8;%(J#{DH!vV2uWQ7c)YdP?S zB|xvHIPep})rYRO>y@kKUq<(Oy%z1OGbV6NO9GOKqe=W6b=FVF0y;nt5(eI5Y*1$< zDu=59hH2yS|3qcB@QIFQs3w9MN4_C+f)>#L|iW?mnjEcu!CL z(7VrVrEH_D{zwiO6)V`k_#}PIymTalzPIi?F+rB9c29rhu;37|!EbwZ~ zgIKD(R813Atkz@&q)r2XQpZ=J*C|#)t)wRZ@0*i7KZ98zShxN~ z)}oS6Uk8bEIjQ#}C9I{JJsfIc&%I4r4TzN%#=-2W`jXaNB%8;Du4gmaINJJtAP3!? zRaniNt5^i^k4Jh?CaACO+xaM4)bS0g#`z-xe zg2(E)P;#N!dA2e>i=*Ih(?I;|g(~Flh$X8>TVnpE3rxQ1daMCfy7msEp~$S|QE#nh z@KukTUq>eIN}7vL?)rvpm2^P|u#T@p?~PmrUYDzDOrF)HTX|BwAOJP^86-_rEncOz zP}ua^lNOD>zGu>6Kf#h8d?{)b(Xg(veuM@ZWuv_+AXJpw5pyFM-{O1${P$J4)>+OD z(em>0W)i`x5u8MI^MpU%fXvI9JxibRo(`gtGW_gwqs3F8_IjIG9bhV%xpHj@3z(29 zjbB~60=F$!A~zFfezvzO$Yjse@p#x7NB4|R&hJ^(Cr7^~7D8BzU0wCt>XZ~eoEO&6 z!9WYXEED_XOHV832Ia+7-~c1;+1SsmtHpTA?nfeJ^Ymxr2`SRH!hzt7^yYTLqj-PU zeCrvl&h`^NnG@RC$i}DOrfc)t zD>c5(y)0uz+%`g?f<M| zA1!!1+`k-86U~Q+<*Da47#z3b zY0mmEtV>1Qw)@ne+D$W}s|#ZtDfN!@);qfQR)mGk>1nTbC&(WrF19xIf_TzluGWx} zuK8o{`V6)s2OMMKF>wwhLrPApodI&#(>J7-{L;H;Qvw{A<77Ac;Ps_8yn7^C!vX{~ zm0qt}_ITNM&YdcbJD`%RQv*D`eH!NxahiyuE|l=vA)kG7=V^vNXUSbhMI4omB(f*2 zD!41wo=PCxTM<{D6AdHB@N~}hCSIkcHC#suJ3aQ^#&`>(M9)2kp~f0?A|<&#E*+kT zL_V)RoS5scKHG^a$N_N2@NLqwj=xZTWBI?Qi*W_fJsKFuCtW&=YPI6Wnm z0F{={{1-n{sijX#!m{|`du}@PoZfNV zQIcHho;x!ac(KyEl`4EaaIh(Z=3|+gg&%Igr$@H{NiYkwm z|Ml|)t&mGJ9aFw%FVGGO{ZG$d*3J$@6!^ioV)kXb+2nhO=_V&{R!Zaj71zVP6oOei zqFl#R=hki2)|(O}Itiz%WJivbJhg<*s-s?LSo^H`n?Tp^-;_-0!Uh|$S*{fJYNf4B zvPypJ@=r{nZ?vctJ*647PKr>TQK2B~UQ$ukriBJ0aT z$pBQ8uQ}5sb%MGnin=GhJh$e=ZJsq zgkmo;JojRX9vd7QoGHCG|E?Y-Cu_}e_Z{a+8@a9e=bM5banY`v*I*U>&%OUJ+1-r$ z;@-Z_oNz?ktBU6h&p1s*KD?6ny|1s4huARmvl$c1{9zO|HMRSi9M#sNSXus?61JaO zMd&~tKVc2Lo_31nXjA0j9!yu;bDy4&Qj*)wn?9>g+nF`br2<~~w&T|1{8YMBOasKs z2)n`7$9S&Sz=coFw}H4l!&&DnQIx57=TS)IE_e^0oSZO@3iQa>n3(*^@Y+Ehmj{OQ z7gYXvk*=GbOf<$cz=~sby708`zceQwqzS%0_OjB-6Gm0V%)3>2`e_tZoCae#X1j_5 zHw6xH_&6?^jVpO~^TMw}#Xb%w^yRWJncbkS$Um98!{ISGc2ID5!#^Y9s3VYylkaTb zcv$dxN2cqhaaO3ivNV3pGel>306`tabBv3@8vkpSH=`uiHJl;aQ=?&GnI@bwTBQ1-?Gju`%mS!O*c zH{*3rZVRBIrG(PkKkxF;-(Exk-8jcs_=Lv~-!03R zFETXR>Yui20%N~I(KnEARLMtAbkhZiyBm7+Rd6kMN(A38z1H?4xm0Nv ziK(^ljWWdPpnfdwo z8BZD1b{h9y`k@dr;qZcLR=@L^jE`%^MP@fxcJzEg^Lwr@9U(fb)7E z?U-_KaBS4!?p^__PyAd0NMj0GE<%ydR9e_}ucaHvzFX03V~VCeG_oL3sM^&)yKZP4fAP9eQfb-sn3v_sraJ5uJZL zGq6(bs)R3c%U+NO@U>Sf^l`#rnhqHBt1CL*mKshBd?1&$g?}-Zzb`rL!TjTv=?aOQ zd_Bh`UAwVA!XhAWQ;1dapfSW~JgxIM_DB48C^e`jxjz*$?>e;n;A?blecN>98i4q& z*l5fc@TfTYC{iRzH#&;}bs3c{gmTk|&blg@U)|qI&(HYU_iCwjeec~WrCb{cv(?=b zQ#sDe4-wf-xfCdYG8exyjm7hrexM+rz{=n`s|r6oqmP~(qF(laj%ec;r166cea;i} zxkEgGA=mXxq5?JWkupkm9D3t197{A!ESh z&AXecFR-OQ>TrNG&(naIo4V~-cJrn zP3!ZmYK%Ef=@J`}GB<9x3e_!7zzRIkJ@v&RVdwvWjIMozuhSI$%$0t9<-zcAkpM%twXn;nDgHz@u+Q3OBlTCUKVLlAS3i2!44*_L1I~q0KXu&O z;HrH(#DL-aCTOBqm0nrY|K++@Bj5CwO4O!%^ODe^Z&Ax}kBikZ8&)z~ou@QyIK_74 zo$Lb3?9`Hx9lmA3(Z76v&T7;H2I>SeP4J?Qo$QI3cbZ6~YCo*nHiO^Z&gh)XcS^9` zs1N2^_fihq;sDYz)NKdk)QmP35*Xsz)O>=RYAC!SN3bqDf^*q6YAiZDo?xBW=RJB^ z`v>WBo=rLtX@~-@u5hsG)2EclzTmF)SBmqF1KEFTo8j}$RtQ$Q8GKx zJJ!%v3_U{}hJ}P$Uny0$u)f5dWNTGR)iZo$BadwMH&PXA>pe6Ck5d({)HxpZ;JH)x z=Sa4(WzDZMRsoBBy1l(^p{lA%0u9)$;h&N3H^hfVTegHMMv`_qT#g!(mS6a@vv<_o zQ+K)Ls6i6{#1=Gx-6W)7cfs`b^L!@zmEj|o7~tAa{h{{zGg}xqkNXUc{#;#gp%s^O zL#Zr5^&scACB4};a3@6$pLj1>?*#iO;GE#9mmm+-XoHxtYHMrb&wA=X65@Ze8jhze zg#wc7Rf4$3K%?_xvFxnrCYoJwTgd3ozTTpNmr{ zQ3TW}o`5qtNe!}qXGbwG5^yN@(i9Nm9!(1=0FBxH#k^pM6_|7V<4fW5-}4~q%7#rc z;^|8R_pL7oT?zw-_EMk?M3*^F51ey4UD#%yNo-$Wto<0z%PVvp-W_z?Z=Z65?oS-( z(+JsDNM?rgCWqHO0h7@STfDto!C5g8Uc=4vxPR5CF3%YMZ8HF8U6!S=VcE;i%`l3i9zPgHz~tJ zKd(7;JLG~jVu?V*!@(1rku8K$L{|2EbcC08&GLdN&Ul4t4r+_`J9Ft0mmWCvOifKS zmn_mzO8(|IB!FZ>;ecsYyz=gvjWXg=(3+*=Zv9_NH_||h84u`d**b*Pyk>3*Y)<{~ zLDl*`X!GsKr)IB6r#iV1$A_e(1C2W3*Cn0atv^~p%b=d{*hrvVxN^s2oQm*eg3WEv zX7+Fr?8nSOa*++X7O%84OQe8)nySB~mEKEj^_7=8&!T=Zg3Z)s_z*Y>)l$J4nQlSG%(D=21{EXPTK*pwuKj*DvRsMyRZAnl_&X4x|;7>RICH>O}sOH7!>D@D+Q?n|(w$)H|p)A=TPd`6>NO!9I`1lruXh$^k#&)Ur%D+NG~BW$5$@6<6K&NH51G* z0movgX02D}kNPG2EVQflx=b*(pV+N^1ut1>jo6g)GB65H>bmgw&#fhO~O*T^ngH_qT`=X}-&G!NU?R`2E; zMkM>$+SzUR60J^%_qn3}o+l)T)djlzrkCnsRFvi^IwcA2HIX`ZI%}lwZI*d6rqy6{<_;xv zr}YPTg*Xz#U6N?^(Eh@*&5H{Q3-$ARyz)MlhhcB#f9<(-uMO`5f#(&`Bo zINP{ZomjF;@r9w+@p!1_Fo#WMCgRub&L2!;?(_R+(&L(Qz_ zsJ~ua7>o7{S^a}KL)zWqaW|tH!Dd<++n7rb?2myN^|Y0QXXz4-QQNhtz2IKRna6%j z<1tus-Plr6YHDiC>;PM59;$x1#ATL@txZs*Yfpx@*;&#%al+)}%x$W{s&wz-q? zuf$Q0ztXgXmCDKKZpyjQvWk}s>-C+(@qQ{QKi`raFLyjpl0YIQ2H45MGGp?G1y|aw zO;PymLXTNu*_o5_;7VwUeFqx99q*@ro(S4xg|lS zVi>r~X&>DRV0Gy-KHj$y4t={!YJe*~m`AxpzHRucrrsn-QT+bP++W~wnRYz&$?loO z$9-8-YUIHGkmw{~rrkZlz-gc$);!ObfNIIB6BPc|L8U`s0y0`{GsfKNtAo~81jezVmh!hTCo;ko#K_I#RpImYbwZ25t z2RF>3aQXh>!v7tS{v(i?7|I$S9LM`LmpbP}SB$-ME%^~-oFVVmc+m^14kG7&?pj_P r5B=vJDX_o)T&?}z-8Mdvy+j0wl=!ZXN(dCVuqb6kb%o+bF9ZJ%EAxHA literal 0 HcmV?d00001 diff --git a/terraform/terraform.md b/terraform/terraform.md new file mode 100644 index 0000000..3450bbc --- /dev/null +++ b/terraform/terraform.md @@ -0,0 +1,458 @@ +terraform logo + +## Theory and Practice + +--- + +### Content + +- About me +- Infrastructure as Code +- What is Terraform? +- narando Backstory +- Terraform at narando +- What is planned? +- Recap + +--- + +### About me + +![picture of me](https://www.gravatar.com/avatar/b1d145930b4db0d59a3d40df3688340f.jpg?s=200) + +Julian Tölle +Developer @ narando & TrackCode +Backend Development & DevOps + +-- + +### About us + +![narando Logo](./narando_logo.png) + +- ~ 5 developers +- crowd-sourced audio production for blogs +- Node.js on AWS + +--- + +### Infrastructure as Code + +#### Domain + +- Provisioning servers +- Configuring databases +- Firewall rules +- DNS +- configuring and deploying applications + +-- + +### Infrastructure as Code + +#### Before IaC + +- servers and applications are configured manually +- new environments take days/weeks to be running +- copy&paste +- search&replace + +-- + +### Infrastructure as Code + +#### Definition + +> Infrastructure as code (IaC) is the process of managing [...] data centers through machine-readable definition files, rather than [...] interactive configuration tools. + +From [Wikipedia](https://en.wikipedia.org/wiki/Infrastructure_as_code) + +-- + +### Infrastructure as Code + +#### Benefits + +- automation saves (expensive) time +- avoids human errors +- easier to review/verify + +-- + +### Infrastructure as Code + +#### Tools + +- Chef +- Puppet +- Ansible +- AWS CloudFormation +- Terraform + +--- + +### What is Terraform? + +- open-source toolchain for IaC +- declarative approach +- providers for every big cloud + +-- + +### What is Terraform? + +#### HCL + +```go +provider "aws" { + access_key = "ACCESS_KEY_HERE" + secret_key = "SECRET_KEY_HERE" + region = "eu-central-1" +} + +resource "aws_instance" "www" { + ami = "ami-2757f631" + instance_type = "t2.micro" +} +``` + +-- + +### What is Terraform? + +#### Resource Graph + +```go +resource "aws_instance" "www" { + ami = "ami-2757f631" + instance_type = "t2.micro" +} + +resource "cloudflare_record" "www" { + domain = "example.com" + type = "A" + value = "${aws_instance.www.public_ip}" +} +``` + +-- + +### What is Terraform? + +#### Modules + +- `*.tf` in a folder +- share a namespace +- input is called `variable` +- output is called `output` + +```go +variable "env" { + type = "string" + default = "prod" +} + +output "public_ip" { + type = "string" + value = "${aws_instance.www.public_ip" +} +``` + +-- + +### What is Terraform? + +##### State + +- contains all managed resources - "why does the container not receive traffic?" + - might be AWS specific +- + +* used to produce "execution plan" +* JSON format +* can be local or remote (S3, TF Enterprise, etc.) + +-- + +### What is Terraform? + +#### `terraform plan` + +1. Verify variables +2. Load state +3. Refresh resources +4. Diff state against desired state +5. Plan actions to reach desired state + +-- + +### What is Terraform? + +#### `terraform apply` + +1. Load generated plan +2. Apply actions in sequence + +--- + +### narando Backstory + +#### Development History + +- **2014-2015**: initial app +- **2016**: Maintenance Mode +- **January 2017**: Rewrite +- **~ May 2017**: live traffic for new services + +-- + +### narando Backstory + +#### Initial App + +- Built by previous co-founder +- Ruby on Rails +- Heroku + - Addons for DB, Cache, DNS, Logs, Monitoring +- Only **prod** environment + +> "Let's test this in production!" + +-- + +### narando Backstory + +#### Rewrite + +- **Requirement**: multiple environments +- Node.js services +- Docker + Elastic Container Service +- All resources in AWS + +--- + +### Terraform at narando + +#### Initial Struggles + +- AWS resources managed by hand +- scripts for deployments +- manually duplicating setup for **prod** + +- + +* new system went live in May 2017 +* modifications became dangerous + +-- + +### Terraform at narando + +#### Rev. I - Proof of Concept + +- one file with all resources + - ECS, EC2, VPC, RDS, Elasticache, IAM, ALB, Route53 + - each with 1~5 TF resources +- only prod environment +- 554 LOC + +-- + +### Terraform at narando + +#### Rev. II - Adding Structure + +- `modules/` + - encapsulates concern + - "central" modules like `modules/vpc`, `modules/cluster`, `modules/iam` + - "once-per-service" - `module/service` + - Container definition + - Loadbalancer Target + - DNS Entry + - Firewall Rules + +-- + +### Terraform at narando + +#### Rev. II - Adding Structure + +- `env/$ENV` + - includes all modules + - root for state + - difference between environments + - **prod**: Elasticache + - **dev**: custom Redis + - same inputs/outputs + - can be easily swapped + +-- + +### Terraform at narando + +#### Rev. II - Directory Tree + +``` +├── env +│ ├── dev +│ │ ├── main.tf +│ │ ├── services.tf +│ │ └── vars.tf +│ └── prod +│ └── same as dev +└── modules + ├── cluster + │ ├── vars.tf + │ ├── outputs.tf + │ └── main.tf + ├── service + ├── dns + └── vpc +``` + +-- + +### Terraform at narando + +#### Rev. II - services.tf + +- one `module/service` per service +- similar services + - db + - cache + - hostname + - container definition +- different services in **dev**/**prod** + +-- + +### Terraform at narando + +#### Rev. III - Splitting of services.tf + +- services became more custom, more resources +- moved into own module +- 1 file per service + +``` +└── env + └── dev (prod) + └── services + ├── feed-fetcher.tf + ├── feeds.tf + ├── notifier.tf + ├── narrator.tf + ├── publisher.tf + ├── vars.tf + └── outputs.tf +``` + +-- + +### Terraform at narando + +#### Pain Points (Structure) + +- state updates are slow +- infrastructure is seperate from code (+CI/CD) +- not all values are auto-generated(/-filled) +- service definitions duplicated + +-- + +### Terraform at narando + +#### Pain Points (Process) + +- manual `apply` by me + - repo might differ from deployed infrastructure +- CI does not create plans to review + - reviewers need to do this themselves +- iteration is slow + - missing `playground` environment + - smoke tests? + +-- + +### Terraform at narando + +#### Pain Points (Terraform) + +- not all service providers have terraform providers + - drone / CICD + - gitea / VCS + - pointDNS +- some validations are only done during `apply` + +--- + +### What is planned? + +#### Upgrade Modules to support cross-repo setups + +- Using `data` resources and naming schemas +- allows moving service-specific code into repos + +```go +data "aws_ecs_cluster" "cluster" { + cluster_name = "${var.env}" +} +``` + +-- + +### What is planned? + +#### Move service definitions into service repos + +- integrated with usual review and deployment processes +- improves state update time +- single PR for related changes + - e.g. implement a new batch task (service repo) + - and configure the cron trigger (currently infrastructure repo) + +-- + +### What is planned? + +#### Automatic apply + +- implement CD for core infrastructure repo +- probably with manual review at first + +-- + +### What is planned? + +#### Move Root DNS + +- to Service Provider with Terraform Provider + - AWS / OVH / Cloudflare +- less manual work + +--- + +### Recap + +#### Things I like + +- Exhaustive documentation +- huge list of offical providers +- community-built providers for new products +- declarative approach like K8s +- minial code, all configuration +- Hcl looks like Go and feels like Go + +-- + +### Recap + +#### Things I do not like + +- side-effects between resources are not always documented + - searching in the dark for errors + - "why does the container not receive traffic?" + - might be AWS specific +- lots of concepts to learn +- failures do not roll back + - changes must be self-contained and backwards compatible diff --git a/terraform/terraform_logo.svg b/terraform/terraform_logo.svg new file mode 100644 index 0000000..98a88a2 --- /dev/null +++ b/terraform/terraform_logo.svg @@ -0,0 +1,7 @@ + \ No newline at end of file