From d5e61dddf54d7675a83dd1b3474f5a3d235fcf23 Mon Sep 17 00:00:00 2001 From: nsxshota Date: Fri, 1 Dec 2023 12:09:31 +0900 Subject: [PATCH] add Cfn Output & Readme --- scripts/aws/README.md | 49 +++++++++++++++++++++------ scripts/aws/img/langflow-cfn.png | Bin 0 -> 11750 bytes scripts/aws/img/langflow-cloud9.png | Bin 0 -> 46825 bytes scripts/aws/lib/construct/backend.ts | 4 --- scripts/aws/lib/construct/network.ts | 14 +++++--- 5 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 scripts/aws/img/langflow-cfn.png create mode 100644 scripts/aws/img/langflow-cloud9.png diff --git a/scripts/aws/README.md b/scripts/aws/README.md index 320efc02a..a7be98720 100644 --- a/scripts/aws/README.md +++ b/scripts/aws/README.md @@ -1,14 +1,43 @@ -# Welcome to your CDK TypeScript project +# Langflow on AWS -This is a blank project for CDK development with TypeScript. +Langflow on AWS は、 Langflow を AWS 上に展開する Project になります。 +この Branch では、AWS CDK を用いて 各種 Dockerfile からコンテナイメージを ECR に展開し、ECS、Aurora MySQL を用いて Langflow を構築します。 -The `cdk.json` file tells the CDK Toolkit how to execute your app. +# デプロイ +[CloudShell](https://us-east-1.console.aws.amazon.com/cloudshell/home?region=us-east-1)を開きます。 -## Useful commands +以下のコマンドを実行します。 +```shell +git clone https://github.com/aws-samples/cloud9-setup-for-prototyping +cd cloud9-setup-for-prototyping +./bin/bootstrap +``` -* `npm run build` compile typescript to js -* `npm run watch` watch for changes and compile -* `npm run test` perform the jest unit tests -* `cdk deploy` deploy this stack to your default AWS account/region -* `cdk diff` compare deployed stack with current state -* `cdk synth` emits the synthesized CloudFormation template +`Done!` と表示されたら [Cloud9](https://us-east-1.console.aws.amazon.com/cloud9control/home?region=us-east-1#/) から `cloud9-for-prototyping` を開きます。 +![make-cloud9](./img/langflow-cloud9.png) + +以下のコマンドを実行します。 + +```shell +git clone -b aws-cdk-dev2 https://github.com/kazuki306/langflow +cd langflow/scripts/aws +cp .env.example .env # この後envの設定が必要ならここで追記 +npm ci +cdk bootstrap +cdk deploy +``` +表示される URL にアクセスします。 +```shell +Outputs: +LangflowAppStack.NetworkURLXXXXXX = http://alb-XXXXXXXXXXX.elb.amazonaws.com +``` + +# 環境の削除 +`Cloud9` で以下のコマンドを実行します。 +```shell +cdk destroy +``` + + +[CloudFormation](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/getting-started)を開き、`aws-cloud9-cloud9-for-prototyping-XXXX` を選択して削除します。 +![delete-cfn](./img/langflow-cfn.png) \ No newline at end of file diff --git a/scripts/aws/img/langflow-cfn.png b/scripts/aws/img/langflow-cfn.png new file mode 100644 index 0000000000000000000000000000000000000000..fecdeb70cc40e0fd263a9c03e82dc73df90e14d8 GIT binary patch literal 11750 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 V4c2X|-usPX^+ literal 0 HcmV?d00001 diff --git a/scripts/aws/img/langflow-cloud9.png b/scripts/aws/img/langflow-cloud9.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd5023533df94a9e241e3402e8ff2d32861d062 GIT binary patch literal 46825 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
lH{Y6 zuLJv7SmKeOJpy+XzAj{T_PXTG`_Jm7;P|b1VqP8@_*XceP(;tX+kElwMIRWp)J*Nt+poNZ_P+=jrgh5O%l&DZQ9p_RoWDO1M6Y17|KmH% zaNWdV?a(I@{XqC<9r@$_Sw3vac+bduT%rF5;qSoFuzF6bm@4s5GiuDAy=-D^ab2@V;xVx&iG^hjdzo0|QoJC}|Tw>3x3$ zZgz(02JXl1C0F2XPT&)6mku^^ChS;RWqUB1@%5!AE(UO?(y(i+9Wm;aYoX#yyZU$4vtF)F^3*qpF9%L!qY53d?SUxZatyG) zLceLZFIG5(Dg>#Sx%WvD9Y-Sz9p?4CM#T$L#_8~fG?wdkscrXvroo=Gj(lvdy0JM1 zW(j!i5|bOKms{-yPCB{xWX>|{H718)9x8M|=TWaLJWp0>A=iMovlsrG<=Om?0-wu< zj8qtMAf74%KM0M6X<*0Ez=cAwJd0oHRx7Oq_zXBtH@nRGfywVG1ct9SxYHktbs1vfPUaa3Xd@C)U7I&Y2CK!WEVH?oYydSvmnP}lZXJfNC)^@r4 z$wqv?wJD>wA=9L?cKlkya`@p6eeDG7c||dQR^j7vxzE<;1tVulpmnt<(JM&6XZ#g7 z#qV-iyxQU~^Zsstef;`(i4i!NlS;&9hLXYus*H@7*6bfo;fhN02ek@A4La>Y=~f-9 zjN0gGcKTB^ij>Dd0!_49qe<*1WmV?ancf#;hvqLh3U9zeEttyxvgUNpDsPqq+JtR# z_+P_YPd9hs4`-}^{A5e=#xIWAL2cK=p>nemwZkkAu;^1MBo+att=IR8PgnH@4@WTy zmrG8U>2Ah;KO&S+&4%K*-xefN9fmeeBRl*ccl2Sp)A)75Pwx&cn0ay#NReEX^E)xq zeu@`AfETz8S+|r(~q?|LzK)~^CgZ_nH_F86Von;Sadp`l*9*Mc1E4v($tH4;FkI%?&R~GUFXIj$t*}6L^##YD41vdM zmeLx8%<4LwL|nbR4qHwcoZjh_>C}NwelyL}`s&b$)}VU~2PA60`%BPU*I$#VEp>%$ zsKPooE1xxX!EXmgL#qa5zl$RVA5Av+9oCh1@EmO9GZ0*XRx3BCje)<{~H=;pOv9?Y*r z@K$~jQ#6>4*!FScO5vOmF3bD1Q_R6xXkz^6X6$+V^YxTas^LPZMB=p-!ux?Q1I{}r}+XdkIU{s&HH1NtO0xu!MNIj zQaL>#_ann&d-;(<@mVV>ALL23SgN zLaIV?5{KoKe8uurKBUcXH~O%u&HjGkK6;$(-emY0!I;a~M=^lx5_>^`OF^Uq=$395 zVI6cIv)RR?kW802p2;RP7)wen`}I`BB;w(Ig?rI&)f2Y@Z1Ff4)Y{9HBB0HZcD06I zhmmVLW#n%tK6{QwKmJgl5QvY#$)Mf%W&A6jLcsl&FPdBz=4VE^7(CJI=&V-W0&KgY}wjBQQ(GRIKpP? z&OqNEAbn=7#$+D{^7A+geL24Dt?a|X$FLZlggH-yYqw;ByYLUrD+6rTg zyE|2xfoadN51dDn+El31{MCe9dX_U8*oYv`=Z{$q7T(v)j#UkzdI>^(#N8RI|k6h-Qcrmr}TOt4Goc;s~aFW_r^9Inm|#78Ts;2o12FY5u-Dde^Q? z2tURZO~?EF7@M4*iIm5ldr>w>d?5NqxHOKhUXvXzT`sn|iP%>slFBMra9(q+QK52% zDMD<3zpp?>nstN(4twv4kHuGwS@EW+VD#lg_p_2_i(l z%YnG9hGhn~j1@kS^WKhWms5`<&~jj?7s`Gg+H1bO8{lrM@rNkWgrx+uB;9?9fbSI= zS?+3j;u`t|vwl5Nj@+S7AuKNoS)&G^G zA_PLl6!_H6VmdUAavQ?wu<)+jfSG*b;7yl<5s+WlBdtk0!k2WR!iAZH^Oi;~i@yLD zk&x+O9RvTXfNvNh`|x}m-oKfN!l;7tx!5+hlm!`N$2d8S$+hedh{fDKX zvD)ILJ~wJv>?^%We3qd1jr`@)4$x0s6CN>!Ewtxc1q61>jdj1=J@VRLFiLZB_-`LF z-&yUc5ue$-6Wfg~0tx$SgfWRw^E`D}E*a1^;x|Dkiq!^ijA_@iFf2MAFt|tO>XsTf9$k-GD7*o5r5LKyUUGn8X4%5= z%~)O_*Oh93U)x7HYhV;xBZnen$nw!?0Qb%TqHA4heH@?)^nDY3f7dRJwOAQz;A@a_ z+`*urj~}OueyxCJ7$8R@@bXyrtt?d-N~x#(9gttd?+yUI>+W^2)~D|H)`@YA7`C&j z4D5;Xsal*7K^%JFFJ`A-2;#R6)N;KCI`LrM0pn4=bxz7?)up*t9q`Rr-8&FdgzkS1 zi-eDSnOty- zzvu1ZDs5Y5@psu;FhjjRYZtLmf5=p0pE94K6M3uekgFk1ecx>==s&15{h`11{(5JdMRP!!<6?kC9JtYc8*v z632_(jInIzs;uT)J4(pa+7?J1@`h_zq)WS=^pZu_XkM7jM*{XLkdz91qWOc=v3d^p zRI{cKIdiuPQjIX`J6(~M%_p{V-i+|&%=X~vG&zJAw7ZQ&2n15hpe)A93_~7~iPdn1 zuzNN`*lv!@2%$xL-;yz03i3Eh{{NUF;eF_eZ8*D8-`tG%1fmukKiN* zH3LdNH~*$o#jFP$ycPhW=&>J8+4E_0I8?sgmR(s}I3tWrHrm&|^-gJ#Y}ig+Y1O>eUOzr-P1 z)XUI3qw+I>cBY@)>(azm=TLz}+a0XitkmHr!dK#$Of*MMb&6A}=Ds*b(X9|@V9iOTi zZT*%14c+>mU9AoJ)6(YFO9s!&0hYG62LYr=p-mU{)C;j24?LU0^`=pg=PNkKZeL2- zS=`f7+6%3J?{r3^Ua<8=Xz&~x7hzye8_;^(_yz$rLZZ6jjow_=MO*&t+y_Gi%cSRo zPwcp8jRB~KiQU)P&@nBXbryk=?N~zx627N=)MBZ`^E6&{PKo#4${I;)nx^@iMH$he zGk1F!@Xl60YH3`Q$X97LhN&2gy531eHyEF?3U#E@q}|>XQ@I&@Dk;(147kckEl}Iy zEOfxJDHF^XR#^|EjWW<061;!I?h<7h(rI#41mccym(+Tt-h;M1?Wh-JuDwX8#T3bc zs>vE;nqw-v2EaG->)btmoSmk`B%SHq(xJS6ez0`kl`fSq05%qu|HLI3PRYDJIm=_- zQ3!@tK;cZhs&g~)61^yER;4?F9X#PQ;HZ5v!R$lKky+tU7jtZlRB$?5eEU@|`!lJ+ zpdIh)oF^B9Gd@OI-o`7meD0i(z$elmOU-ZXxmP|WI3Kr*t94i@XNI(=aJVGQ zvWzE-gDs_LHV5W31)C`->x@VZ2Hl>+F_dI0Ot&&)&w;A7hVsLui&ee?=$4QwN$zaX#v+A_XBeh;2q}RGTJRFIOrlMmA!tQ3Wmoc%HK9YBk-&(whHS7!y?s752kHo!!Qn%Lg6NR?lIG?MypcS z4zH5lYQw&1w{h&jaAzsVaP8Z zFBFeV`I5~zfEIxLNU6#UnCrgtUP80psELBTOBx4p_q9c)fTs}-EvN0^oM=W!^(R@< zDOdDI*omZ$bl{WqH+REnIWMwaWeiQ;SE=(UrmGqnW60rBx;5B_wC5I?TYo zlveK>7rp9URv=ylmfF@+^;4@rAg6(f6@*iFlQ+a1_t<`7uj1+He@CvVP=;G@4`;qk zENKW?xUKwXK9)W&`Sj(%?~7bss_WlrBud-DIyjJg-WUi0dAKP@LFNfSsF|YicqG$dMEDWZ{;jems_9#{Q5;zB! zLZ>vGwQLpTPTfkijTEeMw0-cwt^ydcYA6}oeeLnqfvorOjYWLEzczZVKIJ`vkgJk&h8yPc!y-uH;#(e)Su|vwcvdeZ(cfkqe#E%+o|b`#k$#m6Je6jqINcb;AJ)TrilC>B!$yLtP!j@D(_0VXJlw%SW3*G5zuPUj;mCpwJou*d%U5GijDu6=a?XjBx-amDTbwRc@nO>OHM z14ytyq7-S;6a*2Fj&umUDP_}}(tGbkdIaeL(gi|Oz(SK=L;(>(4M>q9EkNi22_<)V z_St8teKN#UFr*j1c_w#7=sCfsIjl16-Qu5tDLfkY%TvN^jX2B7ZfvYV0ubDJ@x(lU( z{5Rw%+!R^^cQKaf;Zqf_(}m&j58FB7JtIqX@5fGvWqoaeojd_5>U8r`YMOBy-P^}} z=0=Kt#Y-dzcs0+gu?v1F-4MKJQg{|CNGnG|uu?^xy$5***^c%btZ^~(o}JAL^O&3n zqI@JS&uIJr_}7Zhntik{Bxn@nN&f!f=c;1mMzS2M@h#0hytk8)@_}acaZi-d~THI0~DX-*3428Yu7qgizMjG2>-hvdhf$zyiccB+-z8W zE}dh46R{S0G=|fYN^o;~daKnxPR*0mdKR}!vB^t5Up}0DAc?>ne@oGfn+@NL6aKRG zaxP+*l7j?FsmS_QI2TM4T4K0IN>k81w)!ka@|An$rCTE5PYI%VSqRMGETK;cwwbQg z$~o+t2bHvi&2OV-Jx`yh2%#&=-k~)2UXq9I^Kuzsmnq{oMIU6*DPp51zGPvkY%Ta$`k2R^h=pq~;E6{CL2MBD;gUosysk6Y>$LKVU*+H2no%;OhlK`*f z{Dn-o#R{7_Q+CfLPQdWxy*Zmc(ToQxXAQnQe^y@`7zBYoP5t1)AK!MHQ-%3G^Q~2A z+sdjZnPPcfaq}Au(Z>bk{g57l5-zP*LE?^Z_f9@L*|(5teLF3>$Q5w_MG5qUtmY`+R^Z{O(UHf!OkSsh6yBq7TLCjo|0KEdR` zn&smG=v$BF_@;Yn>QzJY@*Xu*sYeI=M0LX@$SZDS>u$i)I%jNQAGggy9AK@+^|`_< zT640e;Wx7bwvKm2iSRi>ZbKAtBK{(_o%NqQ{G(%3Uj_P^ZDm&WRY_1otC z&%TYmuD+irN>p*(pB_>}v`vbwL^&}2R(;c~^0A|Fo#E1|BpKs&Mj4IwUiUrp^ovIH z`4A?d@lxPv8*(Mw-a}1n7lFw(subV}f|nlJjyV1IqoGk*h}`qH?0$;m4v#$$Dah7EY;N-|HzW?WXtv;fpme=ZH>B@08; zW!jpGEvWs(bof1&&(q;ZUQ0NwO4ia2kLVnrT7!8umT3g)?|j=RL^olCCs>9$?U1De z5pY^CsGX+3Yv@`GgJqTJBA?yr+dcOsoKwnKGHl3~QUB{@f~mByLKDN0FNUiTEl09B zEczft1||es_{rs0pPJl`LmyrqI&})l?+pn^kj5SD2Mv47i;(lsiJc%B@K*8ajckmm zw~0V7Xy|Qwi~vf&^R@2OwiV<{Iq%|&xVl5{nN5365yNi~=}alu+ni>%Nw5@|iGZ5$ zHww^&hU)m_ z8=jpj_L_`m)16G-TvkrLMjq*djE6Xdj@WOuj;We*{id^ua$x$7nIjd0=W9%pmT{$e zL>6Ut+d)I+cC5(vk~8mmrs^Gh3~B?5%3fU3>3g)h%%fD%fQ=gumtAI+JTm6gEh~mH zJP51MUhp7!+XiX#I~V>`^!_)+6E=PRBFH4rAgvY?OWgbm z%9~I9O-gr(p}oOu;Bxr<3zHX7I)2SjYQu{X0iIPa&fD{dI>cJY!6|$%)&=F_ z*e?tVk$D2UReFi1UU83UnhC~8`xnSBQM#K{e9tsGFz3cFUqbx+vDXoIPu|#3!WATW zOszh9K^CPO>S{g9l|#lSi%L)=LO>2fO((ho01QBN!UQtS8d@Tz5keV?#FBhTQlduy zVMDH!D7_$!vUF1)9OEzyIXeh@8cpHOtjrpXF=XG1*B0(nIC2~r(d9+R?ONxfLr$Rh z76@_po_=l=PVCh!_DWUsLkj!S0K%$X-ixLh=Sd$_*Y$HYat}4j?8&UwIpH!C$M%9Y zriZ_Ve~rqN%oiM?kR2J_2~S@Pf0*hfInV)rNLVzwp3M>3VSBSUYo3-kdd;$_SeD+5 zJ^hidTuvo^QPZjtDH3nXgTxdRk1WN@t3SEhqAApaymh{zk{?+c$mj*0HHP`;yjKn8 zwaehM`nZAxp6Al%!@t~JXO`emw7WfV*XGXJ+eKTeWi5CFRm(d)NvoK2s7TFn z7G!_*DLtRNmt5-9atNN^hj8i23c`*Ccg5!nX|0uaCQxfy_vhGU4@21b>~1B02g6@> zB?!v*22~&rTSz+-7&X_%z9|wFrrHq2c=Rpx(W)9%@GLe_&%AXThD+M?XH(kbTw3;T zDSo|y=C>KKV+cf$!z4!r!yq(<;c~%)2db8{OfXDQs#j}yqK$S5nUkbmeyls8Bu~F@t{o_Z^rz#J+iu(x1?#Vq@|2c72zyM;WiB9JEcqA9qyKfSJkml_m zpIHAElyG5v*LB2V<*rlBs+fr`H*rAXYOx8 zwolp{SoMenADBZl6AOR>qR01P!dNGWUwGJdehsakmXc2#qyvBY(mIJS^8;Dg91|1s zM7IJcvUsMLAD>uvu2{%R^DYS~)+3R#FN;zoUFl7!tDrr`jg{~HK`eK88iSDC7^nDh z-Up%%stdCE&m)3A*j=T60Q-&kBN%J?>LQGMQ3nONZ@-|-(JUZ%wbqF1-Meb<@efgj zdPPX`XheZ?K*3c;xO!>t&J9$)r9b-UD>KI(_gJPNhE?{#jx++6I&=6w>45e-Z^8+> zN-6BTZrMY|tNmWY zR|oq#6|yMIF1) zzNjj<*-JC*LR3CZVWbA>d)j>BDcKAf(oS6 z1D11V8084rcKITxouRP1v1L+QCCyj4SPeJf6w!$3Z7D##Ul-k7IG7F)h?~~@ATv=s zI+@8?S&#H|RnippUl-9{21BogpWX9vBJ7YWiN`$FM;&8?ilbs}Bv>1rT5xQM5&=Rq z2ctyVD-0Y1iSrm7md-G1Infv(an!qGFSBn+L$j$N=OHvyPgV$-K}i=iqov3w2-?7Pd${8-DTd2>2 zm$$VTyu)4=+kXdkK#YYc)XYt?6#1-v2>tv9>!(lSP3zr?4YN4oM- z&K%SwzQGRmX-fq3rkN3=r?St!rk#PBJ*J(@W?0xumf!7ENS=u5if2d{wm(Gz#v~=T zm1^ag$3BhG4`?cL=tXx$v)q1CPBC2pY1XWy>}6cjdg<+z!E4u0ZEHMJvPIZV;_dLsQa?9u3;a>XJq5CMtB?+PndsY=?weo$LP=|Or8F0Tfn7Z^b;V=P( zwns@qPOfLP}ebQt>@V z2)Aues@{jg16_qeA4${%8!wNHI@=|Cjl!m#rIDGU+|y{8r!t&eS=NUJavw{oCV$l#b?@VNIrrB|gwOOo8YozWC~nw{Is8bqEcyB;@gtJ4jUCDt z2%~f#L~wJ1vuu*n1G9U(=R0o3%O&_Uf+N@vvEj2;-;w1axg((^Lph4B$23*OYOf_% z4?I@~`h|pFepz+52-P+=`gU?Zg@sFXNlhOXKm<}sdL$5lVwwp#?b?cPd;tmth?qkFQQN`Emm^kx9uX+ z%wQwIu~v<&F!agbSovR4CyPIggQK|p|prK*dFwrP#>`kx~ zLs}?p(XP2Kan;OhC>)-6rShrvs&Q+fltvP&FN^SGsr3N#`ds{Nt><$V)amWV2&?9DW-Eaz}59UD6x&W;QX^r&&b`=;gb3Wyx0Rcw3D6ATTz^yh(Fc zy;K@5Qu-ZP&s#i{TqQm@cjU>u~JMiTgGSDq9rs%8nfcJgLpds42S z-EgZ`Ay^h4d5JY$sIh}MpEtt3^%1doHnrnVBcmU~&=9F*XD3Y*pJH2DYIl}9w&7QH37 z*2p0_8L=4VJROjQGZYJ+q`2?K$yJAJ0nGP6NsnbaN!;=JKWSvh{&&Cc#o@$Ap@_a( z7Ed0Cmpx!yJWd!8`ljYqxqeQrTv1pr>hu2h1X%VyVKCr+bh9adT!$~AdHyKc3JtEjv!Iat|B z`HQ5AfE4BhIHU?@q46juKZ;|WVCQ#`l4X4!jqQ+bQOCk(WCLH{G*8E7 zWy&Qu1pFsuIIuSbq}!q|l!kZOx6UP5o7EQrSAvftfL-}%Gw`E0oPhKp!Flg3@t=f= zzi5Wu_--|%5P=_q|84>9+zgL`njW&eIJ8PXPg920SeA6a*pV?2+d zJYxQOTfg7`@9!2$Oj>Zs!2;cKFK(hn9p%1N+r$Ry&qEvi-|M4T`?{2uRTV4{&BX?UFQva&k9D%xAGZ zoMf&&Ea<=RM7)JO9QaCov$!+vvf{IVh-iR5?t@cN-L0^=JJ5-B2>U0TlI@KgVA=NdNosZh`=A z5#n<;KPJpC6FyPek`+*ZzhSt&!SiQs{kkgwsV}qiVApwyewIJN^2=C#KN#Ar08CCx zvHMeIKjE#vXl}^@s$=RK+48@hTtB8*Qr!26=H2?FPIRpq_Rvxzn=bmiaw+U`Zh_=as47dKZP0Y2rL$` zTGkIIe-`!mw^z{wxF!*(heq6@>KXLz06Sob2hMR(@Zh2^$hyZvg%WJ?YWzEC> E2WMS2A^-pY literal 0 HcmV?d00001 diff --git a/scripts/aws/lib/construct/backend.ts b/scripts/aws/lib/construct/backend.ts index 4ddff1e00..5c8540bdb 100644 --- a/scripts/aws/lib/construct/backend.ts +++ b/scripts/aws/lib/construct/backend.ts @@ -14,10 +14,6 @@ import * as dotenv from 'dotenv'; const path = require('path'); dotenv.config({path: path.join(__dirname, "../../.env")}); -console.log(process.env.LANGFLOW_AUTO_LOGIN); -console.log(process.env.LANGFLOW_SUPERUSER); -console.log(process.env.LANGFLOW_SUPERUSER_PASSWORD); - interface BackEndProps { cluster: ecs.Cluster ecsBackSG:ec2.SecurityGroup diff --git a/scripts/aws/lib/construct/network.ts b/scripts/aws/lib/construct/network.ts index aa9e48dc5..7dcfabaa0 100644 --- a/scripts/aws/lib/construct/network.ts +++ b/scripts/aws/lib/construct/network.ts @@ -1,4 +1,4 @@ -import { RemovalPolicy, Duration } from 'aws-cdk-lib' +import { RemovalPolicy, Duration, CfnOutput } from 'aws-cdk-lib' import { Construct } from 'constructs' import { aws_ec2 as ec2, @@ -76,9 +76,9 @@ export class Network extends Construct { }) this.albSG.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(alb_listen_port)) - this.alb = new elb.ApplicationLoadBalancer(this,'alb',{ + this.alb = new elb.ApplicationLoadBalancer(this,'langflow-alb',{ internetFacing: true, //インターネットからのアクセスを許可するかどうか指定 - loadBalancerName: 'alb', + loadBalancerName: 'langflow-alb', securityGroup: this.albSG, //作成したセキュリティグループを割り当てる vpc:this.vpc, }) @@ -127,13 +127,17 @@ export class Network extends Construct { // Create CloudWatch Log Group this.backendLogGroup = new logs.LogGroup(this, 'backendLogGroup', { - logGroupName: 'myapp-backend', + logGroupName: 'langflow-backend-logs', removalPolicy: RemovalPolicy.DESTROY, }); this.frontendLogGroup = new logs.LogGroup(this, 'frontendLogGroup', { - logGroupName: 'myapp-frontend', + logGroupName: 'langflow-frontend-logs', removalPolicy: RemovalPolicy.DESTROY, }); + + new CfnOutput(this, 'URL', { + value: `http://${this.alb.loadBalancerDnsName}`, + }); } } \ No newline at end of file