์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ! ์ ์ด๋ฆ์ Kirill์ด๊ณ Adapty์ CTO์ ๋๋ค. ์ฐ๋ฆฌ ์ํคํ ์ฒ์ ๋๋ถ๋ถ์ AWS์ ์๋๋ฐ, ์ค๋์ ํ๋ก๋์ ํ๊ฒฝ์์ ์คํ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ ๋น์ฉ์ 3๋ฐฐ ์ ๊ฐํ ๋ฐฉ๋ฒ๊ณผ Auto Scaling์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ๋จผ์ ์๋ ๋ฐฉ์์ ๋ํ ๊ฐ์๋ฅผ ์ค๋ช ํ ๋ค์ ์์ํ๊ธฐ ์ํ ์์ธํ ์ง์นจ์ ์ค๋ช ํฉ๋๋ค.
์คํ ์ธ์คํด์ค๋ ๋ฌด์์ ๋๊น?
๋ค์์ ์คํ ์ธ์คํด์ค์ ๊ฐ๊ฒฉ ๋ด์ญ์ ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์คํฌ๋ฆฐ์ท์ ๋๋ค.
eu-west-5(์์ผ๋๋) ๋ฆฌ์ ์ m1.large. ๊ฐ๊ฒฉ์ 3๊ฐ์ ๋์ ๋๋ถ๋ถ ์์ ์ ์ด์์ผ๋ฉฐ ํ์ฌ 2.9๋ฐฐ๋ฅผ ์ ์ฝํ๊ณ ์์ต๋๋ค.
us-east-5 ์ง์ญ(๋ฒ์ง๋์ ๋ถ๋ถ)์ m1.large. ๊ฐ๊ฒฉ์ 3๊ฐ์์ ๊ฑธ์ณ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ฉฐ ํ์ฌ ๊ฐ์ฉ ์์ญ์ ๋ฐ๋ผ 2.3๋ฐฐ์์ 2.8๋ฐฐ๊น์ง ์ ์ฝ๋ฉ๋๋ค.
us-east-3 ๋ฆฌ์ (๋ฒ์ง๋์ ๋ถ๋ถ)์ t1.small. ๊ฐ๊ฒฉ์ 3๊ฐ์ ๋์ ์์ ๋์ด ํ์ฌ 3.4๋ฐฐ๋ฅผ ์ ๊ฐํ๊ณ ์์ต๋๋ค.
์๋น์ค ์ํคํ ์ฒ
์ด ๊ธฐ์ฌ์์ ๋ค๋ฃฐ ์๋น์ค์ ๊ธฐ๋ณธ ์ํคํ ์ฒ๋ ์๋ ๋ค์ด์ด๊ทธ๋จ์ ๋์ ์์ต๋๋ค.
Application Load Balancer โ EC2 ๋์ ๊ทธ๋ฃน โ Elastic Container Service
ALB(Application Load Balancer)๋ EC2 ๋์ ๊ทธ๋ฃน(TG)์ ์์ฒญ์ ๋ณด๋ด๋ ๋ฐธ๋ฐ์๋ก ์ฌ์ฉ๋ฉ๋๋ค. TG๋ ALB์ฉ ์ธ์คํด์ค์์ ํฌํธ๋ฅผ ์ด๊ณ ์ด๋ฅผ Elastic Container Service(ECS) ์ปจํ ์ด๋์ ํฌํธ์ ์ฐ๊ฒฐํ๋ ์ผ์ ๋ด๋นํฉ๋๋ค. ECS๋ Docker ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๋ AWS์ Kubernetes์ ์ ์ฌํฉ๋๋ค.
ํ๋์ ์ธ์คํด์ค์๋ ๋์ผํ ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์คํ ์ค์ธ ์ปจํ ์ด๋๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ๊ณ ์ ์ ์ผ๋ก ์ค์ ํ ์๋ ์์ต๋๋ค. ECS๋ TG์ ์ ์์ (Kubernetes ์ฉ์ด๋ก๋ ํฌ๋๋ผ๊ณ ํจ)์ ์์ํ๋ค๊ณ ์๋ฆฌ๊ณ , ์ธ์คํด์ค์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํฌํธ๋ฅผ ํ์ธํ๊ณ ๊ทธ ์ค ํ๋๋ฅผ ์์๋ ์์ ์ ํ ๋นํฉ๋๋ค. TG๋ ๋ํ ์ ๊ธฐ์ ์ผ๋ก ํฌ์ค์ฒดํฌ๋ฅผ ํตํด ์ธ์คํด์ค์ API๊ฐ ์๋ํ๋์ง ํ์ธํ๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ํด๋น ์ธ์คํด์ค๋ก ์์ฒญ ์ ์ก์ ์ค๋จํฉ๋๋ค.
EC2 Auto Scaling ๊ทธ๋ฃน + ECS ์ฉ๋ ๊ณต๊ธ์
์ ๋ค์ด์ด๊ทธ๋จ์๋ EC2 Auto Scaling ๊ทธ๋ฃน(ASG) ์๋น์ค๊ฐ ํ์๋์ง ์์ต๋๋ค. ์ด๋ฆ์์ ์ธ์คํด์ค ํ์ฅ์ ๋ด๋นํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ต๊ทผ๊น์ง AWS์๋ ECS์์ ์คํ ์ค์ธ ์์คํ ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์์์ต๋๋ค. ECS๋ฅผ ์ฌ์ฉํ๋ฉด CPU ์ฌ์ฉ๋, RAM ๋๋ ์์ฒญ ์ ๋ฑ์ ๊ธฐ์ค์ผ๋ก ์์ ์๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ด ๋ชจ๋ ๋ฌด๋ฃ ์ธ์คํด์ค๋ฅผ ์ฐจ์งํ ๊ฒฝ์ฐ ์ ๋จธ์ ์ด ์๋์ผ๋ก ์์ฑ๋์ง ์์ต๋๋ค.
ECS CP(ECS ์ฉ๋ ๊ณต๊ธ์)์ ๋ฑ์ฅ์ผ๋ก ์ด๋ฌํ ์ํฉ์ด ๋ฐ๋์์ต๋๋ค. ์ด์ ECS์ ๊ฐ ์๋น์ค๋ฅผ ASG์ ์ฐ๊ฒฐํ ์ ์์ผ๋ฉฐ, ์์ ์ด ์คํ ์ค์ธ ์ธ์คํด์ค์ ๋ง์ง ์์ผ๋ฉด ์ ์๋น์ค๊ฐ ๋ฐ์ํฉ๋๋ค(๊ทธ๋ฌ๋ ์ค์ ๋ ASG ์ ํ ๋ด์์). ์ด๋ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก๋ ์๋ํฉ๋๋ค. ECS CP๊ฐ ์์ ์ด ์๋ ์ ํด ์ธ์คํด์ค๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ASG ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํด๋น ์ธ์คํด์ค๋ฅผ ์ข ๋ฃํฉ๋๋ค. ECS CP์๋ ์ธ์คํด์ค ๋ก๋์ ๋ชฉํ ๋น์จ์ ์ง์ ํ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฏ๋ก ์์ ์ ๋น ๋ฅด๊ฒ ํ์ฅํ๊ธฐ ์ํด ํน์ ์์ ๋จธ์ ์ ํญ์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ ๋ํด์๋ ์ ์ ํ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
EC2 ์์ ํ ํ๋ฆฟ
์ด ์ธํ๋ผ ์์ฑ์ ๋ํด ์์ธํ ์ค๋ช
ํ๊ธฐ ์ ์ ๋ง์ง๋ง์ผ๋ก ์ค๋ช
ํ ์๋น์ค๋ EC2 ์์ ํ
ํ๋ฆฟ์
๋๋ค. ๋งค๋ฒ ์ฒ์๋ถํฐ ๋ฐ๋ณตํ์ง ์๋๋ก ๋ชจ๋ ์์คํ
์ด ์์๋๋ ํ
ํ๋ฆฟ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์์ํ ๋จธ์ ์ ํ, ๋ณด์ ๊ทธ๋ฃน, ๋์คํฌ ์ด๋ฏธ์ง ๋ฐ ๊ธฐํ ์ฌ๋ฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์์๋ ๋ชจ๋ ์ธ์คํด์ค์ ์
๋ก๋๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค. ์ฌ์ฉ์ ๋ฐ์ดํฐ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ์ผ ๋ด์ฉ์ ํธ์งํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์์์ ๊ฐ์ฅ ์ค์ํ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์ ์ค ํ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋์คํฌ ๊ด๋ จ - ์ต๊ทผ AWS
์๋น์ค ๋ง๋ค๊ธฐ
์ค๋ช ๋ ์๋น์ค ์์ฑ์ผ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ๊ทธ ๊ณผ์ ์์ ์์์ ์ธ๊ธํ์ง ๋ชปํ ๋ช ๊ฐ์ง ์ ์ฉํ ์ฌํญ์ ์ถ๊ฐ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ ๋จ๊ณ๋ณ ์ง์นจ์ด์ง๋ง ๋งค์ฐ ๊ธฐ๋ณธ์ ์ด๊ฑฐ๋ ๋ฐ๋๋ก ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ๊ฒฝ์ฐ๋ ๊ณ ๋ คํ์ง ์์ ๊ฒ์ ๋๋ค. ๋ชจ๋ ์์ ์ AWS ์๊ฐ์ ์ฝ์์์ ์ํ๋์ง๋ง CloudFormation ๋๋ Terraform์ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ฌํํ ์ ์์ต๋๋ค. Adapty์์๋ Terraform์ ์ฌ์ฉํฉ๋๋ค.
EC2 ์์ ํ ํ๋ฆฟ
์ด ์๋น์ค๋ ์ฌ์ฉ๋ ์์คํ ์ ๊ตฌ์ฑ์ ์์ฑํฉ๋๋ค. ํ ํ๋ฆฟ์ EC2 -> ์ธ์คํด์ค -> ํ ํ๋ฆฟ ์์ ์น์ ์์ ๊ด๋ฆฌ๋ฉ๋๋ค.
Amazon ๋จธ์ ์ด๋ฏธ์ง(AMI) โ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ์์๋ ๋์คํฌ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํฉ๋๋ค. ECS์ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Amazon์์ ์ต์ ํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธ๋๋ฉฐ ECS ์๋์ ํ์ํ ๋ชจ๋ ๊ฒ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํ์ฌ ์ด๋ฏธ์ง ID๋ฅผ ํ์ธํ๋ ค๋ฉด ํด๋น ํ์ด์ง๋ก ์ด๋ํ์ธ์.
์ธ์คํด์ค ์ ํ โ ์ธ์คํด์ค ์ ํ์ ๋ํ๋ ๋๋ค. ๊ทํ์ ์์ ์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ์ ํํ์ญ์์ค.
ํค ํ์ด(๋ก๊ทธ์ธ) โ ํ์ํ ๊ฒฝ์ฐ SSH๋ฅผ ํตํด ์ธ์คํด์ค์ ์ฐ๊ฒฐํ ์ ์๋ ์ธ์ฆ์๋ฅผ ์ง์ ํฉ๋๋ค.
๋คํธ์ํฌ ์ค์ โ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค. ๋คํธ์ํน ํ๋ซํผ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Virtual Private Cloud(VPC)๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ณด์ ๊ทธ๋ฃน โ ์ธ์คํด์ค์ ๋ํ ๋ณด์ ๊ทธ๋ฃน. ์ธ์คํด์ค ์์ ๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ์ฌ๊ธฐ์๋ ๋ฐธ๋ฐ์์์๋ง ๋ค์ด์ค๋ ์ฐ๊ฒฐ์ ํ์ฉํ๋ ๊ทธ๋ฃน์ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฆ, 2๊ฐ์ ๋ณด์ ๊ทธ๋ฃน์ด ์์ต๋๋ค. ํ๋๋ ํฌํธ 80(http) ๋ฐ 443(https)์์ ์ด๋์์๋ ์ธ๋ฐ์ด๋ ์ฐ๊ฒฐ์ ํ์ฉํ๋ ๋ฐธ๋ฐ์์ฉ์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๋ฐธ๋ฐ์ ๊ทธ๋ฃน์ ๋ชจ๋ ํฌํธ์์ ๋ค์ด์ค๋ ์ฐ๊ฒฐ์ ํ์ฉํ๋ ๋จธ์ ์ฉ์ ๋๋ค. . ๋ ๊ทธ๋ฃน ๋ชจ๋์ ์์๋ฐ์ด๋ ์ฐ๊ฒฐ์ ๋ชจ๋ ์ฃผ์์ ๋ํ ๋ชจ๋ ํฌํธ์ ๋ํ TCP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ด๋ ค์ผ ํฉ๋๋ค. ๋๊ฐ๋ ์ฐ๊ฒฐ์ ๋ํ ํฌํธ์ ์ฃผ์๋ฅผ ์ ํํ ์ ์์ง๋ง ๋ซํ ํฌํธ์์ ๋ฌด์ธ๊ฐ์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ๊ณ ์์ง ์์์ง ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค.
์คํ ๋ฆฌ์ง(๋ณผ๋ฅจ) โ ๋จธ์ ์ ๋์คํฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค. ๋์คํฌ ํฌ๊ธฐ๋ AMI์ ์ง์ ๋ ํฌ๊ธฐ๋ณด๋ค ์์ ์ ์์ผ๋ฉฐ, ECS ์ต์ ํ์ ๊ฒฝ์ฐ 30GiB์ ๋๋ค.
๊ณ ๊ธ ์ธ๋ถ์ ๋ณด โ ์ถ๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
๊ตฌ๋งค ์ต์ โ ์คํ ์ธ์คํด์ค๋ฅผ ๊ตฌ๋งคํ ๊ฒ์ธ์ง ์ฌ๋ถ. ์ํ์ง๋ง ์ฌ๊ธฐ์๋ ์ด ์์๋ฅผ ์ ํํ์ง ์๊ณ Auto Scaling ๊ทธ๋ฃน์์ ๊ตฌ์ฑํ ๊ฒ์ด๋ฏ๋ก ๋ ๋ง์ ์ต์ ์ด ์์ต๋๋ค.
IAM ์ธ์คํด์ค ํ๋กํ โ ์ธ์คํด์ค๊ฐ ์์๋ ์ญํ ์ ๋ํ๋
๋๋ค. ECS์์ ์ธ์คํด์ค๋ฅผ ์คํํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ญํ ์ ์๋ ๊ถํ์ด ํ์ํฉ๋๋ค. ecsInstanceRole. ์ด๋ค ๊ฒฝ์ฐ์๋ ์์ฑ๋ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์์ ์์ฑํ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก ๋ง์ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ณธ๊ฐ์ ์ด๋๋ ๊ทธ๋๋ก ๋ ์ ์์ง๋ง ๊ฐ ๋งค๊ฐ๋ณ์์๋ ๋ช
ํํ ์ค๋ช
์ด ์์ต๋๋ค. ๋๋ EBS ์ต์ ํ ์ธ์คํด์ค์ T2/T3 ๋ฌด์ ํ ์ต์
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํญ์ ํ์ฑํํฉ๋๋ค.
์ฌ์ฉ ์๊ฐ โ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋
๋๋ค. ํ์ผ์ ํธ์งํ๊ฒ ์ต๋๋ค. /etc/ecs/ecs.config
, ECS ์์ด์ ํธ ๊ตฌ์ฑ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ฌ์ฉ์ ๋ฐ์ดํฐ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
#!/bin/bash
echo ECS_CLUSTER=DemoApiClusterProd >> /etc/ecs/ecs.config
echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config
echo ECS_CONTAINER_STOP_TIMEOUT=1m >> /etc/ecs/ecs.config
echo ECS_ENGINE_AUTH_TYPE=docker >> /etc/ecs/ecs.config
echo "ECS_ENGINE_AUTH_DATA={"registry.gitlab.com":{"username":"username","password":"password"}}" >> /etc/ecs/ecs.config
ECS_CLUSTER=DemoApiClusterProd
โ ๋งค๊ฐ๋ณ์๋ ์ธ์คํด์ค๊ฐ ์ง์ ๋ ์ด๋ฆ์ ํด๋ฌ์คํฐ์ ์ํด ์์์ ๋ํ๋
๋๋ค. ์ฆ, ์ด ํด๋ฌ์คํฐ๋ ์ด ์๋ฒ์ ์์
์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ์์ง ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ์ง ์์์ง๋ง ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ ๋ ์ด ์ด๋ฆ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
โ ์ด ๋งค๊ฐ๋ณ์๋ ์คํ ์ธ์คํด์ค๋ฅผ ๋๋ผ๋ ์ ํธ๊ฐ ์์ ๋๋ฉด ํด๋น ์ธ์คํด์ค์ ๋ชจ๋ ์์
์ด Draining ์ํ๋ก ์ ํ๋์ด์ผ ํจ์ ์ง์ ํฉ๋๋ค.
ECS_CONTAINER_STOP_TIMEOUT=1m
- ๋งค๊ฐ๋ณ์๋ SIGINT ์ ํธ๋ฅผ ์์ ํ ํ ๋ชจ๋ ์์
์ด ์ข
๋ฃ๋๊ธฐ๊น์ง 1๋ถ์ ๊ฐ๋๋ก ์ง์ ํฉ๋๋ค.
ECS_ENGINE_AUTH_TYPE=docker
โ ๋งค๊ฐ๋ณ์๋ Docker ์ฒด๊ณ๊ฐ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ผ๋ก ์ฌ์ฉ๋จ์ ๋ํ๋
๋๋ค.
ECS_ENGINE_AUTH_DATA=...
โ Docker ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋๋ ํ๋ผ์ด๋น ์ปจํ
์ด๋ ๋ ์ง์คํธ๋ฆฌ์ ๋ํ ์ฐ๊ฒฐ ๋งค๊ฐ๋ณ์์
๋๋ค. ๊ณต๊ฐ์ธ ๊ฒฝ์ฐ ์๋ฌด๊ฒ๋ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.
์ด ๊ธฐ์ฌ์์๋ Docker Hub์ ๊ณต๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค. ECS_ENGINE_AUTH_TYPE
ะธ ECS_ENGINE_AUTH_DATA
ํ์ ์์ด.
์๊ณ ์ ์ฉ: ์ ๋ฒ์ ์์๋ Docker, Linux, ECS ์์ด์ ํธ ๋ฑ์ ๋ฒ์ ์ด ์
๋ฐ์ดํธ๋๋ฏ๋ก AMI๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ์์ง ์์ผ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
EC2 Auto Scaling ๊ทธ๋ฃน
Auto Scaling ๊ทธ๋ฃน์ ์ธ์คํด์ค ์์ ๋ฐ ํ์ฅ์ ๋ด๋นํฉ๋๋ค. ๊ทธ๋ฃน์ EC2 -> Auto Scaling -> Auto Scaling ๊ทธ๋ฃน ์น์ ์์ ๊ด๋ฆฌ๋ฉ๋๋ค.
ํ ํ๋ฆฟ ์์ โ ์ด์ ๋จ๊ณ์์ ์์ฑ๋ ํ ํ๋ฆฟ์ ์ ํํฉ๋๋ค. ๊ธฐ๋ณธ ๋ฒ์ ์ ๊ทธ๋๋ก ๋ก๋๋ค.
๊ตฌ๋งค ์ต์ ๋ฐ ์ธ์คํด์ค ์ ํ โ ํด๋ฌ์คํฐ์ ์ธ์คํด์ค ์ ํ์ ์ง์ ํฉ๋๋ค. ์์ ํ ํ๋ฆฟ ์ค์๋ ์์ ํ ํ๋ฆฟ์ ์ธ์คํด์ค ์ ํ์ ์ฌ์ฉํฉ๋๋ค. ๊ตฌ๋งค ์ต์ ๊ณผ ์ธ์คํด์ค ์ ํ์ ๊ฒฐํฉํ๋ฉด ์ธ์คํด์ค ์ ํ์ ์ ์ฐํ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
์จ๋๋งจ๋ ๋ฒ ์ด์ค(์ต์ ) โ ํญ์ ์๋ํ๋ ์ผ๋ฐ ๋น์คํ ์ธ์คํด์ค ์์ ๋๋ค.
๊ธฐ๋ณธ ๋๋น ์จ๋๋งจ๋ ๋น์จ โ ์ผ๋ฐ ์ธ์คํด์ค์ ์คํ ์ธ์คํด์ค์ ๋ฐฑ๋ถ์จ ๋น์จ, 50-50์ด ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ๋๊ณ , ๊ฐ ์ผ๋ฐ ์ธ์คํด์ค์ ๋ํด 20-80์ด 4๊ฐ์ ์คํ ์ธ์คํด์ค๊ฐ ์ธ์๋ฉ๋๋ค. ์ด ์์์๋ 50-50์ ํ์ํ์ง๋ง ์ค์ ๋ก๋ 20-80์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ฉฐ ์ด๋ค ๊ฒฝ์ฐ์๋ 0-100์ ํ์ํฉ๋๋ค.
์ธ์คํด์ค ์ ํ โ ์ฌ๊ธฐ์์ ํด๋ฌ์คํฐ์ ์ฌ์ฉ๋ ์ถ๊ฐ ์ธ์คํด์ค ์ ํ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ ์ด์ผ๊ธฐ์ ์๋ฏธ๋ฅผ ์ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ ๊ฒฐ์ฝ ์ฌ์ฉํ์ง ์์์ต๋๋ค. ์๋ง๋ ์ด๋ ํน์ ์ ํ์ ์ธ์คํด์ค์ ๋ํ ์ ํ ๋๋ฌธ์ผ ์ ์์ง๋ง ์ง์์ ํตํด ์ฝ๊ฒ ๋๋ฆด ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์์๋ ๋ถ์ ๋๊ธ๋ก ์ฝ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค)
๋คํธ์ํฌ โ ๋คํธ์ํฌ ์ค์ ์์ ์์คํ ์ VPC ๋ฐ ์๋ธ๋ท์ ์ ํํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์๋ธ๋ท์ ์ ํํด์ผ ํฉ๋๋ค.
๋ก๋ ๊ท ํ ์กฐ์ - ๋ฐธ๋ฐ์ ์ค์ . ํ์ง๋ง ์ด ์์ ์ ๋ณ๋๋ก ์ํํ ๊ฒ์ด๋ฏ๋ก ์ฌ๊ธฐ์๋ ์๋ฌด๊ฒ๋ ๊ฑด๋๋ฆฌ์ง ์๊ฒ ์ต๋๋ค. ์ํ ํ์ธ ๋์ค์ ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ทธ๋ฃน ๊ท๋ชจ โ ํด๋ฌ์คํฐ์ ๋จธ์ ์์ ๋ํ ์ ํ๊ณผ ์์ ์ ์ํ๋ ๋จธ์ ์๋ฅผ ๋ํ๋ ๋๋ค. ํด๋ฌ์คํฐ์ ๋จธ์ ์๋ ๋ฉํธ๋ฆญ์ ๋ฐ๋ผ ํฌ๊ธฐ ์กฐ์ ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ง์ ๋ ์ต์๊ฐ๋ณด๋ค ์๊ฑฐ๋ ์ต๋๊ฐ๋ณด๋ค ํฌ์ง ์์ต๋๋ค.
ํ์ฅ ์ ์ฑ โ ์ค์ผ์ผ๋ง ๋งค๊ฐ๋ณ์. ๊ทธ๋ฌ๋ ์คํ ์ค์ธ ECS ์์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ค์ผ์ผ๋งํ ๊ฒ์ด๋ฏ๋ก ๋์ค์ ์ค์ผ์ผ๋ง์ ๊ตฌ์ฑํ ๊ฒ์ ๋๋ค.
์ธ์คํด์ค ์ถ์ ๋ณดํธ โ ์ถ์ ์ ์ธ์คํด์ค๊ฐ ์ญ์ ๋์ง ์๋๋ก ๋ณดํธํฉ๋๋ค. ASG๊ฐ ์คํ ์ค์ธ ์์ ์ด ์๋ ๋จธ์ ์ ์ญ์ ํ์ง ์๋๋ก ์ด๋ฅผ ํ์ฑํํฉ๋๋ค. ECS ์ฉ๋ ๊ณต๊ธ์๋ ์์ ์ด ์๋ ์ธ์คํด์ค์ ๋ํ ๋ณดํธ๋ฅผ ๋นํ์ฑํํฉ๋๋ค.
ํ๊ทธ ์ถ๊ฐ โ ์ธ์คํด์ค์ ๋ํ ํ๊ทธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค(์ด ๊ฒฝ์ฐ ์ ์ธ์คํด์ค ํ๊ทธ ์ง์ ํ์ธ๋์ ์ ํํด์ผ ํจ). ์ด๋ฆ ํ๊ทธ๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ๋ฃน ๋ด์์ ์์๋๋ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๋์ผํ ์ด๋ฆ์ ๊ฐ๊ฒ ๋๋ฉฐ ์ฝ์์์ ๋ณด๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
๊ทธ๋ฃน์ ์์ฑํ ํ ์ด๋ฅผ ์ด๊ณ ๊ณ ๊ธ ๊ตฌ์ฑ ์น์ ์ผ๋ก ์ด๋ํฉ๋๋ค. ์์ฑ ๋จ๊ณ์์ ์ฝ์์ ๋ชจ๋ ์ต์ ์ด ํ์๋์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ข ๋ฃ ์ ์ฑ โ ์ธ์คํด์ค๋ฅผ ์ญ์ ํ ๋ ๊ณ ๋ ค๋๋ ๊ท์น์ ๋๋ค. ์์๋๋ก ์ ์ฉ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ณดํต ์๋ ์ฌ์ง์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. ๋จผ์ , ๊ฐ์ฅ ์ค๋๋ ์์ ํ ํ๋ฆฟ์ด ์๋ ์ธ์คํด์ค๊ฐ ์ญ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด AMI๋ฅผ ์ ๋ฐ์ดํธํ ๊ฒฝ์ฐ ์ ๋ฒ์ ์ ์์ฑํ์ง๋ง ๋ชจ๋ ์ธ์คํด์ค๊ฐ ํด๋น ๋ฒ์ ์ผ๋ก ์ ํ๋์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์ ์ฒญ๊ตฌ ์๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ธ์คํด์ค๊ฐ ์ ํ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ถ์ ๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ์ค๋๋ ํญ๋ชฉ์ด ์ ํ๋ฉ๋๋ค.
์๊ณ ์ ์ฉ: ํด๋ฌ์คํฐ์ ๋ชจ๋ ์์คํ
์ ์
๋ฐ์ดํธํ๊ณ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํฉ๋๋ค.
Application Load Balancer ๋ฐ EC2 ๋์ ๊ทธ๋ฃน
๋ฐธ๋ฐ์๋ EC2 โ ๋ก๋ ๋ฐธ๋ฐ์ฑ โ ๋ก๋ ๋ฐธ๋ฐ์ ์น์
์์ ์์ฑ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ Application Load Balancer๋ฅผ ์ฌ์ฉํ ๊ฒ์
๋๋ค. ๋ค์ํ ์ ํ์ ๋ฐธ๋ฐ์ ๋น๊ต๋ ๋ค์์์ ์ฝ์ ์ ์์ต๋๋ค.
์ฒญ์ทจ์ - ํฌํธ 80๊ณผ 443์ ๋ง๋ค๊ณ ๋์ค์ ๋ฐธ๋ฐ์ ๊ท์น์ ์ฌ์ฉํ์ฌ 80์์ 443์ผ๋ก ๋ฆฌ๋๋ ์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค.
๊ฐ์ฉ ์์ญ โ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ชจ๋ ์ฌ๋์ ์ํ ์ ๊ทผ์ฑ ๊ตฌ์ญ์ ์ ํํฉ๋๋ค.
๋ณด์ ์ค์ ๊ตฌ์ฑ โ ๋ฐธ๋ฐ์์ SSL ์ธ์ฆ์๊ฐ ์ฌ๊ธฐ์ ํ์๋ฉ๋๋ค. ๊ฐ์ฅ ํธ๋ฆฌํ ์ต์
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ELBSecurityPolicy-2016-08
. ๋ฐธ๋ฐ์๋ฅผ ์์ฑํ ํ์๋ ์ด๋ฅผ ๋ณผ ์ ์์ต๋๋ค. DNS ์ด๋ฆ, ๋๋ฉ์ธ์ ๋ํ CNAME์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Cloudflare์์๋ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
๋ณด์ ๊ทธ๋ฃน โ ๋ฐธ๋ฐ์์ ๋ํ ๋ณด์ ๊ทธ๋ฃน์ ์์ฑํ๊ฑฐ๋ ์ ํํฉ๋๋ค. ์ด์ ๋ํด์๋ ๋ฐ๋ก ์์ EC2 ์์ ํ ํ๋ฆฟ โ ๋คํธ์ํฌ ์ค์ ์น์ ์์ ์์ธํ ์ค๋ช ํ์ต๋๋ค.
๋์ ๊ทธ๋ฃน โ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๊ต์ฒดํ๊ธฐ ์ํด ๋ฐธ๋ฐ์์์ ์์คํ ์ผ๋ก ์์ฒญ์ ๋ผ์ฐํ ํ๊ณ ๊ฐ์ฉ์ฑ์ ํ์ธํ๋ ๊ทธ๋ฃน์ ๋ง๋ญ๋๋ค. ๋์ ์ ํ ์ธ์คํด์ค์ฌ์ผ ํฉ๋๋ค. ํ๋กํ ์ฝ ะธ ํฌํธ ๋ฐธ๋ฐ์์ ์ธ์คํด์ค ๊ฐ ํต์ ์ HTTPS๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ธ์ฆ์๋ฅผ ์ ๋ก๋ํด์ผ ํฉ๋๋ค. ์ด ์์์๋ ์ด ์์ ์ ์ํํ์ง ์๊ณ ํฌํธ 80์ ๊ทธ๋๋ก ๋ก๋๋ค.
์ํ ํ์ธ โ ์๋น์ค ๊ธฐ๋ฅ์ ํ์ธํ๊ธฐ ์ํ ๋งค๊ฐ๋ณ์์ ๋๋ค. ์ค์ ์๋น์ค์์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ค์ํ ๋ถ๋ถ์ ๊ตฌํํ๋ ๋ณ๋์ ์์ฒญ์ด์ด์ผ ํฉ๋๋ค. ์ด ์์์๋ ๊ธฐ๋ณธ ์ค์ ์ ๊ทธ๋๋ก ์ ์งํ๊ฒ ์ต๋๋ค. ๋ค์์ผ๋ก ์์ฒญ ๊ฐ๊ฒฉ, ์๊ฐ ์ด๊ณผ, ์ฑ๊ณต ์ฝ๋ ๋ฑ์ ์ ํํ ์ ์์ต๋๋ค. ์ด ์์์๋ ์ฌ์ฉ๋ Docker ์ด๋ฏธ์ง๊ฐ 200 ์ฝ๋๋ฅผ ๋ฐํํ๋ฏ๋ก ์ฑ๊ณต ์ฝ๋ 399-304๋ฅผ ํ์ํฉ๋๋ค.
๋์ ๋ฑ๋ก โ ์ฌ๊ธฐ์์๋ ๊ทธ๋ฃน์ ์๋์ฐจ๊ฐ ์ ํ๋์์ง๋ง ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ECS์์ ์ํ๋๋ฏ๋ก ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค.
์๊ณ ์ ์ฉ: ๋ฐธ๋ฐ์ ์์ค์์๋ ํน์ ์์ ์ S3์ ์ ์ฅ๋ ๋ก๊ทธ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค.
ECS ์์ ์ ์
์ด์ ๋จ๊ณ์์๋ ์๋น์ค ์ธํ๋ผ์ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์ ๋ง๋ค์์ผ๋ ์ด์ ์ถ์ํ ์ปจํ ์ด๋์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค. ์ด๋ ECS โ ์์ ์ ์ ์น์ ์์ ์ํ๋ฉ๋๋ค.
์ถ์ ์ ํ ํธํ์ฑ - EC2๋ฅผ ์ ํํฉ๋๋ค.
์์
์คํ IAM ์ญํ - ์ ํํ๋ค ecsTaskExecutionRole
. ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ๊ฐ ์์ฑ๋๊ณ ๋น๋ฐ ๋ณ์์ ๋ํ ์ก์ธ์ค ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค.
์ปจํ ์ด๋ ์ ์ ์น์ ์์ ์ปจํ ์ด๋ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์์ โ ํ๋ก์ ํธ ์ฝ๋๊ฐ ์๋ ์ด๋ฏธ์ง์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ์์์๋ Docker Hub์ ๊ณต๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ํ โ ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์ ํ. ํ๋ ํ๋ โ ํ๋ ์ ํ, ์ปจํ ์ด๋๊ฐ ์ง์ ๋ ๊ฐ์ ์ด๊ณผํ๋ฉด docker kill ๋ช ๋ น์ด ์คํ๋๊ณ ์ปจํ ์ด๋๋ ์ฆ์ ์ข ๋ฃ๋ฉ๋๋ค. ์ํํธ ํ๋ โ ์ํํธ ์ ํ, ์ปจํ ์ด๋๋ ์ง์ ๋ ๊ฐ์ ์ด๊ณผํ ์ ์์ง๋ง ๋จธ์ ์ ์์ ์ ๋ฐฐ์นํ ๋ ์ด ๋งค๊ฐ๋ณ์๊ฐ ๊ณ ๋ ค๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋จธ์ ์ 4GiB์ RAM์ด ์๊ณ ์ปจํ ์ด๋์ ์ํํธ ์ ํ์ด 2048MiB์ธ ๊ฒฝ์ฐ ์ด ๋จธ์ ์ ์ด ์ปจํ ์ด๋๋ฅผ ํตํด ์ต๋ 2๊ฐ์ ์์ ์ ์คํํ ์ ์์ต๋๋ค. ์ค์ ๋ก 4GiB RAM์ 4096MiB๋ณด๋ค ์ฝ๊ฐ ์์ต๋๋ค. ์ด๋ ํด๋ฌ์คํฐ์ ECS ์ธ์คํด์ค ํญ์์ ํ์ธํ ์ ์์ต๋๋ค. ์ํํธ ์ ํ์ ํ๋ ์ ํ๋ณด๋ค ํด ์ ์์ต๋๋ค. ํ ์์ ์ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น ์ ํ์ด ํฉ์ฐ๋๋ค๋ ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํฌํธ ๋งคํ -์ ํธ์คํธ ํฌํธ 0์ ํ์ํ๋ฉด ํฌํธ๊ฐ ๋์ ์ผ๋ก ํ ๋น๋๊ณ ๋์ ๊ทธ๋ฃน์์ ๋ชจ๋ํฐ๋ง๋๋ค๋ ์๋ฏธ์
๋๋ค. ์ปจํ
์ด๋ ํฌํธ โ ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋๋ ํฌํธ๋ ์ข
์ข
์คํ ๋ช
๋ น์ ์ง์ ๋๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋, Dockerfile ๋ฑ์ ํ ๋น๋ฉ๋๋ค. ์ด ์์์๋ 3000์ ์ฌ์ฉํฉ๋๋ค.
๊ฑด๊ฐ ์ฒดํฌ โ ์ปจํ ์ด๋ ์ํ ํ์ธ ๋งค๊ฐ๋ณ์. ๋์ ๊ทธ๋ฃน์ ๊ตฌ์ฑ๋ ๋งค๊ฐ๋ณ์์ ํผ๋ํ์ง ๋ง์ญ์์ค.
ํ๊ฒฝ - ํ๊ฒฝ ์ค์ . CPU ์ ๋ - ํ๋ก์ธ์์ ๋ํด์๋ง ๋ฉ๋ชจ๋ฆฌ ์ ํ๊ณผ ์ ์ฌํฉ๋๋ค. ๊ฐ ํ๋ก์ธ์ ์ฝ์ด๋ 1024๊ฐ ์ฅ์น์ด๋ฏ๋ก ์๋ฒ์ ๋์ผ ์ฝ์ด ํ๋ก์ธ์๊ฐ ์๊ณ ์ปจํ ์ด๋๊ฐ 512๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์ด ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ 4๊ฐ์ ์์ ์ ์๋ฒ ํ๋์์ ์์ํ ์ ์์ต๋๋ค. CPU ์ฅ์น๋ ํญ์ ์ฝ์ด ์์ ํด๋นํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ๊ฒฝ์ฐ์ฒ๋ผ ์ฝ์ด ์๊ฐ ์กฐ๊ธ์ด๋ผ๋ ์ ์ ์๋ ์์ต๋๋ค.
๋ช
๋ น โ ์ปจํ
์ด๋ ๋ด๋ถ์์ ์๋น์ค๋ฅผ ์์ํ๋ ๋ช
๋ น์ผ๋ก, ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ ์ผํ๋ก ๊ตฌ๋ถ๋์ด ์ง์ ๋ฉ๋๋ค. ์ด๋ gunicorn, npm ๋ฑ์ผ ์ ์์ต๋๋ค. ์ง์ ํ์ง ์์ผ๋ฉด Dockerfile์ CMD ์ง์์ด ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ๋
๋๋ค npm,start
.
ํ๊ฒฝ ๋ณ์ โ ์ปจํ
์ด๋ ํ๊ฒฝ ๋ณ์. ์ด๋ ๊ฐ๋จํ ํ
์คํธ ๋ฐ์ดํฐ์ด๊ฑฐ๋ ๋ค์์ ๋น๋ฐ ๋ณ์์ผ ์ ์์ต๋๋ค.
์ ์ฅ ๋ฐ ๋ก๊น โ ์ฌ๊ธฐ์๋ CloudWatch Logs(AWS์ ๋ก๊ทธ ์๋น์ค)์ ๋ก๊น ์ ์ค์ ํ๊ฒ ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด CloudWatch Logs ์๋ ๊ตฌ์ฑ ํ์ธ๋์ ํ์ฑํํ๋ฉด ๋ฉ๋๋ค. ์์ ์ ์๋ฅผ ์์ฑํ๋ฉด CloudWatch์ ๋ก๊ทธ ๊ทธ๋ฃน์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก๊ทธ๋ ๋ฌด๊ธฐํ ์ ์ฅ๋๋ฏ๋ก ๋ณด์กด ๊ธฐ๊ฐ์ ๋ง๋ฃ๋์ง ์์์์ ํ์ ๊ธฐ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ์์ ์ CloudWatch Log ๊ทธ๋ฃน์์ ์ํ๋ฉ๋๋ค. ํ์ฌ ๊ธฐ๊ฐ์ ํด๋ฆญํ๊ณ ์ ๊ธฐ๊ฐ์ ์ ํํด์ผ ํฉ๋๋ค.
ECS ํด๋ฌ์คํฐ ๋ฐ ECS ์ฉ๋ ๊ณต๊ธ์
ECS โ ํด๋ฌ์คํฐ ์น์ ์ผ๋ก ์ด๋ํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํฉ๋๋ค. ํ ํ๋ฆฟ์ผ๋ก EC2 Linux + ๋คํธ์ํน์ ์ ํํฉ๋๋ค.
ํด๋ฌ์คํฐ ์ด๋ฆ - ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ Launch Template ๋งค๊ฐ๋ณ์์ ์ง์ ๋ ๊ฒ๊ณผ ๋์ผํ ์ด๋ฆ์ ๋ง๋ญ๋๋ค. ECS_CLUSTER
, ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ - DemoApiClusterProd
. ๋น ํด๋ฌ์คํฐ ์์ฑ ํ์ธ๋์ ์ ํํฉ๋๋ค. ์ ํ์ ์ผ๋ก Container Insights๋ฅผ ํ์ฑํํ์ฌ CloudWatch์ ์๋น์ค ์งํ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๋ชจ๋ ์์
์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๋ค๋ฉด ECS ์ธ์คํด์ค ์น์
์ Auto Scaling ๊ทธ๋ฃน์์ ์์ฑ๋ ๋จธ์ ์ด ํ์๋ฉ๋๋ค.
ํญ์ผ๋ก ์ด๋ ์ฉ๋ ๊ณต๊ธ์ ์ ํญ๋ชฉ์ ๋ง๋ญ๋๋ค. ์คํ ์ค์ธ ECS ์์ ์์ ๋ฐ๋ผ ๋จธ์ ์์ฑ ๋ฐ ์ข ๋ฃ๋ฅผ ์ ์ดํด์ผ ํ๋ค๋ ์ ์ ์๊ธฐ์์ผ ๋๋ฆฝ๋๋ค. ๊ณต๊ธ์๋ ํ๋์ ๊ทธ๋ฃน์๋ง ํ ๋น๋ ์ ์๋ค๋ ์ ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Auto Scaling ๊ทธ๋ฃน โ ์ด์ ์ ์์ฑ๋ ๊ทธ๋ฃน์ ์ ํํฉ๋๋ค.
๊ด๋ฆฌํ ํ์ฅ โ ๊ณต๊ธ์๊ฐ ์๋น์ค๋ฅผ ํ์ฅํ ์ ์๋๋ก ํ์ฑํํฉ๋๋ค.
๋ชฉํ ์ฉ๋ % โ ์์ ์ด ๋ก๋๋ ๊ธฐ๊ณ์ ๋ช ํผ์ผํธ๊ฐ ํ์ํ๊ฐ์? 100%๋ฅผ ์ง์ ํ๋ฉด ๋ชจ๋ ๋จธ์ ์ ํญ์ ์คํ ์ค์ธ ์์ ์ผ๋ก ๋ฐ๋น ์ง๋๋ค. 50%๋ฅผ ์ง์ ํ๋ฉด ์๋์ฐจ์ ์ ๋ฐ์ด ํญ์ ๋ฌด๋ฃ๊ฐ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ถํ๊ฐ ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ฉด ์ ํ์๋ ์ธ์คํด์ค๊ฐ ๋ฐฐ์น๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์ ์์ด ์ฆ์ ๋ฌด๋ฃ ์ฐจ๋์ ์ด์ฉํ ์ ์์ต๋๋ค.
๊ด๋ฆฌํ ์ข ๋ฃ ๋ฐฉ์ง โ ํ์ฑํํฉ๋๋ค. ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณต๊ธ์๊ฐ ์ญ์ ๋ก๋ถํฐ ์ธ์คํด์ค ๋ณดํธ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด๋ ๋จธ์ ์ ํ์ฑ ์์ ์ด ์๊ณ ๋ชฉํ ์ฉ๋%๋ฅผ ํ์ฉํ ๋ ๋ฐ์ํฉ๋๋ค.
ECS ์๋น์ค ๋ฐ ํ์ฅ ์ค์
๋ง์ง๋ง ๋จ๊ณ :) ์๋น์ค๋ฅผ ์์ฑํ๋ ค๋ฉด ์๋น์ค ํญ์์ ์ด์ ์ ์์ฑ๋ ํด๋ฌ์คํฐ๋ก ์ด๋ํด์ผ ํฉ๋๋ค.
๋ฐ์ฌ ์ ํ โ ์ฉ๋ ๊ณต๊ธ์ ์ ๋ต์ผ๋ก ์ ํ์ ํด๋ฆญํ๊ณ ์ด์ ์ ์์ฑ๋ ๊ณต๊ธ์๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
์์ ์ ์ โ ์ด์ ์ ์์ฑ๋ ์์ ์ ์์ ํด๋น ๊ฐ์ ์ ์ ํํฉ๋๋ค.
์๋น์ค ์ด๋ฆ โ ํผ๋์ ํผํ๊ธฐ ์ํด ํญ์ ์์ ์ ์์ ๋์ผํ๊ฒ ํ์ํฉ๋๋ค.
์๋น์ค ์ข ๋ฅ - ํญ์ ๋ณต์ ๋ณธ.
์์ ์ โ ์๋น์ค์์ ์ํ๋ ํ์ฑ ์์ ์. ์ด ๋งค๊ฐ๋ณ์๋ ํฌ๊ธฐ ์กฐ์ ์ผ๋ก ์ ์ด๋์ง๋ง ์ฌ์ ํ ์ง์ ๋์ด์ผ ํฉ๋๋ค.
์ต์ ์ ์ ๋น์จ ะธ ์ต๋ ๋น์จ โ ๋ฐฐํฌ ์ค ์์ ๋์์ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 100๊ณผ 200์ผ๋ก ๋ฐฐํฌ ์ ์์ ์๊ฐ ๋ช ๋ฐฐ๋ก ์ฆ๊ฐํ ๋ค์ ์ํ๋ ๊ฐ์ผ๋ก ๋์์ด์ ๋ํ๋ ๋๋ค. ์คํ ์ค์ธ ์์ ์ด 1๊ฐ(์ต์=0, ์ต๋=100)์ธ ๊ฒฝ์ฐ ๋ฐฐํฌ ์ค์ ํด๋น ์์ ์ด ์ข ๋ฃ๋๊ณ ๊ทธ ํ์ ์ ์์ ์ด ๋ฐ์ํฉ๋๋ค. ์ฆ ๊ฐ๋ ์ค์ง ์๊ฐ์ด ๋ฐ์ํฉ๋๋ค. 1๊ฐ์ ์์ ์ด ์คํ ์ค์ธ ๊ฒฝ์ฐ(์ต์=50, ์ต๋=150), 1๊ฐ์ ์์ ์ ์ ๋ฐ์ผ๋ก ๋๋๊ฑฐ๋ XNUMX๋ฐฐ๋ก ๋๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ๊ฐ ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋ฐฐํฌ ์ ํ โ ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
๋ฐฐ์น ํ ํ๋ฆฟ โ ๊ธฐ๊ณ์ ์์ ์ ๋ฐฐ์นํ๋ ๊ท์น. ๊ธฐ๋ณธ๊ฐ์ AZ Balanced Spread์ ๋๋ค. ์ฆ, ๋ชจ๋ ๊ฐ์ฉ ์์ญ์ ๋จธ์ ์ด ์ฆ๊ฐํ ๋๊น์ง ๊ฐ๊ฐ์ ์ ์์ ์ด ์ ์ธ์คํด์ค์ ๋ฐฐ์น๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก BinPack - CPU ๋ฐ Spread - AZ๋ฅผ ์ํํ๋ฉฐ, ์ด ์ ์ฑ ์ ์ฌ์ฉํ๋ฉด ์์ ์ด CPU๋น ํ๋์ ์์คํ ์ ์ต๋ํ ์กฐ๋ฐํ๊ฒ ๋ฐฐ์น๋ฉ๋๋ค. ์ ๋จธ์ ์ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ๊ฐ์ฉ์ฑ ์์ญ์ ์์ฑ๋ฉ๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์ ์ ํ โ Application Load Balancer๋ฅผ ์ ํํฉ๋๋ค.
์๋น์ค IAM ์ญํ - ์ ํํ๋ค ecsServiceRole
.
๋ก๋ ๋ฐธ๋ฐ์ ์ด๋ฆ โ ์ด์ ์ ์์ฑ๋ ๋ฐธ๋ฐ์๋ฅผ ์ ํํฉ๋๋ค.
์ํ ์ ๊ฒ ์ ์ ๊ธฐ๊ฐ โ ์ ์์ ์ ๋กค์์ํ ํ ์ํ ํ์ธ์ ์ํํ๊ธฐ ์ ์ ์ผ์ ์ค์งํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก 60์ด๋ก ์ค์ ํฉ๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํ ์ปจํ ์ด๋ โ ๋์ ๊ทธ๋ฃน ์ด๋ฆ ํญ๋ชฉ์์ ์ด์ ์ ์์ฑ๋ ๊ทธ๋ฃน์ ์ ํํ๋ฉด ์๋์ผ๋ก ์ฑ์์ง๋๋ค.
์๋น์ค Auto Scaling โ ์๋น์ค ํ์ฅ ๋งค๊ฐ๋ณ์. ์๋น์ค ์๋ ์กฐ์ ๊ตฌ์ฑ์ ์ ํํ์ฌ ์ํ๋ ์๋น์ค ์๋ฅผ ์กฐ์ ํฉ๋๋ค. ํ์ฅ ์ ์ต์ ๋ฐ ์ต๋ ์์ ์๋ฅผ ์ค์ ํฉ๋๋ค.
์๋น์ค Auto Scaling์ ์ํ IAM ์ญํ - ์ ํํ๋ค AWSServiceRoleForApplicationAutoScaling_ECSService
.
์๋ ์์ ํ์ฅ ์ ์ฑ โ ์ค์ผ์ผ๋ง ๊ท์น. 2๊ฐ์ง ์ ํ์ด ์์ต๋๋ค:
- ํ์ ์ถ์ โ ๋ชฉํ ์งํ(CPU/RAM ์ฌ์ฉ๋ ๋๋ ๊ฐ ์์ ์ ๋ํ ์์ฒญ ์)๋ฅผ ์ถ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๊ท ํ๋ก์ธ์ ๋ก๋๊ฐ 85%๊ฐ ๋๊ธฐ๋ฅผ ์ํ๋ฉฐ, ์ด ๋ก๋๊ฐ ๋์์ง๋ฉด ๋ชฉํ ๊ฐ์ ๋๋ฌํ ๋๊น์ง ์ ์์ ์ด ์ถ๊ฐ๋ฉ๋๋ค. ๋ถํ๊ฐ ๋ฎ์ผ๋ฉด ์ถ์ ๋ฐฉ์ง๊ฐ ํ์ฑํ๋์ง ์๋ ํ ์์ ์ด ์ ๊ฑฐ๋ฉ๋๋ค(์ถ์ ๋นํ์ฑํ).
- ๋จ๊ณ ์ค์ผ์ผ๋ง - ์์์ ์ฌ๊ฑด์ ๋ํ ๋ฐ์. ์ฌ๊ธฐ์์๋ ์ด๋ฒคํธ(CloudWatch ๊ฒฝ๋ณด)์ ๋ํ ๋ฐ์์ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ง์ ๋ ์์ ์๋ฅผ ์ถ๊ฐ ๋๋ ์ ๊ฑฐํ๊ฑฐ๋ ์ ํํ ์์ ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์๋น์ค์๋ ์ฌ๋ฌ ๊ฐ์ง ํ์ฅ ๊ท์น์ด ์์ ์ ์์ผ๋ฉฐ ์ด๋ ์ ์ฉํ ์ ์์ผ๋ฉฐ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๋ก ์ถฉ๋ํ์ง ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก
์ง์นจ์ ๋ฐ๋ฅด๊ณ ๋์ผํ Docker ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋น์ค๋ ๋ค์๊ณผ ๊ฐ์ ํ์ด์ง๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.
- ์ฐ๋ฆฌ๋ ์๋น์ค์ ๋ชจ๋ ์์คํ ์ด ์์๋๋ ํ ํ๋ฆฟ์ ๋ง๋ค์์ต๋๋ค. ๋ํ ํ ํ๋ฆฟ์ด ๋ณ๊ฒฝ๋ ๋ ์ปดํจํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ๋ ๋ฐฐ์ ์ต๋๋ค.
- ์คํ ์ธ์คํด์ค ์ค์ง ์ ํธ ์ฒ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ์ผ๋ฏ๋ก ์ด๋ฅผ ์์ ํ ํ XNUMX๋ถ ์ด๋ด์ ์คํ ์ค์ธ ๋ชจ๋ ์์ ์ด ๋จธ์ ์์ ์ ๊ฑฐ๋๋ฏ๋ก ์์ค๋๊ฑฐ๋ ์ค๋จ๋๋ ์ผ์ด ์์ต๋๋ค.
- ์ฐ๋ฆฌ๋ ๋ถํ๋ฅผ ๊ธฐ๊ณ ์ ์ฒด์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๊ธฐ ์ํด ๋ฐธ๋ฐ์๋ฅผ ์ฌ๋ ธ์ต๋๋ค.
- ์คํ ์ธ์คํด์ค์์ ์คํ๋๋ ์๋น์ค๋ฅผ ๋ง๋ค์๋๋ฐ, ์ด๋ฅผ ํตํด ๊ธฐ๊ณ ๋น์ฉ์ด ์ฝ 3๋ฐฐ ์ ๊ฐ๋ฉ๋๋ค.
- ๊ฐ๋ ์ค์ง ์๊ฐ ๋น์ฉ์ ๋ฐ์์ํค์ง ์๊ณ ์ฆ๊ฐ๋ ์ํฌ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋ฐฉํฅ ์๋ ํฌ๊ธฐ ์กฐ์ ์ ๊ตฌ์ฑํ์ต๋๋ค.
- ์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ธํ๋ผ(๋จธ์ )๋ฅผ ๊ด๋ฆฌํ๊ณ ๊ทธ ๋ฐ๋๋ก๋ ๊ด๋ฆฌํ์ง ์๋๋ก ์ฉ๋ ๊ณต๊ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ฐ๋ฆฌ๋ ํ๋ฅญํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋๊ท๋ชจ ์ด๋ฉ์ผ ์บ ํ์ธ์์ ๊ด๊ณ ํ๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ๋ก๋๊ฐ ๊ธ์ฆํ ๊ฒ์ผ๋ก ์์ธกํ ์ ์๋ ๊ฒฝ์ฐ ๋ค์์ ๊ธฐ์ค์ผ๋ก ํฌ๊ธฐ ์กฐ์ ์ ์ค์ ํ ์ ์์ต๋๋ค.
์์คํ
์ ์ฌ๋ฌ ๋ถ๋ถ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฅํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
์คํ ์ธ์คํด์ค์ ECS๋ฅผ ์ฌ์ฉํ๋ ํฅ๋ฏธ๋ก์ด ์ฌ๋ก๋ ํ์ฅ์ ๊ดํ ๋ด์ฉ์ ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ธฐ์ ๊ฒ์ ๋๋ค.
๊ณง ์ฃผ๋ก ์๋ฒ๋ฆฌ์ค ์คํ(๋ ํฌํจ)์์ ์ด๋น ์์ฒ ๊ฐ์ ๋ถ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๊ณผ GitLab CI ๋ฐ Terraform Cloud๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ๋ฐฐํฌ๊ฐ ์๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธฐ์ฌ๊ฐ ๋์ฌ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ฅผ ๊ตฌ๋ ํ๋ฉด ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค!
๋ฑ๋ก๋ ์ฌ์ฉ์๋ง ์ค๋ฌธ ์กฐ์ฌ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
ํ๋ก๋์ ์์ ์คํ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํฉ๋๊น?
-
22,2%์6
-
66,7%18
-
11,1%๊ธฐ์ฌ๋ฅผ ํตํด ์ด์ ๋ํด ๋ฐฐ์ ์ผ๋ฉฐ ์ด๋ฅผ ์ฌ์ฉํ ๊ณํ์ ๋๋ค3
27๋ช
์ ์ฌ์ฉ์๊ฐ ํฌํํ์ต๋๋ค. 5๋ช
์ ์ฌ์ฉ์๊ฐ ๊ธฐ๊ถํ์ต๋๋ค.
์ถ์ฒ : habr.com