[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