[Terraform] Websocket Gateway ๊ตฌ์„ฑ

๊ด€๋ จ ํฌ์ŠคํŠธ
https://blog.naver.com/sssang97/222923857318

๊ตฌ์„ฑ ์ฝ”๋“œ
https://github.com/myyrakle/terraform/tree/master/aws/lambder-server/websocket
API Gateway์™€ Lambda๋ฅผ ํ™œ์šฉํ•œ ์„œ๋ฒ„๋ฆฌ์Šค Websocket ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ๋ง์•„๋ณด์•˜๋‹ค.

websocket ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๊ฑด ์ƒ๊ฐ๋ณด๋‹ค ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์šด์˜์ƒ์—์„œ ์‹ ๊ฒฝ์“ฐ์ด๋Š” ๋ถ€๋ถ„์ด ๋งŽ์€๋ฐ, AWS์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” Websocket Gateway๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„๋ฆฌ์Šคํ•˜๊ฒŒ ์šด์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๋ณดํ†ต์€ Redis ๊ฐ™์€ ์ธ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ปค๋„ฅ์…˜์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ Websocket Gateway๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.




๊ธฐ๋ณธ๊ตฌ์„ฑ

๋จผ์ € git ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ค€๋น„ํ•œ๋‹ค.
๋‹ค์Œ ํ…œํ”Œ๋ฆฟ์„ ๋ณต์‚ฌํ•ด์„œ ์“ฐ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.
https://github.com/myyrakle/websocket-server-node

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด terraform ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.

region            = "ap-northeast-2"
server_name       = "foobar"
environment       = "prod"
codestar_arn      = "arn:aws:codestar-connections:ap-northeast-2:...:connection/50e...a29735d"
buildspec_path    = "./setup/master/buildspec.yml"
github_user       = "myyrakle"
github_repository = "websocket-server-node"
github_branch     = "master"

codestar๋Š” ์—†์œผ๋ฉด github ์—ฐ๋™ํ•ด์„œ ์ƒ์„ฑํ•ด์•ผํ•˜๊ณ , ์ด๋ฏธ ์žˆ๋‹ค๋ฉด aws cli๋ฅผ ํ†ตํ•ด์„œ ์กฐํšŒํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด API Gateway๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์žˆ์„ํ…๋ฐ

ํ•œ๋ฒˆ ์žฌ๋ฐฐํฌํ•ด์ฃผ๊ณ 

์ €๊ธฐ ์Šคํ…Œ์ด์ง€์˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ–๋‹ค์“ฐ๋ฉด ๋œ๋‹ค.




์‘์šฉํ•ด๋ณด๊ธฐ

์ž๋™์œผ๋กœ ๊ตฌ์„ฑ๋œ Websocket ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ์ฑ„ํŒ… ์‹œ์Šคํ…œ์„ ๋Œ๋ ค๋ณด๊ฒ ๋‹ค.
์ง์ ‘ ์งœ๊ธฐ ๊ท€์ฐฎ๋‹ค๋ฉด ์•„๋ž˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•œ๋‹ค.
https://github.com/myyrakle/aws-serverless-chat/tree/main/frontend

๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋„์›Œ์„œ ๊ฐ๊ฐ ์ ‘์†ํ•˜๊ณ 

ํ•œ๋†ˆ์ด ๋ฉ”์„ธ์ง€๋ฅผ ์˜๋ฉด


๋‹ค๋ฅธ ๋†ˆ๋„ ์†Œ์ผ“์„ ํ†ตํ•ด์„œ ๋ฐ›์•„์˜ค๊ณ 


๊ทธ ๋ฐ˜๋Œ€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ปค๋„ฅ์…˜์— ๋Œ€ํ•œ ์ •๋ณด๋„ ํ…Œ์ด๋ธ”์— ์ž๋™์œผ๋กœ ์Œ“์ด๊ณ  ๊ด€๋ฆฌ๋œ๋‹ค.

์ด๊ฑธ ํ†ตํ•ด์„œ ๋‹ค๋ฅธ client๋“ค์—๊ฒŒ ๋ฉ”์„ธ์ง€๋ฅผ ์˜๋Š” ๊ฒƒ์ด๋‹ค.




CI/CD

CodePipeline์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ณ , ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด 3๊ฐœ์˜ Lambda๋ฅผ ๋™์‹œ์— ๋‹ค ์—…๋ฐ์ดํŠธ์ณ์ฃผ๋„๋ก ํ–ˆ๋‹ค.




์ฝ”๋“œ ๊ตฌ์กฐ

Lambda๋Š” connect, disconnectm, default๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ, connect์™€ disconnect๋Š” ์ˆ˜์ •ํ•  ์ผ์ด ๋งŽ์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค. connect๋Š” Gateway์— ์˜ํ•ด ์†Œ์ผ“์ด ์—ฐ๊ฒฐ๋˜์—ˆ์„๋•Œ ๋‹ค์ด๋‚˜๋ชจ ํ…Œ์ด๋ธ”์— ์ปค๋„ฅ์…˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ , disconnect๋Š” ์‚ญ์ œํ•˜๊ธฐ๋งŒ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณดํ†ต์€ default๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ํ•„์š”ํ•œ action๋“ค์„ ์ •์˜ํ•˜๊ณ , ๊ทธ๋•Œ๊ทธ๋•Œ ํ•„์š”ํ•œ ์œ ์ €๋“ค์˜ ์ปค๋„ฅ์…˜ ๋ชฉ๋ก์„ ๊ธ์–ด์™€์„œ postToConnection์œผ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์˜์•„์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.