From 0d368717de95921ecd2d0343f3485d2994da8335 Mon Sep 17 00:00:00 2001 From: Aslan Hajiyev <126803786+aslanvyos@users.noreply.github.com> Date: Thu, 28 Aug 2025 14:27:24 +0400 Subject: [PATCH] Documentation VyOS Deployment on AWS and Azure for Secure Cloud-to-Cloud Connectivity (#1673) * Added documentation pages for AWS/Azure HA deployment and modified pages AWS,Azure,GCP * Update docs/installation/cloud/azure-ha.rst Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Added documentation page VyOS Deployment on AWS and Azure for Secure Cloud-to-Cloud Connectivity * Modified diagram name * Update docs/installation/cloud/aws-to-azure.rst Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/_static/images/cloud-aws-to-azure.png | Bin 0 -> 30096 bytes docs/installation/cloud/aws-to-azure.rst | 189 +++++++++++++++++++++ docs/installation/cloud/index.rst | 1 + 3 files changed, 190 insertions(+) create mode 100755 docs/_static/images/cloud-aws-to-azure.png create mode 100755 docs/installation/cloud/aws-to-azure.rst diff --git a/docs/_static/images/cloud-aws-to-azure.png b/docs/_static/images/cloud-aws-to-azure.png new file mode 100755 index 0000000000000000000000000000000000000000..5fa0d7ad13f3368f2ff5d27b1d54d3c96fb14870 GIT binary patch literal 30096 zcmdSB2UL??w=NnB(gZ{Wq>F;6G?CsBL<~spT}65c2%$Hn*(jp)EaozNi? zNVtpj_a`k957v*G|1tuFp3d5E^~;t*>ZmJ`Q=16-52kH6khD!Q*SO zsK*Ga6PTLh4|;G zy!{pAKTl;j{4V@`-%sI?I8Wd@4B4dm`)reZhWYQa>1)kmf1mx}4uSlA7NkK2*yqoc z{{PPguYTw4e#oqoGh>VZ)-O=ar^E3a=%=>Ksh|^Pz)|!9C|V45X~mXQ;9C6PgYlKnIB2$+}w(%~j=>rKm3U(El~(O+pTr-%d#-_1~8r z=62-&SUO1I@xPaelW&IE?Vp9rxB`5`viF}gy8f;FUyCHqaqHhJ922)0A@NT`n(qd$ zA_W(iL5J|AG%bpY=l4D4w>x^njx{a(6%A`HDa zJl)bZQcNT4npSmk@G&?_T@U4Acf=|b{KE8dl=?eZ;RVpmd#(Xu=RnaP|1}lv>mMSD zbtY}=oVE(RDbUps2B%-ATf~@J){46-lcsl?V_l13)%W(8HqLx@O`Xblje7UjCp4`l ze`9shL7+wCVdKzsH;RysOjx(xhJ?u5l^V;p?NBv@CiY5z`AtoBSnbDzT#n@g5XhbH zul0j0;v5FD_Op_B7HkJnq5BLDxRnB`nFjl|i?f0TzWHTNU8X3ixHb{lZQaca>RIMA z`fMR-D~3Wkh}-v9tZj>~{gin)HF6Fl|L`h46_?lgg}b8w@8K+qV!qZNGVLvq;0(<0 z)1UQB7v`l1cuLmWEm~l{uN?aXMNm8}_S-|}k-~?V_I$E#$xVMM7&wH8v%9<+1`jAxbjUmYq4GP(m@~6xjqOj>#eS7qRex#rv=ck9B#vylrxfScf zYkaflB^s-0GjZz@6w02(t?aoyBcEoPa9}rK&vI!6Ahg#1Uc!yDz_U96I1xR=V9;Sn-1mIl63%{mW4oP|lwQ&j7pMH+UHfr4)Q<5Ah> zU#?|9IqE?Q75p_1r8mZ(EvTOrh?L1$hv1pn6N{9ZnyZp{1jzT9@9@2*IvBfA2#Vfa z{B|Rj90d9qH?dKk5$40{`DLe2lFvk@1@8&$Z^k&{wu!bc&U|3zic;3`|0c9qt`*TF zwZHD|s&MK+@8J4fPWN2DCbpFVG6Hj@E)pB=I1vK{Wpfgw)QpRdJ2P`=b*o-|cBr<6 zg}~cHtP)ppzc^TCa)9K|0|EIagOiuaPU^_hjj0=_FQzAJGD+wab_PQ36nj+T+;ma` z3@m2V+H1n5ZnV5r*x3bvqBF7s^SB=NB|FrTp#5BFTXbh%>qXQBH&X2g-#^5cOj+LL z1%Yw_59~R*1S+UFiA-#ok!T{h_N-W9qM2RN)N_+gCOz5rr9XGcNlW*RA8&<~PpzvKl`k9E}h*&RGQMIJoU)eMC-T%H!+2Q>rXzV;O;E%l_I>-)hH;{}#prBP^%J_5rpG?f)A7wy? z&tk(I*5s7czp5v^+CLA9W?Es&1~Odx7q*AK=Rl>p8iCJ}J%k;Wy>C}chZ!TJ=A8pq zMG)k7pCSDzNME-XLGzN;?uo2T(E+K?M~`YXEBDACVbU&^VP+gBVoeFUX>ggQ#}&h#8DkWn#V(x4K8grsI#_@o^0jm?58K{S{dcGKa@!r zkg0ApyC{kMTjUF-{APy@o0fmSelwQhz8@aPQioZ4KQ;&{{(R=%*l>EM`bS$;fRii{ zWXb31vQ8>jnY-2k$sb;@5FuQ54%9(Tat&#AD6_QIIQAkro`F67Y^%B<{YDHChQ4|> zGT^^^l6tLT`nWVEI~HDLx0=vo56sxP;kUb+CkRw#+!O-g_8+6h)^6`(vym6pD5@d7 zrD9=OL|0nUk+S}t*68*PSSBc77~Lwl{UmzXD)XUrvrJb+9L%Ff(AY(>=tvl7N&is@ zb(y`!fR8p#-%>VV>xQf;UAB(YnSbtMwKpQS)cCL>>0bX7|H}LJT`+)Jq3RM9Hvp8EK?C8 zu=$;wk^0zw97q?59OYWT%*_5~m=cw$I4P|fxm$pnn1P8(`M&JFA91VyLQu$@|DmXR zx$trKpt(VQ+`E7aYyD0ek(-*sx_Unv@Tvtf#sxEtoCkJmUKnS>&QS3auz=}GL!(;? zgSo4S^Ov*LRrZM~C{)?26<q}<$Ef#Wm3A0o0 z?-t2g3H&&n;I_`QJ*#rk9%_6W<@waa6it62s)FD+#^gN2GswSCS{k_Hf$!^@-YHi* z-dWRD^G~}t`&a-xD9ZPmM#jGs{E=%( zmD{213fRYFuUA5{gmt2a1KxY2yw_N*`$j65ooy=6q}^MZ0d(bFNsAbXfuP#Y{s9j| z&!&S_`zoxdrQE^$v3)dyUmx|1Pc6lAWFRJUn3j9o0&*G*A0lr#qoeNjs16nflctnZ zfzwx`g*BNT{&IdDS@b0bOfxo4+cYV+4O9OjynPGbr*XzOwk|tLX5f3IG-IjZ^Hfss z(0}!HTBDlJ4kLbs)*$>qisw)g!%-CF$`9%{1CoKfvzxwH5v$v?$N4xzmzH1szbPv$ zBL(ZYz`%a1EtZ62C*dqIF@jB$bL*J0M?2W~-5mP}8mg6v+(ffW&t*2x#%DN+Tc`~x zq^2qCO?TV*FH~q25>^f+Z2GAni9@KtOe(EM|v~v-_Hj46zH<4GR+}{>186GvWh3ZLhSQy6ybs6-U1pie8Zjw>w?-)ooMO zp)JUyV<8dQUA^DS)+ABT+0RK;cW)#~I8j-Aw+I~IY5T4n@0LQ*5NJ0=UlW!>t$!+k z>(y2}ZQUPWLt||N*D9hLI4{IFTc4LjOR5kS5aGdb~&)IMSZX>%%Qwv_7D{G zy`Bo2QiF*pwF#H$(WRi#gND0yhIpr?*jGFk8H=7y`L0%6)1M-mcXdtv0qx4Q%bh9F zE0fO&wCacR6oc1U?34Ph^fe8Bz7Ua_$EF7@6z$eTo&WZk+3_;EM<28( zaUZ~Co?K-eZzakRJjDI8_R(TU&tiT3iY|9~8N6W?ZE8h>-8J@l0R%1z{eqEUi^7U{ zPa9_uPx<}#=7HFN>wCwUK|LRJGSP)c0)E-K?S!0G!4`Qmi;H5I!|?+HbljwmV%b7X z9sl96dh7(gE@1)4u^c5WRj(MHE;5+XjmYRi`>62_2lw+Q_tx3pDyj#+8T(N()}k<} zXG6P#l-OxV<&AitP?mo*^@`Naq5-qFN4+%fkP~K6i;+$d9XlIhJkJa>my)T470)Mj zC|#c-@1dT`DKKF_~7C@Ce-!|enA4=~YNpU}M)Voj@&JH|KFVn)wUXFDd1mEm7}oER=GxbLL;j%d@Y zhccviV=FHye!rcnQuCawYGr1+v>xY6$+WfcnZxua1&l3{di`KPz-+{$O?KPR<;9@l zpj|PjpPWq5ZK$Rm-!0B@6Xbr4IH$S*{DhC$NbCKaeFe%AWycW%y{1r_dK{RtFbg26=eIeBL2LQ={Jq}4~?V~Q}AY2}+AzC{Q)_FE%{+f>lFRfD}Ie zOxct*(AIYG*M%HJ0E>~{0*jP;q}k%KbbTaM#sepFOTwqr&u>5cf>I40=j_jdX%ZVi zL58qAxm-1=B$2)P&qM?_mil_3$In=x=wsTm8UTaTE_dG+**p0>2{)vKF?l7xBGlgaH0V^%t1tFb4MW5f7`zj8clSCM&Npee zHEi_b=BTE6-ZF3b=396(Dsclv3;VE>u;Da~&IYfOFuc7=J~by>z!MolCe7@ZoowcX&yxQUDz#UdSr~T~q1p#hAhI~Z} zz!6-IlpnJg{85GFrIk@0b+I}Sh~(`iUn{_gWCTr^9%87QK%g2T%X~;=V$sf_H~vV0 zf2R2_rFUs|yqX!H1=s#az(Kp@34lfB#E7)1mvZwFHR$z4x$oydq2a_9c1}zr$%tR~ z3H$Rh9~cTtGu1Va{2QXcJSR;|fZ;AJ7eSiOiK4MY6cI9TOguOTx_;wNlUabe`kGAa z88FoUCr!{11AEY0MPQLSyopeZdM1nkCL)IZn13jeYp<)}J`W zKWm*(PmVog{VQt+IeroQS9u}Y>2E0^n}#T8|J!OWkT-x?b|!B|Fxvu+%TrG`vjW53 zzVk=Yj=u2!#&p1H{7-d@r|h`@ya+9T1of}=0lNK98~<-TBxv^qptS#o`Ttmn=wW}Z z|D(6Sn3m1@7<0UtZ`H+H zFnagM-^}o(g!rNtMW?kPaaAGqZcE z3=G5(Sx!>ToigawT=9kKT;C`69*jxU0`w9`<|+QCyfCR12M_r9Or+MB2_nh=TO@g% zF^4>=)}#NW+6^Ir6MtflZGyXt7XkH1f*9)l?xRsPHJ|0rPry)E@+~{mGt@rCkf?Od zkppLedN;3XoR!_!^*V>G4a-o&ZV`O$6R=1UzL={UlV6j?WmifcYM!N4!rWfLt2%mn zmdo>jxK-jLGFv^S+$-){ajO><`e0x;{K#X|nnf{+|3h&!5D9_O+RbnEjc}=NS}maZ zFbXf*S{q%4K609L7YOYFt>DGx6_$uhx^=01+7$G|J|G!oQ^i6iXG83DmMa$HYG6wb zpXoey5k33dk-^&)_N0LWtb?;}a{ z*bE$_)X92RaF@YF19l#1)^cooU`W2J;-QGUeFQAnS2x`YcAa9qmh2>VnCFQj8At-i zSa-d;D;BlDSu45>D}P2?!Ry66D8th9{Y9F!?0xiR$h6yN4_c?!L7d@b=Ij%5cZsIw zs7Yokqd3tiGt0h5uazH|e%xcC#fFw?mhr2LR$3`_`JR2`Q$_A+2vPCuN5*IPX|AcPYtmt{ zVH@An3AO%F<;N>Sdbhz4Va$kI=4NlrZAtSzomYLTgSPCqg_kxLnea70wr~T=iD~HQ zzUdCoMkvEuv}tdOo%ZhH1r40E>kM;RZ~sVz7?AW86cvJFoeJidT(zn={U*skH9%ax z>*8@pce&~2GrBVKNj&^#Fr%3lIlVuTd9b#cMJDqs9lA8R zpWYEkf-{CFZ^u6NmvEDpoyRS^{b*nyioigO7p-&R4Jiel4rVKTreqM`DM_?fN0jWC zwn()Hwy;h}?BLp%nvIK+bmnW182wg}k#6QKHE)<^CHWtEt^B?t03_pPv5aU5MN!3T z*hq9rokM+i40U>D#d=*Hv1DWUZPJh)JD0}OE2EL(riCl?q4STgSXez$tabq?Ld`vK zrFS)5`8>LAePhhVi(UQ^xQiC0;$mWE@DGx2(pf)+D$|D)52V=FPeZe>WrX%}4YT{L z^;7BE9Dm+CPnnmt*mJ(hbgyZ;2)7<#+IX&mIRqkqjuJJCyJ+`j^EX)Bjc z*v6p+v)?g)@BOatTRgEj%sv~;Qy3P>%(8Fnxo}y}x1o4|opw5c?CuqpT#`h%M6YRM zace0tl=+>J_ZX0Z#y$b7W;jz9k@k|e{w6wwU7c*<*$;=;`rlzS+cDEh23}xqu(o1@ z|06m#GI*&<+(h^AxTn@_gU&LEs1{ExpsG0fytj%oqy)W;oS{n&y-?Jj($HdK>ty?a zH~wDtE1BQW%O-mf4#AWr686FeW@tYL++8v^!^KTTW4!Z&49bUaber7EiJy9@aYY`@ z5_!!uplzBNX3czJz-+3E@X#~%a?`&~B~bsogr2G9##=$T@c8K~;hT?tv~8YWa4vEv zj_JP=&Lf~z;c#|k!Bk=eG(A)u7`!l3V|Oubype(Dry1E)Mf5Yk)IrXroQhK zQ*oCBMpIto_x4}Fi%92I-b(}??WXf zHgHKAXPx$`3VZC{2aHFt_BgjdzW;)%J@zzLa=(!q4vjzJ1<5mgj+B%g_Y8Z*9g0326MdF~#zX)lPH1#FDaT+~l zG9(|m^mGLuD>cA%{eC@--DS=B-J+onZtP2{yQL~q6Oea?gqFz4_FH>!TzEp2KU|S6 zW2~(AHOb7|rghngNz9?3FwCK+_-m5K1_hs=bHl%mZ>*Q!@>3nuQ9XMl%7Nlf^vfIz z;iX+^2N&)?{z-v-S#jGFU<~p&D^5RVA;T*3M~89F`uKo~wL>^Y);zN^6+S#rKQ+O{ zb)Kt1Z;;>^%XY*SOU;rO6TqEZce6!S_E&EB)bUdXPqqhj(Iot=g7Wc^EYC$3=$fmp zceigktsZulL&rT3jCQZltYRzL%~gdj&JJCWmByY0mV~-nddDoi4ZxnQ~Y{lQUv$D6d^mLCH=?-Mgl^UYrO*xXK9EF0#b{ys|0T`;I z{!<7<7n!4B12?XeEf{rD9j-lPM2PWypkXd9v%CXy+(hfXKD=iw_V9VHstMUt*~BU$ z+;%uf1t9^s4%ER?AmHD(1FW~sY|^ZZGEqmhdtVr!&nNpTHe&B#@Dnx___5iMljcy# zO&nCR+&R)%?9{l(B(S71Doqd1%`<{@i^X^%Gb&m83jFcf70zeute8zoRv&!0P8DAV^nJELR8l*^Y%_Dn|KsWZWlPrd$;5?^U+!9&p4CZ92h znP6Wl5?2)&NIyPXq|g2+HL>hCo)w3RDmaRTm*W#(U=E_TB+J*^?Z=VNSV={bHP+I4 z>7lCuYEJAYfs(tUQ2Vp-PWv<8B5Khy!y+k*JMVy#CI(wP7_lOD8F+($IZP&yP)6-! zd=oyKQKR~#V#BAEnuH*%Ksr^UqrZ}eC%hQ1N6T3gic z4|JzI!BHcOPr%9v5gYkyEnH=oWK`Z^F2Xy)SZpfqf30g=_{0)BGnY>WPs!&*76UJq-SLjy-;k0QB9r z>^RW0cVK&9p+1_K8;)|$$j~~9vmnF9{EVpW`F(m|ao649NSBm3uuvvYR*Mu{qnJu6 znpkHY(aYLByuB<2ot`g&&$rCmLm)JIEws(Rc^9kd4Au9+E9;}{jj2VWPJzO8uhnh3 zxiN&2L=3*!t0M4N1Ho)J+-N{Mi9-eyKewsBsee4amOJ5EP>v>J# z41KNO9 z_)vXVon}-|ICFVhHR`0{(1-0EZt}#&Z^GP#IoqdetzSDy`&`oYyB-i_><-}Hey0JQF#C7rZn(rFZ znlIGY+-%O>`INn)UR<9qnLUbZdZLN>919>BwUtcG8LeRsjw>X;TUU;Kslvz}1!54d zP0cUENkGk2oUU2?2rq&Tx9QqGsYuDmH{+@^Ag~D-7NzI=uTe>sAJ^GSm2+Fu0gXMq z#=jUdSW1vtI|^jTx7yk0DXzDv5Q767$$fLuBEbw4tphCc+}S(l)*2_}z-4@vNk6Ol zuX4iL80KKPu>dh|=@wsa=@h8VCt#5=8fBqrVq&68$HGAzX>-YVNX3R9*w-Q<16YAX zGm`lqnDL6hJ(?bCPzPfO1pFGCPxAPc zdkBdx7EL}^?d={jt4u&AO#xKm9hh3iq>zzB&uQIfLkd!36;^Uv0>r3}dn$8$iP-{WSg= z@@YG@EM`?DIS_dqmu9;CX)NVy-FmfAygIVq@d-l;;Wsgu`3s=IWi4F43U716=d$s7 z#>TMUzhBZZFu?QkpDHQsH@uez)Qo_!`nIzpnOQpoxA#iC$_mr!|N1;g8_HgDZLz7g zV%;4<8G|{f&uM_)>9oHs{VosfiiRB|)b&{Z+*-s$?L8afM@YW{+JfB#?0 zqXE_s;E*d=Z-y{OI4IHz$vsk4U&i5H$&R|G#07!C7(JGEPk zoD7QfIA1hUR@dLk$Lj*Nh>3~O1Tm0ZRAAO7iU$t`ZqJM-G}Z1=G>hrjbhiVMNa>U2 zQ-%3_6FtG-cx$2BXquUEr#|OM#@ZUaJpr_y4NJ~A{|$Q&E0Sih=Blrq?VEh)``EC{ zY}s_(YgV0Aj^o8eZd`ie$@I`GdOgr36L`ECOTBU*d)3A$4s+n7xdQ{28NXh@ zI^HpA4=_<`pUf^Rdw9ND_$HtL_jEr!d@^tH^#Y`Cw26vXI~GuE_y8&dYgp(Ltn5#-#Hnj!#GaQN!6P`xp_AaDOXE!2k6l#ZohGhefigE z?HFrL-w`Cg&j9@jrSJEX5qA%Bo=XewVZ#FxAC-O`@;ldLWWN)p2||yJG5Tl#Qjc~4 z!YX{f1UcaNB!(EQB@cTwP}Xw~xZPD>Iaj^n^Ro(Xli92UhJqL)ISd2fgx^Uo?-Zd} z;@m*yK|sN1kw(JgQ_X?4F?*S6leM)qS~`~yAiLa*r7k@BENLPum^?s5Iy#xNuR*XA zz1=>sziLflUB9Thh^t&0qMtll;DeoYu7tQer3BK0mUk?W!?r5?k2P3L@fOxXF;~RP z!5A;Nu?cX3Q4A2$Kt4f~l3?wX%Dj=X`2%YqpJ^a$_uQEyvw512%}nlOZO(aV%X5Vi zfMSOosX$|;5}EyPL=Zjv?uwngT+4@>fif4w1qpyKKG|NP2_AgYCSk1;#p1V9$2j(K z>DSTAVPt9LeyTvC#ztIaDxseUDy&}#`U-{~JY)-y_$W!70WLUL;NL;_0Cy1*K8h`h zoGeM4T+AKha~lcR{PK?E22mge$v|CBrJ<|i&qWWOu8>9*?42qPAzKGa7c8{!Z5ZPz zu-O%Fm&v|YP?iVDpF@f6wwzvH99pvapzdLF!CU5oALEQv=RcGv*EkXAUN-l~F+ryC$=#8D*U0eKi^8_ zOJAHmwn#vAXjcV5-;G_Iz)w}@@XJ1YrnDRXZ71?w5r$u+EoY_oe+TU=^z-5a$$ir&UMf8lLFk0^+Q~M z{Q_Mv2+vj@ejOIg2e(>ZD+@uC+3snWA6%|FNuuHZ>^-SpUu8gq6;%Z9kHbniY|)p2Znw51 z0Z{0qzBq)$Ly2f;HB3WAHsIFFDKWRhdw|Euzd6G=j%|mGeWllL=cxFZXj6O=!k(lC zzPIe3GIl-3AD@o8g9WIN(pnu>IQg^EzmUujTVS8ioXWhP%N7pm)@wCUGPN(wkikvd zOr6Zo{okZw;mEV}@QtAl^Nk;Wv3O3py7eG80(|Wi)_CFw>WXjO8q6LZDG>cs(ZWXM z4wm3JynRMUP_xsLJam9bTL$zL`OQ7sxd*2Fy8B+TxTYX~*e|K1E18hndtoE|ytuwB zaBs)^@0k63=r}tHS8nHY95Hr1^KerKm7D#Q<%k4vPXX9=9rjVh&MM&ma!*$4P@uFJ z%XFowXLY-44*(FpYQJjd)8**wgQpi$gF(UF^o@FO9{$D%tm7>!&-*i%Z%l;mP+H>CR8q^ zL1ek?a@qsx9IdvpKL`v|H-; z0R~>b*{1=#E0WwFDt`&iI-#i5pdg+{!9M_0yuBxh{w;Vxird{SEa7|rxuI;pOULTb zGq<_NOCexu$g(uC8f<)gGHLUbO$F1(+a@jJVJ`&50oOxDyEt#8F^Mavw%wA*|VO#mt3xR z|GrQ%bQ84!0|GC~+9c!g>7Brrl}~=v`6U!q%2>NK`=sN!V=s%3J5n!gpK$Kgc~y;Z zg6+?`J6#3j>jusBbNp|o>nbUQ0t`-9Uq5$nQ2P%=?Lel}cFgIiQvb!Lw@JjZ(E_of zBEO=zWr(MjUlydDC5W!sjt=iUv2UWPu=ebVNFK?+3thbP8hQaIP;0lRfMYE7CvDzMeoVI~tM1<$IO!Pq-KO(%%!spS z_*WM1VxPdK+nfl=a+^*NLd5RWo={BGgis_)0~PEmiMeLhZXJygvc?NED*;!M-vNmw zt^a#3>}=lWtoBz^;TV1$@j5+NLGQGkHA)?Sz?SzA70-5>JC37K(b9?7JGL z$8OuQt_ZXR&AU9v5Vba@Iqq2Tzec}*4hH}+%#O$kL~bCB%C0ZIy!lGwI2>?JLC)c= zZ8#+VY?(P*ywBhRzVTqq?%4bjtcp8cI*WZ`TL>Ysd}w`Wy`Nlvyiq%AZKiUV+uN(Y zhPO$@cuG5Xa2J`(Bu6p0s0=8jSj;4It`#Je44$Ryl$bXR!wm#t&sF%g9mh^v=jlwMnu;;!fm0m;~S%K#@2KW^zIxz=@R^ z<`(rYb7xPTE-B`w?L)>YWy-zZANVyMPcG1{OboZ~uud*TIp5<|A2G2RM}EBsk)eeg z%4^`L--|&yn#3B%tu}F0gAIXEhVE}(08C_Sh;WdGFCG{)SAv& z8)87^_I$^zF(;VaWtARtT-Mgwn5|8@^EgKG03w_`SbRDZ4}h;5o@DWkUTyWx9hZO% ze}A_N{)}ht0L!{sp0~Z8I8Q0TyQ^+M-x#(dB$xuJo6ho|#W%!jom4INTLS zZ~Ccf#}RnDd_&L9q-NCdc?1ABeX}w{>qT{%|F{><|NFy1BaV@HETY;x7kW7C4R8L@}RNjj#o!)!AAyUnc^&)*SOnVm`usIFBru~dI&HRu*5dvE@bOW zl_(w8KpMtUX!Y@DU;j3)LQ_l~3R!=VcUcB788skeOVT_JzmRwxGBx#Bng5~+9x7p+ zIp09~YVY|xUe^IzH|huwi`o!q*tev5eR-0H#2%JTjNE}Bt}q_m6x_4^$u%9F^F?3~ zpo}lqed zJT8ECV&SR-b{^&#DQ2CP^fD!|XJ`C@M%Jw~_IoF%tv;t|CILC#k+{)Thq^v&h4-1i z_Ze$-C66VNBHEw_+u7-CGNm@7%MtV8ei#hfS|=k$qS7-d)0$i*HWi_%T<=it#bHqk zebtF_0EOOreq@+7;8JwD(D8nd{7cW&u=mSK;aBCmN8PBjVK{4`Q9O@dZWmyS@|Q;& zJ=P5;%gnIG<4cG!Pb_|4*neYO2W1T&{Gyr$wjBti>kiE02qs-RBV||y9to4=HTcM6 zXy@EqynG+DH*g4u9;~Kv8hk4o!k(Qe^6!t;&VD*lfvv}mb$RtR7CpC|5#X5NllU*Q z=I(czDZbi`75fT9VFv_CFE|WFA>$1BLcJPuO#SIsjtPcZ#ffyaJ@!J6d0=&8ylH&L z!Rrw{gM!LR(Fvdk{3Ifw;K_lyvrb&6&nv&h?s>-En}E#VhVL>NGouu*S7Y`+p(&4^W$&3!yT3rl@n1i9^EjS@)rjjfE-h+ zb7|>g`@Tr>PV+y9wT-CI31s>7M30B&N0nCN9src;Syg|>h=eM07$7BPOm-+Ov=-9D zddzBzu-UBIT8U#R!%8|pARk^hK?5o8apcJCM|nlb=Bhv=v8D8t4|;!L4l$KhR~rJU zG&9qvAVy&1-1_~v)4CkB5>;-0iI?%tV|7NDYbn|`iwh|8z`1Vh`>QAB^t^`C6j}#AYPWU$NI07LiMy_?Rp85lAw9>ob4rfATF}*#?I+$yFdNDC561|fBp@X{zY>O0PL}pi z#B+=463#(kRLs^MHmQ%NT8cjv`>Bk~7cl!I!8ZBKz33rx3iS?+xW=@&;pN>WGAw5S zK}n6`E9(nUhOb^T%(0LGGAtmm@wEa9l$!yP%b{cXQSGa3B}pO%{ngZ-Fd37b7kAPr zlyJ)r0T>%)f9777tCno-LHEfsVBA1?U)3!C%ZJUPJOGtE@31Rla0Pnt*lRRry|ALI zrIp#$r4kz-4=*fy#>K^T|9)BC@G~n=JVdmlG%%pg3$qHII?fray@cP&4(~C~HhF<8R?9_qk@0@zAn+er^h-)rzi)8)F56VX1f6kQ`!q|M|wa zOX&XB>7V`!(!?BKMC^(5X~O9qCH89d{<8g?!o&atQ3G4nu5GSr=?heAZHN*}rc|ll zjOePe{Rh)f@^cn&vu8B|6ykWQD(?><2cojHn0pcTMxg9n9zB)ds;{LO-}+^{`cD5Z zFspkRT`+Y!XfW&AH+niUstp!@s)`^>lL|@ezW_3bhnd)W{<<#61T?CzQ2L)6(jy zaPln|a>~Qtt}4#G>}{u(WS*R97CVzF?>@0j0L3oO8?24+0tnUxiZ-(G(+A`WdwpG` zOvRiAt^c~)x(e(*Hj>bD^K>f;C?ajg?N|(#@$T{4jqZLS$hpO{fx+`86k!oZ>+flUbe_Dz9~jxLiUKj5+qN=z3ykK|vtx>MLg@ge`F5D(l` zkz3{`Y>Hxs$%hHv%=cLWYr3!?xd9{_T>Uj8J^HiSk6l%daoQ`t8&qHQig}6{_o&p| zSfKR@wA@wR%%^|6p1F;(@Fi@CRQT67JFZvi>Lc&<);E+s;s43}8l%^0$_vDol?B)@ z2M8ppuA-tssUqjK>d4j?iQdj3=RtA?3oE1u$7QJqKxbX1dpQpTrkGl(g=F7zp~vu& zC}w@GvS|fLs7(`z&i&>pg_Ips!=PPv@rY#g{R)P*0t)Q)yILh*0#bHKQv7P)sVW~< zI&Ul;<4`N#U{+s$&*aLaLhd9J(`@<<9|P{b%HwYYBv8t*++gO(-=eVj-Sdc^p67;8 zORcSzq6QsfQmBQ%sDt>YD=0GTEd$k}p@}+de-AGiHha^TUBrEKDaw`YeHf%PEVwD$o-{hq>xN)85kX#VQX_8AWcz^Jv-p|%6bjVhUf*$mH zt`Rq+5@}TY2?tP4Pg_{q^KYe*Vh!M}2F=yx1x}bOMBWojuHze-F{$_VJt#@a-`6mI zXZsNvk>lJmu=38ED)ING({|MU3Oj`Ri0vpNJDW4JsJvVlR>W;$XIJ2%pPH#bn)WJp$BHDZhh?MX+wDxnA8L8Px@qakk5%U zr}D!7Y}c?^mgl|nGxMvow8&QSW@&>v5zO^aT1=-e-N>&AMU55RyjJ5?#_u^d{dNkU z?1%?yoP|S#!j!3J_m1(~CrC2vwnC4+UOZp=s)4Uf9`%YI>^6S?A#gqfUwmO%Pybts z?>L(6eTwCsz1${dO z90m!G!iRsrM?UF2KtIhdw@u6otuU3&-BM@-w^=0_rXZkFL3Wiqw{@&!l=Psov$~3m+8-4WjI^5K$$U5+5cWuP@pA8v2Q9 zM%>XC0@)MeB303VY7EO|Pt7f`$$fqptN}ZYUm=zXhoaPXxV#i+fRdgzQvm&ZIUs0U zb6e?kG1F;kBq)s$g5}Kh5^Eg&`7M4Ly>V%MZg7qzI{pq{jFr;jyu|rESGQ$;PTowsZ7qHxcbHrA{ir|izYAgyjPfidukzU2E*&cK8jU{e zb1MYSMylj%)5w>dpI1&&8*8_(f_SxQ2K;usCvKd{Gnu%88Yo>6Sqq%`w&*nS*bU8g zuPd}M>b%xSqbVi7oOxehdpfKv&E;Q`_~aicLEk(T+IBCq2p)QQ5an;aBwGbgQKN#n z2M8{_;hH@V6A>amYl6P?0nXabxX4FaotY8JQ*}%9_Dw`^da>y3!^H9q%k)?9mQQXw zEZWPMb_Di;U)X4ybo`d_^%Xog^Kc^vT_Z8EaKnbskA2h!n+Z}d73dtfrilC;Kk&dK8u4r>F<2pcxOp9)E|e68$D zVh#Eu8&aSg7<~bbpYcT+8YsXHc?QEXausW*2#$KX7_4KL3g61=2&ADpJnh(j&iCGwybqVm+hy_`&zHOHJgz0-A{O){7RpjyKGCD$oC~^1eJA>bKut ziXw(K*;u9AH>_BDzrDw2K8mVJoEmKjMXdl<5gC4;esu^ZpACn&iVcR`d#Puxh~hm%(&6*f zHgZ0pGR87TvLOWqur|I6_(%Fi0%YgHL*k=G)nt&l!10FI@2wKOAj+t|9pKtNAATPU zV9c(~8|FOvNK)UXO4ZqS5lDgN@_VT?)gbPiqIt=T(t9um{Y%vB1UcP-7h%&f((z&z zbe%BSg4lyHA3!gG4H(rEUw0>_m5KSWXCxQa zPRemZA#&Z0;RwgV0Qmg(!!L4FAP3<{*8ya$W7~FRX-$2zCUfwlp2nYmnmR_}DzYt8z98KM( z2XX5%gN~iXFOZTM_f-?@a#gU&n$Itp2;lBlncaYNS=b1-KBy(MXM@S2*aNmm37)5 z7Xhw!9DRG*rhKpaoL(i^SKg=l#ts$_P3<<9L>%i8d|*Vf8m1c<3Vxl+mv-a(f@a!P zYYnA)8X5H?3uS= zL|9UBWrMfvz>MAj{D)Vw!^zE1?PUxIIs?q7LTcG4p0};M@5hhKjSVl35!a03S1%C8 zW^)pD2nfVle11Fy2c6%IO78eh6PrJvCU3C)dm!ny?uHQ8l_IC8!PL6HVoh;8Vh7W| zoaqpr^Ry8AsUN{QzP>eNIN`rI8!kJYZf>gdeYL;l-`s1hz1sgTFa;8f>K`Blz^>ic z+ZV8g_mJaoT`*WmM@-Ibjo0@F>uQwIuXVqRFoDGhkg1~m?D|9y_7QiC;MdxAsW2-4 z3q-hP^;AeNqr&|v-}-R2gM7cJ<|ptU!R&z_JGuJ19K#u$jff%Q3v!Re5vJa)7XyF) z+)K@K{%_c?S*wC-7~Z&W(D(DxFdVJZ!Tz}7weziH18oOV;73Wj4PlHkL~x{fFX*Gs z22i$Xhyn8^mxGs;@LvJXbiFfmxecW9UPY+O5*-Zik|55BRzKk_L}w#4(^p;C{?sn{%%pK6y{+HlI1bjF=9M-a$8p%)WZ<6f_DUV$UK4{QQ)`&WN-o?q@-)s zOp|5T?WWR|9PNJU7?QazmMs?VOGXo?t`Ab4dn7ggQvc)Z#4b-%6W1iVIa~s!uGhEn z!*DT%9JRegM)&_9bfM2N_p9eYNX_nuQ1!*Ib7r#(3xG720yrJm4MG$3!u(i0FJhTS z=y7NijgaHwu7$nSf(B!xATUVzuu^k=LBUt~p-KaWu17%1DCN1HqQ$8=K(Je)a-B1F zy)?RK=$h#*Q~%C0+`>mnK(15G)s#buoo4QX`#ro|*)`&%0UI9m?Ii9DJqbX_^j&cl&g? zI=zH);6y{TPYmEEQ(D zxlgh=cJ-M6V41q9B^BQx0v>P(GvB~c>kHk66jlr)VEsKo#?sa5hqjPnb18P)w2d#g=%8;Z4w$Feq)%{TyZ7kVq zGxHvC^s+(+_#F6uxm{`qpyzE0PfpR%5mbx%iPVw^eUeOO$>Yy69eIdEFlYkuBf@clVHs*3u*)E(uTJ3ntULhBGd)t-+ zddKq-*pG)qbY$?BP6rcP0H9Y{L@=+)#f}SJBzydiLSeo+5yWlYF+=XY7{D`+k z)onf*yskzd!!FmdlMmd>r5OSqh_`%1buoCpD>ul^%_U%q68wmS+=vKjA_1#0Jw2Uy z5t;uDlW^x`LiPV;;s}2iyT}i(omu821A(GvGU`;gC(X-V(JP%M9bCfKE!wT#>AZQ z46=S-!|wM$+o)uNxTE*=MsH6~&vPlW_gQc zM7g}Lx(j)ouCx+=^`;|_SP|H4@j`2K1xnV#+7No}z zGYGQPSjX2rx*pZyoTOl8J{fh;|NO$j4A8nHs7w21|7~(wJ04K#IY8P@&)B&ui5;p6 z+udy*KkfEbyRHt%<8q=HJ|=ZwBn!(So3Dz*Qzj}DivxhWtp_H_$J~^L!T(^twu4V>@I6_Ons5t+h2P zJS9FZPPy1aeI;I&oN*%irE0;=w)f~_@I0CQs^k83j%)|XjcD>)LWF*EA zYpMN;P3L=S7OT!5kiPG2&P|gqNU|#edeXY7=H2dy633{LwuXiV*4#6tIBOxflsjRe zc&m1U$j1IVT{^`-PM^gX?2iRKz<%)GBjpXgJRjjl*Yhy%AbDJnfg`CoPR?OR^w-%r zz$D8_4`?SN@IkI^UAOjPKd_DhEdKp2m+6CaPWRZFRXa7c7wS7Nb=qv4CA^i7ZX~23 zqx>y680+HV;tGn3ub;&v{UOt)Cs7c*aDk{oa z0jGfPX4}?H1y8f(iDX_}NfDvyv+k7V?Cdh=y>n!{(LaV`pu6e`t7|g04H*a9U5?(e z{*wN7v`b=#>m0oQ@*(r(M2r`NGVZM^*;A^Kw{9`njy*hoeFn{+aP5zFz}~!AVL1#} zM)0GEWhps5M;IGYjEDxNrtPl!fGAMZsC7VhBsD?d%}(mROdP!|ZsADnG#@`M`U)_o zS*!ej-etK~7$hJl2;H@DHfWnDPRF7yJ1uTpy-_+%5n-EGa4^#(Vdh9oH1 zSrBi}F!0Ol9Ic@7#V?!mR{RX*DH-+cc03wD=IfQ(U(aD!#z>S-q(%A zGnAVZHKA(LqN5Y=9Fw@}14p<#a|Ub*GrtUXuE-mz{Bn-fJ3*Oua#dc5eTudrXHNZ@ zy}mXxM=DOOP=YgV9sZKi&dO3tKX#=Tu!&KS{riZWR}vWp-O|uPhMkf3Ptl$9XbY`b z19NjuKSu-fcV-`urngm4j%Oi~7KGdJp}Nv5vc%h)ta0nR#e-q8Yrh-B%?_%rR1Crd zsur*w7p=12~ z@;wWkG}B6$%%CY!X1Qg(v)84TfPgYhkkQsXlt%T@z0JI2q#VY8MwyWf&U}W8-e@_| zZ?48UJ88x>RxY#tTU!rIY>&kpGNz|Z>b7x{MDiy4duM83 z&U2LOVCy#1@|HPRH!G9$KfT+O2y?CQfYYKb{ zktiwbW4QTH7Gi7&34WZrK6qV3NAi2LfG1o3^+|>Z`cw(mNDOwMcEWEG9FvO2mAnqa z71`c(aoSV=b>r@Y4^zpRy{ov9~>FFZ%#}- zU9@Jp2nIN+wFu-WB14;ujxSf1C=;B%+G~RwkD9kDMc{gaGUUh_K##K7%f?NA61YAwrDjOK|9y@ z33q#mqSNTvB?C&s;Wr5mEjB@=w*&LOQO71BTK#r4nrENNRXLd8j0k-4ouVFajKz%q z2AjP)5DlVm*PYX~#Ll$i2+vFFa$A{f3aYzQ;R!GK*aJT71USE;mp{;izTCnb#e5Fgte71;o%rPl-O=pEKP-^z=-`v(ULfHQ@vswzUG&77Q^?46vT zAkS#_19qo?-%CDIZkLol*@?zal(&K-F{&aUls-0tnekS9Z0y})djhSXpg_erGgtAv zo86~IPLAyXHK6}VMByJH>Pf0C8g?q!`GmE2?X#pT(;I)fri zXZaRwmO?L7{>@)9T_I=29y-%EiVe}4Q`UlUWGU4+J+ka)SXT)Q`&o`GB08960MeR6 zM2<;%pPV`Fg75z^R%q@YKU=onRR}Z5_Wkzq!_ny>vkj}oB_cB_HvKeo)aHcC(n<&G zBZB#l*l|HLP;I%mb`nReJ=5T1KU|}}m_gD91Yn((bZoh_N&9Gw0YnPIyDwK1!>t9g zJAgxOjyuB7{d#lEDQ)QEX7r%xieCbYgCWkng7pM|vVeX<`P((z8149@Fjp;4Q-A+Y z5e(vmtDmWfav#-m7n5p+v8FpxVhI^V=xK}CqgI(K?ZsXo2X@B6hRb{Q-b#GXVS3Cn zm*||=f$V)CbtbceD0xSG?VchLqkNV$oZnUUEEAK<(M_ZBWb?GPkE zK85N$KTOR9gIG!^f*Qdi!4_G+le+yJtk?RD%k&n8g_w+Bdz^Dx_^?BML8BtghY`u&|0sy#iK zogj-({6hWYJ2eO>mWJA6JnnNSBjz7`S6#eTgl&m~*~4)rMCXG8-CjlpdllTWeQ;9( z1mb7d{<&jbHVrO@Nb!TB!7c^zbnTzHjBdn`)?z;-?+r7UIdR#OtSrTVr^P0>%M0^I zeyFdSNZ8j(e@ZQJp!GKJfD=7tk(2ysvhB8GFYUymFca&~xj==nA?WSLPY2$pz|Y#m zhR>8klC}lnoJ4;yIv>MjF1LC)$pEA{S5N}@sgjeNoUxalg!z>oa2p5raiJc5e&nRB>r-k6})P1**uhWfpG-r1H(D_}!15V|9{Es3J*dslA<8gAuylk0~^#S** z-PUl#7SDzjje{)a2~M6xN6mD;lKrN}x+uGG`mA=}-VtW&CH3mo*4F&)Hd;*TN>TLy z1totW)<{a71FfxVGHqvHBnw?+wtNhIsq=0?g#TK}OT!m^`^ifKUI-`PM(WNm3j2s6 zk`KiL#;<;4q zNA~ZlpK&B94D{!AeILj>|>?{bS}ugMy97! zhpj!WDoS|W-9hJd5V5QwpZ55;<2>oI*(W{ru{w>nyn@@%m%gJh*peyE>^XS7C6#0S zP8z<86cVqR9DoZhFo+4K?{!u4+uT3?It(IuOcE|9SvrwvekqkTy=i!)OO#6{!~~X^ z!c@&zd$=mf?*K)yxjjR)Rqw8~zR$Ng*g|Gvqsq(ZbtGv^!g6-*`9m+1X<1?0sZK=; z0oh`>8n%%<99Yt%*}#!d1Ck-2PUox-Eu!xtco z3FfgnacOiI4yST83v*if+#$uFSoOu)h^)sgL)qgGWXlv-zNM@PR+s`&(1st;!okYf z?U{Ko_g|n$;T6y=kehWrcItDtY-`yKx1wZc45O4qxelrDu|J}6#m&W_ppR- za@Hqjn7?{5H`gdhc|W&y#>;7aV{uR|SoeNf z^HlQcNie~@`2el1(*X{Yr_8ZV$H74Z$a|S8Z1vMA6<#hHNG)qm%I+9kh!Bg)%sVwy zHm9T}JU0WV!YRRd%X^b%YTO=cBW)+$T(H27@anl{>8 z9b*ot4_zBmiy0djp65xsanq~p`Ac_%x%Fx56IQoJAED{V!7Ykt`Zg%nA4t5SD02)W z&Lyg?`Fo?oxKk>sN4E5#Rp+M9w7XrS>?`*`&H@+L<=G1@WA{ca>$&+HfjMPN&FG+S zNxhWE?eROojOK=i$oj4HOR#-IiHwWDG);q<0yvtJ+nEFKP`Np?eGk1~ge(-?fH3i5 zVq?fcRYIcJqa!mu$Fp9~$#xpzpRzan`03XQVn&11sJ%98(f5>l;o*tlh_0cvekq){ zt=lOZKBsut(xrBe=S|eDF@v>!Lf|PLJ*QT@ELh)zNspkVopgOYH->!4Q3NKwv+l>`B#pKkwyp-6hE466i#u#Wdy1uFjj<0)*emejuF?d^|J(~8tx8^pnv>is%hHxX5RO97A&YZNLT4XE!0m7Z4eupKRGN6 zWb`z`;H2PZ7>4Z8?I6Wn?A=8!>2svfmi4{*O5^0M=)qKX{ovnqxi1)upa+#d7u02d zRMhl&vl~Iji(Gdcn=BRzC2bfF#a&*UFO~8h@G)4qwf_*q#%rgJ&YJg@z18RNC3~Y0 z@WHOP4aOG$kuXE1%Z0DVB|~B$*)_{UyUul=?#1+NebY~m^Z5p6guY$6lxD7^pK{CP z{;!}3b{XPE~m8+n32y|l5qbnaNAcC;Sn#<-bNh-}V<=RL)kP!3k z5+UJI3-!4-Tzd4QZmAdQj-K7c-F_Fq=4GEmCszTR-75-8U%zpm2hS^LL@@4PW@RBM z&q&EOB&}U+?mpqtEZmiE(R{+vJZvOc9&BFEa(2I<6`;X^wf0#@OI>f=*o^<3K5_SJ zok2|e!5F7K48D0!F!|Sz_7rM%w5IS)j>TMT8hO1ol2^ODwV{hi3%W8@^z}-Kn-4@=ug{9gIM(b{5IPknm zNA8F;Bl&EBreZE`aAzCr2w#ny&R%QYO)*QgP;3r3ai?uL(GGX2b~Wa!P`-G3Z~l|t zZTi%tn;X?kC^8wm%!1qT!Vlo|?Z{4L9j-Lvs04$$qlN;jEA0O|YQ1r@)kv@1|t zwK&AA0LUmAIf!Lb32Z=dk}yy3ugOlq{WnOsM0+h+s5^;E?0U~5HEC2c{reDdrJGZ3 zL8p{)gD>H_EV*iH7*5(A#d?KTmrhA&KF@zb!w_Z2BG!H>Ad?DMvNHRQ>WWTGjjxKU zPr9f_XU#+Dg0X50963*baOqC7XrSyDMlOBXQu#9RoJTPIg3YsItA=U#vDtuoCvn{_ zrX0Q|w;3nc_a~;d8c#(pcCl$?-Wg33;g?7|P;t3szb&(&M`Ip&^IaJb5^WwrJi%QK zJ{2bE?G5U%(E8HJi{YJImo5NNyqB3&fWV0@PZXf75vFZ%(7jO>d4UA%MLFlWr8y=> zq~O3p3frq2U#l@RW&^yET&c-@vo*z*Km@7su~eg8E+?JD-AZ4jSJ&wDMq6m;hu2*R zFVcU&OkL`jNTzRWXU`$2OSCUWBY)VD=X1d+iNQvF?KM&MyIQS4{IP(W;-HBmIr{TT zxX;@?>C%bxjIT)*UpejV!~H>MDbIBx{T|YFQGNMAM_}MNsb3J}OiQ&0p|*g)dY=}k ziN(u2)9|!?x=tN_-@dQClwD%jhH}PJ2GyKT4`&eZ#B03;#YK9r*xVJffEAw&1n`!k}_qq0%zFajb6HG>QHO*o<+d@ z`{K7aRIM>9UwHGtt1#wJGV95x;bFlYP)o@?6)ca(5<(-rZ8g69{+LlIU1s|U$}>Ds z)ER1#iUSrCr<*t)_t_0{BW)xfn%|XV8cB$FHzHy8MkMv8Zk|;-4M(3{((aX7!pC;w zvwIQ-fb^ACljX=0mZw8d@1Gu^=`z8EWdOOD`c=8DlS z4X)A+`~m8|WpGm){WSr2&LRc-A9e9oHDcXFuMR6QUKUz6)#%Yac~`4;7#QbqS1Rv! zGuMBfuDKuhOO_E#QX4Qyyan1(aroT`q8RcfKw6hr4IcKj%H!(w$xC{x)Ox*b~1i7{bMrul*@9T+t_R84a2 zl5SgGN&Ezacy9tz>2{1xHM=|Ygviospru#Sxks%V=cbiZ+2VQ}3u-(4@U|*)F`bv{ z%XC(Iye$QK^N4A+O%%D>&*?H1&X?&$uS5g}LE8KqAkPX0#>2g1;(-_IqYlAIsS6G8 znEs1Vne^nN)vt>}BNYh$C86-JqfcCbDC^V-wrFKwgxm9LhJkUYcBP^?n+_CTt3ysa zMu0?|v*#anvFlakM5>E}({JM8`(#B}^7~Yq?qjqxfcK*N_b-E1eo+XGfDXC>Itcs) zu8YI}tk~Q)-y?Vi@{ub#_m7+``1S9UZGnz#$4#=YM)8>If7~Yd;}lywE?=sifIb1= zzWeVozaMPRfES{V{qq|JBMLqt^@PUzpUBvP9{WFR0)*(v*Eewx=s3Lov)n9r8OS|> zWkSCGe=O_w|9&OI|0q28k1~6pG13;$x@Ol?b77;(Z y{*#l74!)9e1PWU9dj|939zgJ7ca)OqMdaurSr3N>Y|yGX?cq5lT;_R1On literal 0 HcmV?d00001 diff --git a/docs/installation/cloud/aws-to-azure.rst b/docs/installation/cloud/aws-to-azure.rst new file mode 100755 index 00000000..81651feb --- /dev/null +++ b/docs/installation/cloud/aws-to-azure.rst @@ -0,0 +1,189 @@ +########## +VyOS Deployment on AWS and Azure for Secure Cloud-to-Cloud Connectivity +########## + +This document provides step-by-step guidance for deploying VyOS routers on both AWS and Azure. +It describes how to establish secure inter-cloud connectivity using IPsec tunnels with BGP, +automated through Terraform. Example workloads (Amazon Linux EC2 on AWS and Ubuntu VM on Azure) +are also deployed for connectivity validation. + +Why Cloud-to-Cloud Connectivity? +-------------------------------- + +Cloud-to-cloud connectivity is needed in modern multi-cloud environments for several reasons: + +- **Inter-Cloud Connectivity** + + Enable secure and reliable communication between workloads in different clouds + (for example, AWS applications connecting to Azure-hosted identity services). + +- **Cloud-to-Cloud Migration** + + During migration projects, workloads may temporarily run in both clouds. + Direct tunnels ensure smooth transition and synchronization. + +- **Testing and Validation** + + Labs and proof-of-concepts often simulate multi-cloud architectures. + A VyOS-based tunnel lets teams test routing, encryption, and failover before production rollout. + +Architecture +------------ + +The architecture consists of VyOS routers deployed in both AWS and Azure, connected via secure IPsec tunnels. +BGP is used for dynamic routing between the clouds, allowing for seamless communication. + +.. figure:: /_static/images/cloud-aws-to-azure.png + :alt: VyOS Cloud-to-Cloud topology diagram + +Terraform Automation +-------------------- + +To streamline and standardize the deployment process, a set of **Terraform projects** has been developed. +These projects automate the provisioning of **VyOS instances** and the required networking resources across **AWS** and **Azure**. + +In addition to deploying VyOS, these projects also provision an **Amazon Linux EC2 instance** on AWS and an **Ubuntu VM** on Azure. +These serve as test endpoints to validate connectivity between the cloud environments. + +Prerequisites +------------- + +AWS Environment +^^^^^^^^^^^^^^^ + +- Active AWS account with permissions for EC2, VPC, Transit Gateway, Route Server, and IAM (for keypair and role management). + +Local Environment: + +- AWS CLI installed: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html + +- Terraform installed: https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli + +Set AWS credentials in your shell: + +.. code-block:: none + + export AWS_ACCESS_KEY_ID="" + export AWS_SECRET_ACCESS_KEY="" + export AWS_SESSION_TOKEN="" + export AWS_DEFAULT_REGION="" # e.g., us-east-1 + +Obtain VyOS AMI ID and Owner ID: + +Subscribe to VyOS via AWS Marketplace. Then run: + +.. code-block:: none + + aws ec2 describe-images \ + --owners aws-marketplace \ + --filters "Name=product-code,Values=8wqdkv3u2b9sa0y73xob2yl90" \ + --query 'Images[*].[ImageId,OwnerId,Name]' \ + --output table + +Alternatively, set the ``vyos_ami_id`` variable directly in ``variables.tf``. + +Generate an SSH keypair (or use the included demo key): + +.. code-block:: none + + ssh-keygen -b 2048 -t rsa -m PEM -f keys/vyos_custom_key.pem + chmod 400 keys/vyos_custom_key.pem + +Azure Environment +^^^^^^^^^^^^^^^^^ + +- Active Azure subscription: + +.. code-block:: none + + az account set --subscription "" + +- Azure CLI installed: + + https://learn.microsoft.com/en-us/cli/azure/install-azure-cli + +- Logged in with Azure credentials: + +.. code-block:: none + + az version + az login + +- Azure Resource Group (RG) created: + +.. code-block:: none + + az group create --name demoResourceGroup --location westus + az group list + az group show --name demoResourceGroup + +- Terraform installed: + + https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli + +- SSH key generated: + +.. code-block:: none + + ssh-keygen -t rsa -b 4096 -f keys/id_rsa + chmod 400 keys/id_rsa + +Usage +----- + +AWS +^^^ + +All variables needed for customization are defined in ``variables.tf``. +Adjust them according to your requirements, such as EC2 instance type and networking configurations. + +Before deployment, ensure you check ``aws_region``, ``availability_zone``, and update ``vyos_ami_id`` as necessary. + +Azure +^^^^^ + +All variables needed for customization are defined in ``variables.tf``. +Adjust them according to your requirements, such as VM size and networking configurations. + +Before deployment, ensure you check ``azure_region``, ``availability_zone``, and update ``subscription_id`` and ``resource_group_name`` as necessary. + +Terraform Workflow +^^^^^^^^^^^^^^^^^^ + +.. code-block:: none + + terraform init + terraform fmt + terraform validate + terraform plan + terraform apply + +On completion, run: + +.. code-block:: none + + terraform output + +This displays the public IP addresses of the VyOS instances. + +To clean up: + +.. code-block:: none + + terraform destroy + +Management +---------- + +SSH into VyOS: + +.. code-block:: none + + ssh vyos@ -i keys/vyos_custom_key.pem + +GitHub Repository +----------------- + +You can clone or download the Terraform projects and use them in your environment: + +https://github.com/vyos/vyos-automation/tree/main/Terraform/Cloud-to-Cloud diff --git a/docs/installation/cloud/index.rst b/docs/installation/cloud/index.rst index d219a291..7a17f18d 100644 --- a/docs/installation/cloud/index.rst +++ b/docs/installation/cloud/index.rst @@ -11,5 +11,6 @@ Running VyOS in Cloud Environments aws-ha azure azure-ha + aws-to-azure gcp oracle \ No newline at end of file