From 74ca3b938e83b417758067ce01775a53cb8495b8 Mon Sep 17 00:00:00 2001 From: Aiden Dai Date: Mon, 10 Feb 2025 10:02:43 +0800 Subject: [PATCH] Update architecture diagram --- README.md | 2 +- README_CN.md | 2 +- assets/arch.png | Bin 0 -> 54751 bytes assets/arch.svg | 4 ---- 4 files changed, 2 insertions(+), 6 deletions(-) create mode 100644 assets/arch.png delete mode 100644 assets/arch.svg diff --git a/README.md b/README.md index 25df9ac..5868cc2 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Please make sure you have met below prerequisites: The following diagram illustrates the reference architecture. Note that it also includes a new **VPC** with two public subnets only for the Application Load Balancer (ALB). -![Architecture](assets/arch.svg) +![Architecture](assets/arch.png) You can also choose to use [AWS Fargate](https://aws.amazon.com/fargate/) behind the ALB instead of [AWS Lambda](https://aws.amazon.com/lambda/), the main difference is the latency of the first byte for streaming response (Fargate is lower). diff --git a/README_CN.md b/README_CN.md index f0c35a5..cd313ad 100644 --- a/README_CN.md +++ b/README_CN.md @@ -49,7 +49,7 @@ OpenAI 的 API 或 SDK 无缝集成并试用 Amazon Bedrock 的模型,而无需 下图展示了本方案的参考架构。请注意,它还包括一个新的**VPC**,其中只有两个公共子网用于应用程序负载均衡器(ALB)。 -![Architecture](assets/arch.svg) +![Architecture](assets/arch.png) 您也可以选择在 ALB 后面接 [AWS Fargate](https://aws.amazon.com/fargate/) 而不是 [AWS Lambda](https://aws.amazon.com/lambda/),主要区别在于流响应的首字节延迟(Fargate更低)。 diff --git a/assets/arch.png b/assets/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..3740a9f828797db8ac968eaf083f25a702a16803 GIT binary patch literal 54751 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

+qE;o`;bfm!7l4$8Fz_gR5zOqbO7l)Ie5o z?_s@VBZq`3L;5<&mhV)N+yP2z6-JyzDe*WHp*EQ_AiK>+S#c1h;Q-Q&jy(U8!`i1c zY*vE?%N|mrRY&R}jTVh^t!d~;^&0QOs=5An^>D9Ge(dg`A=XOI;z$+oVWXhffV?xE zw~pIBmWM?i;*@tScJED4!o}fx-gxce5%Uk(uk&9<+g{Bv2zewj$Yegu5)-8^FgHAI z7YQ`m`eqTz!-r6Uln%!P^;_bW$q{H)At$Fs?q&`rnwyXIJ-ptk|M+=+$CxS!H1K-* z7=7Y32xQuovZ9^Haeqvep=~z5aLdaNd}SK$!?qC@$sUherAUSa0(BNeYP2e-(UWNR zYT0`<^`2+subWD%8!!ra<+h4p`taJDih48@0tx#RGS%|Z z5M@Pg2V0m{=(4}To0$+dW9Z7mT&&tjydo&~vw}I27L<4G&JiZk<2bH`c&kw{F`&Ho z^COjNBd06dreeA6r6HxYdhwRJ7sEO@KG5;9&gD8KNnZ^Cn(vG589SLDxiDjWC|1jh zBzBo3VMpwHIiQ9lxH+ENF368dRW-N%)YiT6Oh2@F@M7fP+sYzi4gL` z6%_N-tyqgIwQ7~Xo{eBZ}AKbv&=Pqe;9GincG9B!2dmHDH zDWdU8QGu@G{o_qP(=^P>ln#v6BASZ!;l8{HfT^s}W{;<8a~u+KdJ)sOp^F)pgm#3_ z9dW!+)Dbpd4{&uQ_>IW2>3DmbE3Sj`!abO2Gjy{K)t2gL&^;o|$LpYJ|V%mEc_v97iP4hF;#_~BALR614 zUZ0GmdRBgbp-~;Lk(Si1a%S1r`Uagg3GSlzyqA2=pjfx*il0JG)Y9{t2Iq>1G!&lJ zHF&WcdZ!2>xoE_F)_&Y9z&+ogSweTkDc(L)OA<1zrBxL8phB}xLGqfLt7`luSk8v{ zu-+*rc}939(p*ZSU+M0gxW`DoN!h~ZXldhg*TpA0!?aLwb%8=_azn8vuu_Ufpg)K44K_cy<{M}YlSa0 zTJI<_cK6~EJu}>IV*vh1=1_WE<{9bq#bWN;6x%cbJ8^U#gY#~|q4MMCgT1w6K_#QX z4RtvQI>Xj_{URG(w6t?;(p|)~Y^MN$xN`YMLl`6M23Wi4po`SySN1Vo^$IwAE~ReL z+{fC~<#Q6cP7RbfDZxru__;frhRIzwucGV-#(py7UVKak_*>pL+%j0v)@v&~c9V$` zL|PdXNx-McQCBQNtld>#zmnKi__BaIwoUzZtb5w^vYSC>AUi#}Y5Cg((f}Z;FL2-i z!uit$0vsLFYC@8dXnIn_J5k5iPx z+D^Dn=lPCq^v@Re$W&=kNX)DL#eNS$h)VnE>>h~UKd~9*IXG|$Fo^rk61iD}d=}%;tqQ5NN z)Ch0P+D-NFq@pfn*V(fyI3u@d~135#>my&@!W*UmA;1* z;oSk|uFJiw`im>NqrT6W2|#uaWCG#_n$R92aR?z8U+&8nkecw{NM@1LCX! z`iVxpWCm4TREn_Hvj$MInTg6+^>9O3ZylRgJ4-|21|Qmd zu;4crVr5g-G)oc&HMnr4S0%_hA!a(PmyC&BJtJH1ASIS2Cq{kLSxQfpqvrU8%A6aI z(`K~MzllRB+J@?;tS5mx8$^bxQpf-ryRGNgP?u*IK#d;qTNc#t=AhI5Fl3ui?Nf+QW#r)H1_bc9 zr|cwJlmVti^rA~bqj^aY0?mji1E!QM`n(}ubhl3nIf#MkiN2T=!3fy%xXE)*G@py!({!a(Hf&xlWg>wvV4G!jTTCxbZi96=iGb%`8enIzWDk0 z$Dt=358!4hBszG$B2`uR1ha;aWFO0Dhc+rz{9~qYml|2Gjn^k|;_y}D)xz~DRZj}S(N7?u0%&BWCSgnz+wCm03B@{ ztZf0U=poUND>ORljXA^!!chTwNyx_gs_yFr-Kl`)wb5^FmIuI=43(tq9R| zoMfA6>6}`U1#6$mWYLR$-t$h&6qp`!(2L}Z=lE*ku~Hj8j&n1S>bO0+bm|=3%%MZ$ z3@x+QT=kjEk}2=Q5Oe$p362#OLxbp84cFNAF!X!Q8W9T6q~8{=5#;vf`#4ksVj(Tr zD|O1GqJKJNVeWdW6eKKqZl+RyV;~2`Y+u9x^C{FEw=$%ih#m1L;|zvsuY6*tdcZ~v zva<-y(1)9F&)=ub1~23WwYQ4o>n*$6q*)mq8a=fd9zNs88y!TJUtRTTpe~d<*2Sjg zVJ@YLNqaYuH=SF`&#MAt>f!Hrl3H$DjZMokcE})}?pQM}x@#&eB_Xd7sd%aDS%$-m)8#|i5?{=` z%nc7o>{sis#o;rmHe2GHDRLeES+^!+skG0kKH5aD`WnhhjC|&qk4m-R18_%Z*}ZDF z=+lH0`4SZ*IAQnMVg~w}IHjfVad0cBp9ovGGN32C%k$FYQQNBU`fmn-}s0WJbKN9r5J> z&B}?AJ4sxF7CqN}udQ>|Z6t&?a8gWiao}L;gTNu{Ye_lmaz!UqVVUFxw}@SAnzZCA z&j4iWh|}4dlwve2{d`J};=QcYwBl`3wM(c;{JABUD!-Ww6zOY$SX<`>uC9T!=o<*Z z6k`G2zI)#}P`E4G z3KDmKgvDPV9qk6z#S^E~j)?S6C7W1MRm^#*M>oK5giZA&rNqyc0GJPt$ zSEVH^Xvl-5U+kf6QqOJEgouQEz6ya{9h?zi0~3$KfJKzHnLHJUnygCGGA$TTbgQ75 zu*LwgS*mN=uymyQXvTw{epV%E2tE#9uMKNz>eVRq^gFS0Fb2b8IDCraV`VacX44t! z%v>ZhV=O{rt7l=!6@)79q^+v&&Os$6U$;fV#JhBQOwJYc(Kk43ERIV-sL@`&wZ$#e z=r#@E(z|`vUi1W4Ck89#2{b$)#c>UZvOGshVheIMge<1roKzf7hGSF*RytlkIH?#; z>Ak$cPm-S(M>Bll&}ZL!ydvZ#BfIPUxG9WrmvL@x78WN#U6@Vi*Bgt zjZ!aIWohKOt4Il2#oND_q`Y}Ap^AU{#l&#QqHosClWyi%N&rc0Bhh%ofNHaEt4-whl) zA60}mvK3D@>cXo9@MJGkm?lI%Cv8z*+GV6Jj|HVm2S|8m8zAi^e3J62NG@H|%}Nk` zFHKZM5iX#WqBVWV=QciI$1c(&7TYntl2fnjvG(oMkIU=0MI2v1}vr4AEbZ_qO( z^?esv=~p1YT2Jj$;R4u;24&|Jn5wOb*})ko?pFPofbP(c#JE<##X^wXCcMxP;&z!D zL>em>;j(y#+dX>ZeO>lemt>U$BL_k;HTddQ)7Hl^goIjw3sf~pwk$iFJ6TjNA!UA4 zD(jwMIDVPznT|5?F~0pmU<>0|BX{TB|-c3vGt=SRwswRKv6TH0iS74#fdkIE#FahUSn^%lpX6)pdP6 zX1%_f24Y1?*X{U|6WEd#J~2L3_wiWe?CxN~DJ3{O;&t|QSG_8UY73x{1?H#b+uQ3v zpyHZuUmVNnYOUz%)3~>Wk|nzzL65$QqIhLpv6P4}D~1!sx6te&0Z7eTBEv=Ql9B3S zkfAkWwm2^%z65-+=1|(JGSjx8x#oi?ggUuwp1(OnVJ$ueBVTBevH!9&{`CGSk*q)S;4 zLqgaF15IA>X(*S16o@kiBsaf^tTb#Mj(k`NS#&NlgmjL%2tyNLAkzFK;2TR=3Mw&S zjP!k%%C#OLYP1_otZe$NyL|6sN2~xwCjGGXgaxOQ%qs$n_Bs)B?Zvq;aEa_8Lz5a5 zWq7w8rx?k|Qzg+BEsDxJu$F;?7Ad)1=B@)aw~au+M~~{3^yH_97avlYF`1n7^)R#Z-OU9cOXej#jBAJ)L3MTE?c!dL z9df+i5oct5x&v@#rKLWP)}Vd;u~puVjBCIp|rZT%{6Y+O469dku*_QR)>M>V-js!KES( zw6Y?)EM#w-hdg;b2rcN3RcF5(G_*1;tvjH62yjinXO-Ne!!WigV!StO$jLP>Oj@QY zQmyd1S0e*Q;b1U*Em_PpE$tTEPD4qG8Bhpg&g>>AgD32mUdgH?r-PWYR&7N=TvtG$qZe?Q0_Yi8;>pOAk6VAu(gO8lJpg*K+BAu%dm? zUNm;Ygh|$yW>>t{P=@td0A2bB7Z2uWx$;Hh(RCcl^lxd4R$jbQ*`_i)qUcfj>RDbC zLNc}ui2zq7Fc#b;FR<_GeOynjlQhl0p9QcMsa6u-E3%FaAu-~}4Sqs((@!y{4-lkx zc=ICkpUk%LCtf#_EUS`dDv44DTLFYDpBWQG44Pcz6RKx0G>ufBj|~I#MHh>6b8*RY ze*vqh6D&)kfEVfo4WU5~;J-UgeAOoJ&KOyR+)Ez^oQUZz=lrfeU)c=kRlEddi z>FBRLbtbC)!~tD!hl8*uo2vZn=+Nyhh{f2?LSMzHGld>*&tw=$Qf4FJTkFcu2j%$@ zGMEK*4fdsxyMrcWv^x}VR1U4gIs&GsAKCMHV+FSTojuVF!eSW<(HBV)c-P!$3#Od8 zk56vz0<>lR0V@NYw&|rVJ69p)mIKTY`fX}p+$y%j4$XY!sZsUH(=(jaA^@S1O*=WA zY!d;aojRHri6xpZqk7T{!S?16SD(G(du>1RG5bCZ+Pa+)N9f$)I8PBm3_90HkX0RE z0Q1IQYiPMvXsCCp_qn0f@Nm9h7`M_f99LRyJ3UC}L>%sDXW){xaIn@G0J1UH7;Ik} zUZ8Z#y+8PPsO3?P`Vqe4liSF*x#_TQyf3m9#%+hJX3Xv;>(Mi#OobygVm0`Sn?u*+ zbLQR(&D9mXvBJ@&Wc9DijERa{&;|2G1rC%7pQGytHj0;5k{%JiwLWu;Qnd6Zzzwna zVD93@BUK~UI$Lg|NX5)d%8fMC4Z;a9+gdD6fM-+2gnq%$bGphWEE{o?KGOqXnEvFG zUx^e%A?J{T``NzRsAth?g#>W^77+OifO};`;rH=uT4mUKj;u)*J#b+o-V!2-Qxv*B zKZj;p=oTP18ooKh}~KoE_VG zi$+Brr<5h#ny#bpY?OxD(7GyU)ly#lC zr}tU_$mE)CjYt2Cc2U*a4Hw$SPfzMg3u(f}9^OGyUZCr2dXn!Y%rxpWcYdJfP-VP& z;bA$Ml{Zb(Pv`*GMwoa8aj|yw0p55NL_A$0jSBritlF}Q{v`(qu0?X6{r+KAoU?K2 zr4j<7~oU4ggzgHFQbu$x&uP=~Z z)HO~OX9NUUyXpY1=$FPw-&o5^Q>V6Ffo~~l?`?SQs1UQ(q2HygUF$1u#)WZ>K&=mwvtrE+v#?jyW!^xKsp5J(XgvZ z`}R`;Z+ubk2Qc{@lK^?V15`f+?W5~BC6;k`|7lDX2;OdpxOP7fM<(Z`Vc&nqhi)Iv zB7Sv$8lVy3(1;zoc=6nUNOh5gNFpFa4Ftc%cZ1)jj{-Y#q4ny+L#IDR0nN%SyM+es z#?ak>DE4%#l;P=pmvTT}lM9p!Yr!$dt*WKgf(KbA$#Yrs3R{ccNxVF`G^kV`!+>YJ zQJHg^uH!_*BbLi+;_y(HC%6KKiV!&(Y8t^kW_%l#t&VstqmS~w6mWWZWm3CH{>t1~uun7Itw*%G=rR zVk5kec5GIjKSvhx`hIv@x3ccJSt%s5u~M^Ar}OZ@;`AnW9IKaO%*Yc7a`Yr_k9w9( zYTE3RqpeK>gH{t>m8xfma7NrLMz5S0&QwT0^7?V@^cM2d;}Y`~2g9llCc=mX2CwDI@0T+GJz=^YL3U2K=|@E@jSpj*gJ z^#>P@*?9A}vpwh|C+N@%s!rF`A#Ft;G)g`k(&xkQW_Ss8oj7LXN;LA*`!e~crT&}Y zd3wxB1vk6+2&qCp89zX<*=&j`wT!XI07-&bA~O&B6^T+Z6=={5YROpvnfB^e+MnjQ zR9GYJ8_q1uW}B%$(JfMc(xWpmq8o-n#k0+VbaK^0KKUXexy6=vGnJzrYhD48FQtJV zLhEjE6X49g`LL)kXIAV+8%8b=mK8w;0WwKAeD7=#OfL4QGn-U$x;pj7ntHpGL^cSl zxo6jGuHL-wFsO2mm^Jg>So6!(%zLPxn8Dh|VV`a%z-n&|l;cS%5l?ES-H{*flWCl2 z(ja&mw)$w4FqVGNBtBRk$E3!AzaKHLf}CxKHhg^bBz{ioQ%y_FdSZK)iquj@Rj;OL zgLI>ALG~lsXADvMdlQ(suYS5?`0*2SqOd)6m6%Py)!4a>zPBSO$U!k%+h-{Aa!|vP zYpEhM={EBmBKTsLSn1X~wOqrEt`g`pL~-k9--YQR${hVG)2wVRA1Ka2hexFjUq)2ldp*9c5myFfB(;a2NQy zlP!`6CJ{BCReF8Tn%|gEfDSp+rGxBFc0XHqnUaA%sU27$2uVJxj0?-llPt?B-T4%OHBfh3LfVeD!k1Qd?cKlL^R~C3>;zvkG1|?}&sK zrkAwy^rUO*G7?9uMTYF*QelRu^I-w3=k6rC*b)@CcI+%SqYB zkr3gqncZX3$=8>yj4zd%dZwL@Ft{MZs%+DeoZeC+DoyD-M?&a9O}zM_D;$$PDeUGS z#x1^asHy@Qw5-u~OPA2D?IHhc9zxeA}c{5#!eGOE<`zJ7%`P09FN+(Fse4W^^8%2GJcjQ z%uZ|3zcxaS@|jvP?eN7Sw80a@+9>7fQD9@*^4$4@DNUCKV#1r(SH@hIjto}tjIyJF zTu|Ba6N7l`Qi%H7vv1)9S|~cwuH*b_iPck)lBvrZn6y}!b4?*~vV)Qa)R5X_RH?Z@a4O)8|AdUj6<4wct;@D9 zG7=-aKDgvKVQz3T+N<{hWT|?V4oSFIuWiZ+Uzj^Hz4?)L==AH&d2%2tQN|b&(Of{A zp4pZH*O@HMVDUFoK-4Q)M`TO1q`dT@XskB6rzn&t?2T_yi3~R6&nsA=O$H;!r^Iq# z=yjScGk+0D&k*elAn`S1hHBH_@6^m|?~5s(%m-aP%MOd(oUOmn;=0M+`0*8O$%Xkf z?OX>OuiQ5$G-?DkmlhwqU7Ktys=+5;7KyJh5(G5>>`ZV}#&2y}no5iz7)p(dt3%6}RPiMVaxjJPOn<2u)MFigvd25}nB2V7l^~&|bApVAKGx>G zw0P(Pby27uiq2rbtA+vT?mdE(VJJg|M4^~1}Vwm1(kJ96yo`9N=$a4!O0^2mxPfsl%D#8Y-T}-kvhdrmg|ICxXaHwMc^%`yW8hW z(F=&iKp;unjMu6|npsz{CJS}fc)k=txA1Bd3+eW%mI; zky6jhh_iWPmBYSGAkqSgby}L9MY(qpJ}<1OZ<+K8WX}_`x3d(TI(mz3RdzM##LEJ)g4cHvh&YVWg`g;K>_K=!s&^o}@k1&awCGc-rneKwmns69Bf@Nj z8~fn;p>ET! zBadoM=@#}&_qzE}1$vaFeqQhh#wRmg?Z*V~Wv z;vc~oVSF{VwPyI@u-M1?vDzB>5oc;8MkPA6f;X3+hWanw&A5Y_D{8gIwUb3H4tTeR z)B#Buia5~Vrd0@2B9ABCNb^eN)j3>Bkt>s(w^;+}JZDKc?z~%R98T(ekhoFXbEja`UTeOOrYEHL78X zu{9oXb;k~M2m2e(9W1jM<4-%caUvY!*!=aZN4^!ZS?8a6#WPPaj-l*upU?E&Q=6w~TurrkO1yGA_z4rd@O`aI zX4%F_)l*0k_$5!;h5^Jzm7HBRQ*f?j@qK3*E?6lg$@+zfaz3#NLFZ7e&c=}l5U9bd zz3qdeh)-0P_krS7UZrs$W1IHTiOtPIlY#&bC*ReTtsF>!^}@)2`@|Y$gsg9MJA+JXrO15<2~4@L&^J zClLl=J!dUlIsHBCH)tcp45$s$x_lCpS z?^O=5&qt2M>&J%)@iSn+1Q+@YtZJ1LIOLvc_9tqdT%3;_IO>hpdJ)}CV{beI17T9q zXG7BzSE3;hp|`vit@&?5Qz)(1FP>WM!*R92DMumJhS@ZO*^Mh1o%lB|Jeqr=ao*{~ z2RM^vA1I22DR-;4CLts?pRF1-9C2_H(O+!Oq2fE$G({I1G@zvGL`9P{$#`tZ=mUY7 z-(uK})kh=Gqty%Fz3_xHkhG7A8>hkcufB`mLB3z+h>AKuLA1X7W~{sZrxN+`?m-`h z$=syuCwQ+~sw?RyL>cTBP$X}Uf?6upfTI%B=q)zml!5WyIK}mQk>RurKB;yJIbMP( za?}quD+W#2m+{C%4C*ePdH>8c-;4p>Hu(sY=ei-fp8j;}x|x4^r3{PN(zSO(ywyvE z8#iu%1CyQ4(%y1cyWoG@_yHJm2%~hWM^D;#bA6r_>R)_qdG_Tk=vbX^+7c@tGkU$U ztNeKes^MwADA>MZc_PX?f11U2y#8c_Mrlaq6%<8ZDR4-u@_zNjgEXElW2f8LHrpPz zF^Uf_7Nee(KL~59HISsb)t$XU;<@muCF*dFsOFP&G0}i08|lc-z_&v6v^Id+;gdY$ z*sIXg;~H@ldV7pZZoKnE(aM@zXIk#U3oSLeM_Cl%V^qhse)d{#lVdcBAG^9%wmLp| zkG6^n0qGbM_9jv@daH3+e{p!o-Sk@Beu)w4?vA<|wwnUM+!AZZ(}`>4!gNvU6zmfs zu#Dx$nzB?CpD0*gq@?p1f*NX^T%awAj+-R$>+d2YCb|dxvXxuJ*{b(>j^7-!m@}7# z96jl)bdrQG&uF^*_`UOUcQmhXch9}Ee42<0p!59K`JRkk^)@dVSap!ZP?8P^i}vmT4?-s@A*BqK>VmW#&H>r8MntbbS1z zZ};?sLd#>Su%y`b9B!J5pykeoPbI)UxWIWjTwdLy;BX1{Zlsw(?Nze39Bc z6mzNwE84`=iM_{^2`$PY)H5Hp27gT&_H=dsDZ`KWQ=Y~}*5KLOx*v|1YeR%)1msjt zKN&M7+WKgj{kD#UvXVbAwT4Y(A!OB9Pck{X`T+~~lqHH-V zKR)LfgUax8Sw3ng>~2AoeGaho=EpeH+m5@UCgwTRC@jX%LZ-%aHE&9R^^>p{a3HFw zCPB7rO39!?Gl4TTbJA86iDTw^o*%FKZGv>3o^E~@VOle3;6(Y<%%QTBKuvX~-8<6b zA!0Zd9Q$DQjkCa*>+%|HNBY)j{FPxd0nz93RWbw;8a>1Yz<%P;};UcJ?Jsfih47f}OZxW&*c0zwX}aVG7aFuOqR;vb%baS|En?V|1P5)zZm6Al zKHrz}{%}JGj7<)9f2PNqEv>|nZ}zcRI;h9}qr9Quh9Sz7qB71P=tGglWQTjmI0xSB znIi3oQB?}2v{g~}tLbI#{hkc7q9Ox`;2;AcRs$v?g4yeHnM&7lR9~K|tq_7KFow={ z6vMC5cv70AXt!v*tTNKo%nvULnRZa3<2cs$LDq$M0!z0z-;T@{-4jJQ~uRFuhs-^1sW~GuGI#w2kD32S!82k(o zB&=EY>u6oFlouSD0}_|c%3X>z8}{P>ic4@W1a>|?BP?Meqw-iT0Ufwc)H~#oa=z?9hTa*xbeM_|c=Qcfx z6uh1b{o-hc8FE+6Q$=|1Hx&P`z3+@_s%!qG1R*F8x>7^$ph%Gpp#=~KMXG=g3L+?= z(xnsWU5a!=4IovD(oqo%(wmBOkful#>37FRec$_*yVhOz!~ODi@g-x<$vJz^%%0gZ zzu&%bY?VvEe;Nh-2(4VVrI&dMD8$TY)l*_Y(HM@Bswk6@!CmZMMKJgjH zl64(RVqHu*bXRQVg?&kt4#XpF+_&1(JSWy>z#e7a!c*P~AXf=~3tnu3yA$(o6C*I3 zDWr;CIugg?pJnb%$kyii^vFial=-?2XYU#r;}lM;oN`ds+wEH!KeFe;tXF%-a*yN{ za<8>~vW;b>xQ=am6{%GqrF!us~A0r^)R*6}>UWIAB|=D3&rrhSO>hh~(#8N%B#4aC#b zv-b00geT-jdt*~-`5GTip2uyJAhT^>dLQ}E8sBKpsyXi5S}@DJB<|$S{>kBt*FhY6 zEK7mgt#2*PY~oa=Tc2)ZGj}d-jKb}a>%qT!0p5jI#PCf{Wr*Inp;$!yX63#YGkc3C zoA0z@d-#hf??u+JiGYC>>e6=(hkM_`0xk*q8+Xl^2)S!AdE&Rtaej#F6W8q>dyZnI z$4pua;!J-`-P`K1HKkveF@9mc5`I5Kr)_CV*PEm&yHn3fAWnR1_=0s){wMj#clQ-c z6wE(+vteluuFARhXl%7N&c!5>PkV20Vw&!x?8nmxn);B!lu95(Q2n-uo)ua)PJ%#X zqMy*SjaQe4nm{_3JP8J7fgyP zb+A>Xugw9VP6d=;C>*<=Si@nI0QTfs^T=L=;}_?EFK^pcp0{9_#Nah$8K@70Zv9yG?efzRlH7X~f`j(&sjqar37(Ekc(u`3@CP_o1z_a8wpQYkZCtgzzup)1jJ*%h z!-orONz$fLjux$j@5!TWln0*sQ>34_t9wti`ypCCQhx8~Thmhf6j9;iW4YtyIdVY5 zz>S9m9uWP41qQ}JeuzjOYE*w0VUDl>i7T^Bx)fH$^tc6)v=>b_S}Zjj5FykEOB5saMc8IMQBGDNJ`+75L4GNjT=q#bm{ zJ|Br~*zYg)W-(THX90YymtXm4X^Nj(NG^CBd3;R?RyU-sg2>{HJXD5XAX{&ocQUPj zfA-UcF4R}^$9){Z8FfnOF4q~?lS7j$2q)_1h#iOb={H8J#+`L|tO?p(V!WG8Zweaa zR(d__#%CJV-`gsB7o=@BGG5@3xT`6>`7s$&MZL|ZB28yDqfnOwyDL%`IJ{YaT1BYi zYggYxLD6di<&G~{DaqMKvulH$+-M|!Yt~b}+Q`|HZ+iDl=X{1$IE?0%4OBT_%l_Md{Gl5svsfNN16bpI3 zHVho^j`hb#e}Yeb%LX9fbVX+}yY9pYi>6PHJp7*L^kyq)T8@h5Z&Q6@6v%VH_)6Fh zUQQSHsWc<&=)~`e%nV+sxiRX+9`VEhlnIqU5$@>88Y(Rw6{gI|3`3qLqOfqwU3?~= zdP5Iu06ki*XytzpR6Sg#s#9WBMs#PgF6yKESE10cu{$5Nfs3VmwXSeLg`pEL?60Yx zq@y-si~V-d_0j|=i+%l6ljMxdzKUW8@b&$p*IHGsP*So$Wm^D#3w_@F$7H$BJL7Ke zZb`w6r5v*FL4V-4S*NeNI`%}WXJtrw%1^&T zXf*FHVjsi3!H(CCdm!_RYSxsicVc+4Usth>$^1}_YEDn~0|;GHRZM7jXV3Q}d6 zI&q4b)|q0vLKDw@r2rj7nKRoZLWnZF3+mYw@dopw zeb4%VT)WccLS`45gJ|6Km%}o6W{N6zT1w!TUjO7k$oP%h{c(Bv@Zss2g`)}MY6q2W z$qRy*CZgl{w?m*#g6S%GAnLZ$;MpN07o%nZ;~eT<0C;ze z3p9YbSDfksn11-XpGv0iOUZ&Rfw71Q(Rj@h2&^8CQG8i%DZxD~s*(?ACn{9|P(F-p z5CEX@g?YX0Yi{+^-06g1d+jdvWz zstB1peR6LB7f~wjv&~}@U>SJ|p3+#D&nG8f1O z+6exwR{%uZiF@m>sD{9E7JF^XZXbMWHAN2g2O(Vl2Hgy&QY%ChnrVGNUGWTAeJ9=rb! zj*(K+xR$-o%n3IilG9`FjMr_CTDlCROFB7x{aAZfnHiYVh9+M3r9g|;Z==zMHv8-d zDr~%_HEwXbb)iP_)*!d6`wHEisTKuJ3`2zz(#O)yK8JuXQ=eg0A0m`y;|DGDaFt8qX+P;S-8Z`0yC+~Dq1V*bpYrT-02 zpz`5QhphYCA$E!>RP!a`>{EiUmx z)pbqkjoZUmYQK#R#-t0^HE@YMr|r5^V(xu@ckZoV!11B&+3c`GbANM0U#1LKJ|kYK z)`5+OjPZs#L7E}fI{!Kto2 z`2Gbmkf%9hYU8I)%X=AiU*G$=|L9ZmB!veaC0316U~pq1>4h|miuBxPa0xsh$f5<_ z4dCGf03J?%+CUgc;BcPpPcQB#30@KWSaqFrp(jHc5f;`FM#0RBMv2il-iRu+2{=j? zx5KIJtd21XEnC()@`O$V>@6^EoN#GG!|YnOdgW}LipnhO2cyJV!bgb!PY*xvM9R!> zkhP$@mj5T`NIeuYxwy0lR!rs-#R~#D8tBd(Lgs- zom-DQeD;@%2DE`kB;*6m*NeELgzX>t48He<&;kVD>?sBU z7~vdNS+^(T^n%<8#;R$v++gWP<8zt2L%)}PbP_>S(Pme=q!6p3?_<3zS#{G2Yl`J7 zn2%tF{lW6LuQGuV=fF?~sYwAzD74D~D;pFY%hXGTHzRI&{4_WI=K4?$hhp2GJx!S^IOl#`rk z^Nre$N*ffAiH4h@M{h&GpNfg}m_%<|4{qTFB0W zaSCMCtZ>BlX#Ze=ywnfm*`A-@n`wo`Rlwbc(jm~Dv$B!Igpa_G@CK1Ay8+?=3u1Rd zLQmkk%I<=8u) zmfTea?%}_lbWuWxkZ>#wZk)ZKD-X-#3bVA8{3Xr?dME>Zkj`yV7HFdJR?E<0^4=luD59M%y4knzKh zR1y;O1Zc&n=7+Y!RKFZg8=Mf}fo^|dFz8hxIe8@V2rGHgx*xB)$@o1$P;paE7GQJQ zDMN>p+cd!ou+NN(Fwr=s!Usc?*P#I5Q>326vsGRwnMYn^;3!-uT;PFDTD7(76#zgl zp&5DDdK?%trSEk*pvh1p{ERYu9TKgLrR5Y{xM-1Yq#+~rMUJ04xzDI|EIY5jVtK*a z9&N1Q1vZP*gVKm;977p;NeBbLSRBo)A&cWtn&&xbVPq177ik=?sMXFJXCu#-$|+Jec5b|3$K}nVw1D8@vyq7uNpJd6z<(O@^d}7pL%4B#zp@0e zAR$pXo-*WXBsQVvOV4c$vG%I)l3lLa{la`?wyqNmz=GB~ao&ej>VhPN853|0%+&R` zM3punA`hPJ4Jy-!dM1H|{x2{u;XUK~=c}ok+2qWXRDz6eF zv371qG9nDeHBB&=6DGTJ64g0aU%AA47k%W2yid?Uvm-es)?*P!2ZshJL2@Fm>xPdH zzy!Z53u_1oyZ}%E#sW_Uavy28M|;E?lI=)6OFfAFNRPB@eu@+3#Jt&O>?I;pg2HK5 z`1~^LR1tTG)b7E^2nkDRaIe;Vmnh=8`3py{>Ip@KCK27@OS~nGr-)El)S#!$#;cLl z?|cXtj1Ucz)7i;uRkIR#oTa@+0=X-<2sFCunL$@S6Hm;Ra+?w`m6P}5qUXS%aEKEG zwb52`VSEhw%@_f;ub|C>Rd2E3Lj+)pAfBo&P5vm zoI9II9)QZD++2*s|Ao^Nco89t$>QCTQd&A_@&M`?wfTQHZlJt!uclQZ(H5+UVdzt> zE_tETSo9qo9ZF=|4 zFzlxd5dXsl9s_)e6PUwuT9Rf8MnxaWQq#b9QAWBUk5t+i!FbwK${B$%I2YSR0tvp{ zrUOl;S!JNQNK^bYBw5`s9#wBay%!vKAKbUMYFnNUiCye6fRlOYfrqq6lPhk5+i~x_ zYzc|ATD8)3O3d1QYx&_4JI#vO76%v1H3q1mWX;;mGf?-O3)%#Pth0StWpCQaEv7!us;zGoWVlKo@;}F)82TtU&qY_5b#bad3WOb z0v5^m+3zh)mY^-p^=fhtk2puXQ)#0Hv!i)_{}GgXn0<|(9xSrg)DdNCowqa)1xrlc zI*;fhjK%8`0Y2PLOx+xQ4L{gS^~(9d=u^4pP*9j_av(jlmg%kpCqTG)q*%#JT}=65 zk$@C|N^*_Gqf8rl#7PM?!8@_GFX{8fqXM4i8H2?*@EkPxJ|94@EgW9v2{SVy_yRyi z_B~NDHP-|J2Msyl|(WKr?#>duO>X(g@~d41{)NS+Kg?=q+Z@{y*A|km@FY zD&LFKFFim%UbDETLwNk;XWxU|^UI`N#{5_0<|W-LeiNy?43~ z(LMu_{KODEFW1MpMJGojw&I7uB{DBWTPzyqfE{tjwPeKluO?ckU5Azo08X!%#FyUi zX?E~50blNnuoZgswPCUJ1eX9CuUq>na4q^fiz-+Hw^eBTM zu}%&N7sw!?fmVQ}B|OVddV*lKFdR@sI9!;A67_=MPPTh!=o1{1J*)8-eEKwD5%;j} z%roLQWj=sor-pnmI8YkgY|_=E07QgBW(fjhkjOwl8j-RjLxPLh2fOHwtn~S;NnTAP7y{pNO^p{0bHL-}!u#LW3tk|osJmq%ke17AMs})2$i--G!wnd3oF{w8S>FMY?2n&Vs{tci6z@1 zxxT-W0w8)mTNd#26dE0x`yemzU-%WT#Rr;0YdKvlDpqg2pran-KZsZX^g()T9;P_H z#p0b5?jk&c*ne9q?0J$ZkS*T_!@meXU;B7AB^fH70Kc8Y`M}l_!z(7}OMpzbTP^GycS%h5Co^LN; z<0&CcU`u)@wswvOq%N9~XH?*>kYGVf5OF~Xj9X$!1ic?bKn>hU^FPHYNURD9q##c~ z;`6TnAqYP3vS0>u8~+~?AF$Mv8Q|&tIOxf|Ksj-R=T2C6Fk1Eu-G?A$0%#?Awo)T- zY6Xqon0XFts{Ic0M7j#Xoq7g>r;f${1qA}7Jyr8pv@xFOf~FUwkbnOV87By&V3r-% zvf!9gDj*#BeL)+ryHn*_(WZdrFq6I)^5=p-Ji%~Gq3g_zKNk?-FTh@SX9BXrl(W5m zGeCp8k&%O6Kv}#*D8MlcPdK2zSUm%k;b4gZi|42y;om7A{4%8c>I+0??8#-SPXS_} zALDBMN|D})%G*SqJb*>jANK7i?Y|x;ul9^D1{NUaxh8+a=K=+!+S19w7V)Rz9xDrt zIdk`ZTazd*2KA=lJR_%uozbMR5#P>iKMC)B`Hw9RDt-t*7=1U~WFP_>d#zK;H>Yk( zH|;9g`HB-O9QG53;`Z@42(J#G+}P7MqjeJt@oe2kS?v8Q>O=gXjr`0)7=D-RCB7Qm z>p@%lcad)AIq!MTfqOppht*^sd}r~i^d>3L@?-pZ^24aaq*d~cd1L&bk}ErCmL(N5 z!IV$0zwLEL2rIq!40M!q)*l}g$)(y2KyY>H<}J^K_J;tR8T*$Lv`@2Ck~X8*<*acj z-Iw1$B_>J6^X|$=49Q5bNx~&2*_$)s94!E%NRnIJntgVf zQEc$_t^39H$@kp!8*1=as{ZMjIe?H;G6bl#;xVB+%jI(4o(u(KVibur`#XEq}x4bN?vo1OB0l`U6hQvIBFVpqAfahPUI`< zYxxn0hry_2R}=#nOwz^i0JU?gQxh6OUbmYexAvbTop_+tm?1#H6fGUe5;;8N*s0Umam zh`{6T2U@rzLy{8HXEe#ehVgh#_ke5#AxOPdYKzG=G?PSN4HbSZ2M; zCXyx@i|1T75q*s44A_5oD(iM|0;Fd<4D{`UxY7C=f9>6m4X>^d2%9^dT{lk!lu)=68yC?95L_jWtF z5bbQHXn9%d{fmt|4GSrj{0C8XXoCA$W(b*vhMV6AsjF_Zvt7K)>vy~`hFCF2$cW>D zahe4mdmf%QEj88%zuA8HLf{+^ZQ?i{;Cj1HgL(vzutcW4U5dDfMsHFPWP8eC^%)bU zeuE;MmoIZ*-eJH|0C&e-?t<`=6oj$t!>oX~ZUu(CK}fkF(5A3@_i1@9$0( z8`4)g(Vmd4p&NMpi!wgH`1(}7htY(|wPyu$F5P=#_Eh3Q``~K%y~A+A z;cC@BWEzfkMQRluI$mljsM>nC&%7XFvDdII59w9?pbedPag*JB={Vi&a!2*2I(1^f zB&E1Qw117CNbSmd9i+6)>X(PzXxL5MmCIMTsOGj%C(+(xoF&2q0P|_1hA6!v$V#mm zE8c1h7aJ+IPVmxOTY_FxV`bAmAvp4ye;nW65~6`xXK|b95%LY@j$VOtgaJEuFkocm2Xl|qTJv&-&S4e8bMnV`{ zG;&FY#2TLc?QQADR@v<=GnU%BTOJ>){)%{f4^Ab+m&D^XBA4-+j(|ZiTchp1SpoXk z6^zsH!WQqq#dA6NBswOMU6s-3(Gm+$nzUq^ecQ>a#?No-GHqH=UC>YJNaRW5ahtBJ za+{sMbwMmO&RxFw$v0*IPq6J7BKvqqYku^*A^m2y|13K+OQeu=8U#SDu^@JoNy%OW zTkbCj&yiOC<{u+0N4MW1x58bVcSXu^MxE*_jh!={&x8&td_Di$WZzL%# zK9mERIo5gdd1fW^Aud9s@Y4RlPO3(i#28wI-gK{+s5DnAHY(880=+l|bOO%QMzC^qK-Km9NTux-*f1%I z@OjM6J*@hkpB&;w)^#WG4dt>X51l2wRkKg>W-3;DL@=cg9P~2?)Ym3?FFJ$zfETsY2%H5))yO!F73~6sc_MHqx<2 zVY4zX-x|D!8ZCyC&FQxu3Nk?No|6~BtagiFO-44gmfm()l6pKX7&k1SLA+hOr!$0qQ=@riGM@>nU$J59bo*5EkAp20QKIo!%R;263_2q~pU? z7d($aIAGJDRQ$G1rP*<)n{subJpqSD@jabfJh3Q&wOJfmg{W7pX?)$3dj|eJxh>CtPytt)$gn% za16+;X+0|eU2e$v1o}VnA|TJ6^{6|K#6FWxVE!Zb1oFu$k0x#;b`F`q@kjoz{gJ=U z{|RKo-yh{s3>Y(Yt|j2RhkpJAt^#>Emq!Hw68qqG!o@%GMj&6?beHr*VoSXeWd6vb zfL!#YyPOjeJC06J`Xk3vh&U(gzyZHKX}kgCk6Z|U|7$zEMu18_(}4Vsd<)2XFYX9y zBC$8I2CzT!S3pilydy4$uMZk9{E_49iF$+Em&B0R&Nc&|5^0v@vB-Uo$K=hB?3K)AM#P2c{Am~tx1U2cu6Vgi1 z+vs>Yr!|5DZ02h&gVOQefB#z3`TKM(0*Elk5iKB$=o|6<@EW3(-(QDcdkCB{d2L`m zpxDaiKvDcoUkQi6^AskK@PR$XOLv0Oe@zPk*<)ZrlAS`Ro2m%n5f<#3KM#uUYM`wQ z_7LQja1aUJ|8v1vus - - -
AWS Cloud
AWS Cloud
Client / SDK
Client / SDK
Application Load Balancer
Application L...
Optional
Optional
AWS Lambda
(Proxy)
AWS Lambda...
Amazon Bedrock
Amazon Bedrock
Parameter Store
(API Key)
Parameter St...
Text is not SVG - cannot display
\ No newline at end of file