Elastic Beanstalk + Docker + Java ์ค์
๐ค ์ ์ฉ ์ด์
AutoScaling, LoadBalancer
EB๋ฅผ ์ฌ์ฉํด๋ณธ ์ ์ ์์ผ๋ ์ฌ์ฉ์จ์ด ์ฆ๊ฐํ๋ฉด scale out ํ๋ค๊ฐ, ๋ค์ ์ค์ด๋ค๋ฉด scale in ์ ํ ์ ์๋ AutoScaling Group๊ณผ ์๋ฒ์ ๋ถํ๋ฅผ ๋๋์ด ์ฃผ๋ LoadBalancer๋ฅผ ๊ฐํธํ๊ฒ ์ค์ ํ ์ ์๋ ์ ์ด ์ฅ์ ์ผ๋ก ๋๊ปด์ก์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋ฌ ์ฅ์ ์ ์ฌ์ฉํด๋ณด๊ธฐ ์ ์๋ ์๋ฟ์ง ์์์ โ์ฌ์ฉํด๋ณด๊ณ ๋๊ปด๋ณด์โ ํด์ ์ฌ์ฉํ์ต๋๋ค.
โ๏ธ ์ค์ ๋ฐฉ๋ฒ
1. IAM ์ญํ ์ถ๊ฐ
Elastic beanstalk(์ดํ EB) ์ ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ธฐ ์ํด ๊ฐ ์ญํ ์ ๊ถํ์ด ํ์ํฉ๋๋ค.
1.1 ์๋น์ค ์ญํ
EB๋ฅผ ์๋น์ค๋ก ์ฌ์ฉํ๋ฏ๋ก ๋ด๋นํ IAM ์ญํ ์ ๋ถ์ฌํฉ๋๋ค. Elastic Beanstalk ์๋น์ค ์ญํ ๊ด๋ฆฌ
์ค์ ํ์ง ์์ ์, ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๋ฅผ ๋ง๋๊ฒ ๋ฉ๋๋ค..
Configuration validation exception: Invalid option specification (Namespace: โaws:elasticbeanstalk:managedactionsโ, OptionName: โManagedActionsEnabledโ): You canโt enable managed platform updates when your environment uses the service-linked role โAWSServiceRoleForElasticBeanstalkโ. Select a service role that has the โAWSElasticBeanstalkManagedUpdatesCustomerRolePolicyโ managed policy.
1.2 EC2 ์ธ์คํด์ค ํ๋กํ์ผ
EB ํ๊ฒฝ ๊ตฌ์ฑ์ด ์๋ฃ๋๋ฉด EC2 ์ธ์คํด์ค๊ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๋ฅผ ์ํด IAM ์ญํ ์ด ํ์ํฉ๋๋ค. Elastic Beanstalk ์ธ์คํด์ค ํ๋กํ์ผ ๊ด๋ฆฌ
2. ํ๊ฒฝ ๊ตฌ์ฑ
Elastic Beanstalk ํ๊ฒฝ ๊ตฌ์ฑ
ํ๊ฒฝ ํฐ์ด: ์น ์๋ฒ ํ๊ฒฝ ์ ํ ์ Http ์์ฒญ์ ์ฒ๋ฆฌ ํฉ๋๋ค.
ํ๊ฒฝ ์ ๋ณด - ํ๊ฒฝ ์ด๋ฆ: ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ + [-env] ํ์์ผ๋ก ์๋ ์์ฑ๋ฉ๋๋ค.
ํ๊ฒฝ ์ ๋ณด - ๋๋ฉ์ธ: ์์ฑํ์ง ์์ ์ ๋๋ค๊ฐ์ผ๋ก ์๋ ์์ฑ๋ฉ๋๋ค.
์ฌ์ ์ค์ : AutoScaling, LoadBalancer๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ผ๋ฉด ๊ณ ๊ฐ์ฉ์ฑ์ ์ ํํด ์ค๋๋ค. ์๋๋ฉด ๋จ์ผ ์ธ์คํด์ค๋ฅผ ์ ํํฉ๋๋ค.
์ฌ๊ธฐ๊น์ง ์ค์ ํ๊ณ ๊ฒํ ๋จ๊ณ๋ก ๊ฑด๋๋ฐ๋ฉด ์ ์ ๋ค EB ๊ฐ ์์ฑ๋ฉ๋๋ค. ์์ฑ๋ ๋๋ฉ์ธ์ ํด๋ฆญํ๋ฉด ํ๋ฉด์ด ์๋์ฒ๋ผ ์ถ๋ ฅ๋ฉ๋๋ค.
3. ๋ฐฐํฌ
๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํด์ค๋๋ค. docker-compose.yml ์ ์์ฑํฉ๋๋ค.
version: "3"
api:
image: tester/jpa-rest:0.0.1-dev
restart: always
ports:
- "80:9090"
container_name: jpa-rest-api
environment:
TZ: Asia/Seoul
SPRING_PROFILES_ACTIVE: prod
EB ํ๊ฒฝ ํญ์์ ์ ๋ก๋ ๋ฐ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ์ ๋ฐฐํฌ๊ฐ ๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
4. ๋ฐฐํฌ ์ต์
๋ฐฐํฌ ์ต์ ์ 4๊ฐ์ง ์ ๋๊ฐ ์กด์ฌํฉ๋๋ค. Rolling ์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ ๋ ๊ธฐ๋ณธ ์ค์ ์ธ Rolling ๋ฐฉ์์ผ๋ก ์งํํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค์ ํ์ต๋๋ค. ๋ค์ดํ์์ด ์กด์ฌํ์ง ์์ผ๋ฉด์๋ ๋ฐฐํฌ์๊ฐ์ด ๋น๊ต์ ๋นจ๋ผ์ ์๊ท๋ชจ ์๋น์ค์์ ์ ํฉํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
1. All at once
๋ชจ๋ ์ธ์คํด์ค์ ๋์์ ์ ๋ฒ์ ๋ฐฐํฌ ๋จ์ํ๊ณ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฐํฌ ๋ฐฉ์
๋จ์ : ์๋น์ค๊ฐ ์ค๋จ๋๋ ๋ค์ดํ์์ด ์กด์ฌํ๋ค.
2. Rolling
๋ฐฐ์น ๋จ์๋ก ์ ๋ฒ์ ๋ฐฐํฌ (๋จ์ผ ์ธ์คํด์ค ๋ถ๊ฐ) ์๋ฅผ ๋ค์ด, 4๊ฐ์ ์ธ์คํด์ค๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. 2๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋จผ์ ๋ฐฐํฌํ๊ณ , ๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด ๋๋จธ์ง ์ธ์คํด์ค๋ ๋ฐฐํฌํฉ๋๋ค.
๋จ์ : ์์ฐจ์ ์ผ๋ก ๋ฐฐํฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์, ๋๊ตฐ๊ฐ๋ ์ ๋ฐ์ดํธ ์ ๋ฒ์ ์ ๋๊ตฌ๋ ์ ๋ฐ์ดํธ ํ ๋ฒ์ ์ ๋ณผ ์ ์์ต๋๋ค.
3. Rolling with additional batch
๋ฐฐ์น ๋จ์๋ก ์ ๋ฒ์ ๋ฐฐํฌ, +1 ์ถ๊ฐ ๋ฐฐ์น (๋จ์ผ ์ธ์คํด์ค ๋ถ๊ฐ) ์๋ฅผ ๋ค์ด, 4๊ฐ์ ์ธ์คํด์ค๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ฐฐํฌ ์ 2๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ดํ ๋ฐฐ์น ๋จ์๋ก ๋ฐฐํฌํฉ๋๋ค. 6๊ฐ์ค 4๊ฐ์ ์ธ์คํด์ค๊ฐ ๋ฐฐํฌ ์๋ฃ๋๋ฉด 2๊ฐ์ ์ธ์คํด์ค๋ ์ข ๋ฃ ํฉ๋๋ค.
4. Immutable
์๋ก์ด ์ธ์คํด์ค ๊ทธ๋ฃน์ ๋ฐฐํฌ AutoScaling Group์ ์๋ก ๋ง๋ค์ด ๋ฐฐํฌํ๋ค. ์๋ก ์๊ธด ๊ทธ๋ฃน์ ๊ธฐ์กด์ ๊ทธ๋ฃน๊ณผ ๊ฐ์ DNS ๋ฅผ ๋ฐ๋ผ๋ณธ๋ค. (Blue green ๊ณผ ๋น์ทํ๋ค)
5. AutoScaling
EB ์ AutoScaling ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
1. Triggers based scaling
ํน์ ๋ฉํธ๋ฆญ์ ์๊ณ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค์ผ์ผ๋ง์ ํ๋ค.
2. Time-based scaling
ํน์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค์ผ์ผ๋ง์ ํ๋ค. (ex. ์ค์ 8์์ ๋๊ท๋ชจ ์ ๋ฐ์ดํธ๊ฐ ์ค์ ๋๋ค.)
์ค์ ํ๊ธฐ
์ ๋ CPU ์ฌ์ฉ๋ฅ ์ ๋ฉํธ๋ฆญ์ผ๋ก ํ์ฌ 60% ์ด์์ผ ์ ์ค์ผ์ผ์ ์ ํ๋๋ก ์ค์ ํ์ต๋๋ค.
์ธ์คํด์ค๊ฐ 2~4๊ฐ ๊ฐ ์ ์ง๋๋๋ก ์ค์ ํ์ต๋๋ค.
์ธ์คํด์ค๊ฐ 2๊ฐ ์คํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.![]
(https://velog.velcdn.com/images/kws60000/post/55986749-6484-4039-9afe-a88ee12e7b3d/image.png)
๐ ๋ง์น๋ฉฐ..
1. ์ด๊ธฐ ์ค์ ์ด ๋น ๋ฅด๊ณ ๊ฐ๋จํ๋ค.
EC2 ๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ์คํด์ค ์์ฑ, ํ๋ ฅ์ IP ์ค์ , ๋์ปค ์ค์น ๋ฑ ๋น์ฐํ ์ํ๋์ด์ผ ๋๋ ์์ ์ด ์์ต๋๋ค. ์ด๋ ค์ด ์ผ์ ์๋์ง๋ง, EB ๊ฐ ๋ฐ๋ณต๋ ์์ ์ ์ค์ฌ์ฃผ๋ฏ๋ก ํธ๋ฆฌํ์ต๋๋ค.
2. AutoScaling ์ค์ ์ด ํธํ๋ค.
AutoScaling ์ค์ ์ด ๊ฐ๋จํ์ต๋๋ค. ๋์ ๋ณด์ด๋๋ฐ๋ก ๋ฉํธ๋ฆญ์ ์ค์ ํ๊ณ , ์๊ณ๊ฐ๊ณผ ์ธ์คํด์ค ์๋ง ์ ํ๋ฉด ์ ์ฉ์ด ๊ฐ๋ฅํ์ต๋๋ค.
์ฐธ๊ณ ์๋ฃ
AWS Elastic Beanstalk ํ์ฉํ์ฌ ์ ๋ถ๋ง์ ์ฝ๋ ๋ฐฐํฌํ๊ธฐ - ์ต์๊ทผ ์๋ฃจ์ ์ฆ ์ํคํ ํธ(AWS) ๋ฌด์ค๋จ ๋ฐฐํฌ ๋ฐฉ์(Rolling / BlueGreen / Canary) [AWS] Spring Boot ํ๋ก์ ํธ Elastic beanstalk์ ์๋ ๋ฐฐํฌํ๊ธฐ