[AWS] ECS: Private Server ๊ตฌ์ฑํ๊ธฐ
MSA ์ ์ฉ ๋ด๋ถ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ค๋ณด๋ฉด ์๋ฒ์ ์๋ฒ ์๋ํฌ์ธํธ๋ฅผ private, ๊ทธ๋ฌ๋๊น ๋ด๋ถ ์ ์ ์ ์ฉ์ผ๋ก ๋ง๋ค์ด์ผ ํ ๋๊ฐ ์๋ค. AWS์์๋ VPC ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ์์ผ๋ก ์ ์ฝ์ ๊ฑธ๊ณ ์ถ์ ๊ฒ์ด๋ค.
๊ทธ๋ด ๋๋ ์ฌ๋ฌ๊ฐ์ง ๋ถํธํ ์ฒ๋ฆฌ๊ฐ ์ถ๊ฐ๋๋ค. ์ค์ ํ ๊ฒ๋ ๋ง๊ณ ๋น์ฉ์ด ๋ฐ์ํ ์์๋ ํจ์ฌ ๋์ด๋๋ค.
private ๊ธฐ๋ฐ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ๋ฉด ๋น์ฉ ๋ปฅํ๊ธฐ๋ ํผํ ์ ์๋ ์๋ช
์ธ ๊ฒ ๊ฐ๋ค.
ECR ๊ด๋ จ ๋คํธ์ํน ๊ตฌ์ฑ
์์ธ์ ๋ณต๋ณ์ด ECR ๊ด๋ จ ์ค์ ์ด๋ค.
ECS Service๊ฐ ๋ก๋๋๋ ค๋ฉด ์ด๋์์ ๊ฐ Docker ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์์ ๋์์ผ ํ๋๋ฐ, ์ฌ๊ธฐ์์๋ ์์ํ๊ฒ ์ ๊ฒฝ์จ์ผํ ๋ถ๋ถ์ด ์กด์ฌํ๋ค.
์ด๋ฐ์์ผ๋ก pull์ด ์คํจํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ECR์ ์ฌ์ฉํ์ง ์์๋
Docker hub๋ Github docker ์ ์ฅ์ ๊ฐ์ ๋ค๋ฅธ ๊ณณ์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ๋๋ ๋ช ๋ฐฑํ๊ฒ ์ธ๋ถ ์ธํฐ๋ท์ ์ฌ์ฉํ๊ฒ ๋๋ค.
์ด๋ ๊ฒ ๋์ปคํ๋ธ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ๋ค์ด๋ค ์น๋ฉด
NAT ๊ฒ์ดํธ์จ์ด ์ค์ ๋ง ์ ๋์ด์์ด๋ ๋ฌธ์ ์์ด ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ธ ์ ์๋ค.
๋ฌผ๋ก NAT ํต์ ๋น์ฉ์ ์ถ๊ฐ๋ก ๋ฐ์ํ๋ค.
์ ๋์ํ๋ค.
์์ฒญ๋ ์ ๋๋ค.
ECR์ ์ฌ์ฉํ ๋
์ธ๋ป ๋ณด๋ฉด ECR์ ์ฌ์ฉํ์ง ์์๋๋ณด๋ค ๊ฐํธํ๊ณ ์ค์ ์ด ์ฌ์ธ ๊ฒ ๊ฐ์ง๋ง, ๊ทธ๋ ์ง๋ง์ ์๋ค.
์ผ๋จ ํ ์คํธ๋ฅผ ์ํด nginx ์ด๋ฏธ์ง๋ฅผ ecr private repo์ ์ฌ๋ ธ๋ค.

๊ทธ๊ฑธ๋ก ์์
์ ์๋ฅผ ๊ต์ฒดํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฅ ์คํํด๋ณด๋ฉด
์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ ์ ์๋ค.
๊ฐ์ aws ์๋น์ค์์๋ ecr ์๋ฒ๋ก ์ ์ํ ์ ์๋ ํต๋ก๊ฐ ๋ซ๋ ค์์ง ์๋ค๊ณ ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ด๋ค...
์ฌ๊ธฐ์ ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ NAT ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง NAT ๊ฒ์ดํธ์จ์ด๋ ํต์ ๋น์ฉ์ด ๊ฝค ๋น์ผ ํธ์ด๋ผ, ๋ฐฐํฌ๊ฐ ์ข ์์ฃผ ์ผ์ด๋๋ค๋ฉด ๋น์ฉ ์ถ์ ์ด ์ฌํด์ง ์๋ ์๋ค.
๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๊ทธ๋ฅ VPC ์๋ํฌ์ธํธ๋ฅผ ๋ซ์ด์ ๊ฐ์ VPC ๋ด์์ ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ๋ช ์์ ์ผ๋ก ๋คํธ์ํฌ ๊ตฌ์ฑ์ ํด์ฃผ๋ ๊ฒ์ด๋ค. ์ด๊ฒ ์ด๋ ค์์ผ๋ฉด NAT๋ณด๋ค ์ด๊ฑธ ์ฐ์ ์ผ๋ก ํต์ ํ๋ค. ๋ด๋ถํต์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ecr ์๋ํฌ์ธํธ 2๊ฐ, s3 ๊ฒ์ดํธ์จ์ด 1๊ฐ, logs ์๋ํฌ์ธํธ 1๊ฐ๊ฐ ํ์ํ๋ค.
์ด๋ฐ๊ฑธ ๋ด๊ฐ ์ ์๋์ผ๋ก ํ๋์ฉ ํด์ค์ผ ํ๋๊ฑด์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์๋ฌดํผ AWS๋ ๊ทธ๋ ๋ค.
๋ชจ๋ ์ ์ ๋ค์ด ๋ชจ๋ VPC์ ๋ชจ๋ ์๋ํฌ์ธํธ๋ฅผ ์ด์ด๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์ค๊ณ๋ฅผ ํ๋๋ณด๋ค.
์ ๊ฑฐ ํ๋๋ง๋ค ๋ค ๊ณ ์ ๋น๊ฐ ๋๊ฐ๋ค.

ecr์ ๋น์ฐํ ecr api๋ก ๋ ํฌ์งํ ๋ฆฌ ์ ๋ณด๋ฅผ ํ์ธํ ๋ ์ด๋ค.

๊ทผ๋ฐ ๋ ๋์ปค ์ธํฐํ์ด์ค๋ ๊ทธ๊ฒ๋๋ก ๋ฐ๋ก ์๊ธ์ ๋ฏ๋๋ค. ์ ์ ์ด ๋๊ฐ๊ฑด๊ฐ?

s3 ๊ฒ์ดํธ์จ์ด๋ ํ์ํ๋ค.
๋๋์ฒด ์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๋ด๋ถ์ ์ผ๋ก ๋์ปค ์ด๋ฏธ์ง๋ฅผ s3์ ๋ค์ด๋ฐ์ ๋ค์์ ๊ทธ๊ฑธ ์ฐ๋ ๊ตฌ์กฐ๋ผ๊ณ ํ๋ค.

๋ ๋ก๊ทธ๋ ํ์ํ๋ค. ์ ์ ๋๊ฐ๊ฑฐ๊ฐ๋ค.
์ ๋นํ ์ด๋ ๊ฒ 4๊ฐ ๋ซ์ด๋๊ณ ๋ฐฐํฌ๋ฅผ ์๋ํ๋ฉด, ๊ทธ๋๋ ์ ๋ฐ์์ ์ฌ๋ผ๊ฐ ๊ฒ์ด๋ค.
๋ก๋๋ฐธ๋ฐ์ ๊ตฌ์ฑ
๋น์ฐํ ๋ก๋๋ฐธ๋ฐ์๋ ECS Service์ ๋์ผํ private ์๋ธ๋ท์ผ๋ก ๊น์์ค๋ค.

์ ๋นํ ์ต์
์ฃผ๊ณ ๋ง๋ค์๋ค. ๊ฑฐ์ ๊ธฐ๋ณธ๊ฐ์ด๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์ ์ด์ํ ์ ์ด ์ข ์๋ค.
์๋ณธ IP๋ก ์กฐํํ๋ฉด ์ ๋์ํ๋๋ฐ
๋ก๋๋ฐธ๋ฐ์๋ก ๊ฝ์ผ๋ฉด
๋ฌดํํ ๋๊ธฐํ๋ฉด์ ๋ธ๋ฝ๋๋ค.
๋ถ๋ช
ํ ๋ด๊ฐ ์ง๊ธ curl์ ๋ ๋ฆฌ๊ณ ์๋ EC2 ๋จธ์ ์ ECS, ๋ก๋๋ฐธ๋ฐ์์ ๋์ผํ ์๋ธ๋ท์ ๊ณต์ ํ๊ณ ์๋ค. ๊ทธ๋ผ์๋ ๋ญ๊ฐ ๋ด๋ถํต์ ์ด ์์ํ๊ฒ ์ด๋ค์ง์ง ์๊ณ ์๋ ๊ฒ์ด๋ค.
์ด๊ฒ ์ ๊ทธ๋ฐ๊ฐ ํ๋ฉด, ๋ก๋๋ฐธ๋ฐ์ DNS๋ DNS์ธ์ง๋ผ ์์ฒญ์ ํ ๋ dns lookup์ ํ๋ค.
Application ๋ก๋๋ฐธ๋ฐ์๊ฐ ๊ณ ์ ์ IP๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ณ private IP ๋ผ์ฐํ
๋ ์๋๋ ๋ฐ์ชฝ์ง๋ฆฌ ๋ก๋๋ฐธ๋ฐ์๋ผ์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด Network Loadbalancer๋ฅผ Application Loadbalancer ์์ ๋ถ์ฌ์ค์ผ ํ๋ค.
๋น์ฐํ ๋์ด ๋ ๋๊ฐ๋ค.
Network LoadBalancer ๊ตฌ์ฑ
๋จผ์ Application ๋ก๋๋ฐธ๋ฐ์๋ฅผ ๊ฐ๋ฆฌํค๋ target group์ ๋ง๋ค์ด์ค์ผ ํ๋ค. ์ด๊ฑฐ ์์ด๋ ๋ฐ๋ก ๋ชป๊ฐ๋ฆฌํจ๋ค.

๋ฐฉ๊ธ ๋ง๋ Application์ ๊ฐ๋ฆฌํค๊ฒ ๋ง๋ ๋ค.
๊ทธ๋ค์์๋ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.

์ด๋ฆ ์ง๊ณ , ๋ด๋ถ ํต์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
ํ๋ผ์ด๋น ์๋ธ๋ท์ผ๋ก ๋ค ๋ฌ์์ฃผ๊ณ
๋ฐฉ๊ธ ๋ง๋ ํ๊ฒ๊ทธ๋ฃน์ผ๋ก ์ฐ๊ฒฐ๋ง ํด์ฃผ๋ฉด ๋์ด๋ค.
๊ทธ๋ผ ์ด๋ ๊ฒ ๋ก๋๋ฐธ๋ฐ์๊ฐ ๋ง๋ค์ด์ง๋ค.
์์ฑ์๋ ๋ช๋ถ ์ ๋ ๊ฑธ๋ฆฐ๋ค.
์์ฑ๋ dns๋ก ๊ผฝ์๋ณด๋ฉด ์ด์ ๋ ์ ๋์ํ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ฐ๋ฉด ๋๋ค.
์ฐธ์กฐ
https://stackoverflow.com/questions/54848292/how-to-resolve-to-private-ip-of-aws-eb-load-balancer
https://repost.aws/questions/QU4rV4fB3hRqqRh3CaG1Pz-g/using-endpoints-to-access-ecr-for-ecs-fargate-tasks-on-a-private-subnet