23D. Elastic Beanstalk ํ๊ฒฝ URL ๊ต์ฒด๋ก ๋ฌด์ค๋จ ๋ฐฐํฌํ๊ธฐ
23D. Elastic Beanstalk ํ๊ฒฝ URL ๊ต์ฒด๋ก ๋ฌด์ค๋จ ๋ฐฐํฌํ๊ธฐ ๊ด๋ จ
Elastic Beanstalk์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ฌ๋ฌ ๊ฐ์ ํ๊ฒฝ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฌํ ํน์ง์ ์ด์ฉํ์ฌ ์๋น์ค๋ฅผ ์ค๋จํ์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์์ค๋ฅผ ์ ๋ฐ์ดํธํ ๋ค ์น ์๋ฒ๋ฅผ ์๋ฌด๋ฆฌ ๋นจ๋ฆฌ ์ฌ์์ํ๋๋ผ๋ ์ฝ๊ฐ์ ์๋น์ค ์ค๋จ์ ํผํ ์ ์์ต๋๋ค. Elastic Beanstalk์ ํ๊ฒฝ URL ๊ต์ฒด(Swap Environment URLs) ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฐ์ ์๋น์ค ์ค๋จ ์๊ฐ๋ ์์จ ์ ์์ต๋๋ค.
ํ๊ฒฝ URL ๊ต์ฒด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ 1๊ฐ์ ํ๊ฒฝ์ด 2๊ฐ ํ์ํฉ๋๋ค. ์์ง ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๊ฒฝ์ ๋ง๋ค์ง ์์๋ค๋ฉด '23.1 Elastic Beanstalk์ผ๋ก Node.js ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๊ฒฝ ์์ฑํ๊ธฐ'๋ฅผ ์ฐธ์กฐํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๊ฒฝ์ ์์ฑํ๊ธฐ ๋ฐ๋๋๋ค.
Elastic Beanstalk ๋ฉ์ธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค. ๊ทธ๋ฆผ 23-29๊ณผ ๊ฐ์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๊ฒฝ ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค. ์ค๋ฅธ์ชฝ ์์ Actions ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ์ ๋ฉ๋ด๊ฐ ๋์ต๋๋ค. ์ฌ๊ธฐ์ Launch New Environment๋ฅผ ํด๋ฆญํฉ๋๋ค.
URL์ ๊ต์ฒดํ ํ๊ฒฝ(Environment)์ ์์ฑํฉ๋๋ค.
- Environment tier: ํ๊ฒฝ ์ข
๋ฅ์
๋๋ค. Web Server์ ์ ํํฉ๋๋ค.
- Web Server: ์ธํฐ๋ท์์ ์ ์ํ ์ ์๋ ์น ์๋ฒ์ ๋๋ค.
- Worker: ๋ฐฑ ๊ทธ๋ผ์ด๋ ์์ ์ ์ํ ํ๊ฒฝ์ ๋๋ค. ์ด ํ๊ฒฝ์ ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋์ด ์์ง ์์ต๋๋ค. ์์ปค์ ์น ์๋ฒ๋ SQS(Simple Queue Service)๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํฉ๋๋ค.
- Predefined configuration: ๊ฐ๋ฐ ์ธ์ด์
๋๋ค. Node.js๋ฅผ ์ ํํฉ๋๋ค.
- Docker๋ก ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ณ ๋ฐฐํฌํ๋ ค๋ฉด Docker๋ฅผ ์ ํํ๋ฉด ๋ฉ๋๋ค.
- Environment Type: ํ๊ฒฝ์ ๊ตฌ์ฑ ๋ฐฉ์์
๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Load Balancing, autoscaling: ๋ถํ ๋ถ์ฐ๊ณผ ์๋ ํ์ฅ์ ์ฌ์ฉํฉ๋๋ค.
- Single Instance: EC2 ์ธ์คํด์ค ํ๋๋ง ์ฌ์ฉํฉ๋๋ค.
์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด [Next]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์คํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ค๋ฅผ ์ ๋ก๋ํ๊ฑฐ๋ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํฉ๋๋ค. ์์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ณ ์์ค๋ฅผ ์ ๋ก๋ํด๋ณด์๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๋ฒ์ ๋ค์ด ํ์๋ฉ๋๋ค. ์ ์์ค๋ฅผ ์ ๋ก๋ํ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Existing application version: ๊ธฐ์กด์ ์ ๋ก๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฒ์ ์ ๋๋ค
- Upload your own: ์ฌ์ฉ์๊ฐ ์ ๋ก๋ํ ์๋ ์์ค์ ๋๋ค.
- S3 URL: S3 ๋ฒํท์ ์ ์ฅ๋ ์์ค์ ๋๋ค.
์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด [Next]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
Elastic Beanstalk ํ๊ฒฝ์ URL์ ์ค์ ํฉ๋๋ค.
- Environment name: ํ๊ฒฝ์ ์ด๋ฆ์ ๋๋ค. ์์์ ๋ง๋ ํ๊ฒฝ๊ณผ ์ด๋ฆ์ด ๊ฒน์น๋ฉด ์ ๋๋ฏ๋ก exampleapp-env2๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Environment URL: ํ๊ฒฝ์ URL์ ๋๋ค. URL์ ์ ์ผํด์ผ ํ๋ฏ๋ก Check availability ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ค๋ณต ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. ์ค๋ณต๋๋ฉด ๋ค๋ฅธ URL์ ์ ๋ ฅํฉ๋๋ค.
- Description: ํ๊ฒฝ์ ์ค๋ช ์ ๋๋ค. ์ ๋ ฅํ์ง ์์๋ ์๊ด์์ต๋๋ค.
์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด [Next]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ์ค์ ํฉ๋๋ค.
- Create an RDS DB Instance with this environment: RDS DB ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์ต์ ์ ๋๋ค. ์ด๋ฒ์๋ DB ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฒดํฌํ์ง ์์ต๋๋ค.
- Create this environment inside a VPC: ํ๊ฒฝ์ ๋ค๋ฅธ ๊ฒฉ๋ฆฌ๋ VPC์ ์์ฑํ๋ ์ต์ ์ ๋๋ค. ์ธ๋ถ์์ ์ ์ํ ์ ์๊ณ ๋ด๋ถ์์๋ง ์ ์ํด์ผ ํ ๋ ์ฌ์ฉํฉ๋๋ค. VPC์ VPN์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ๋ด๋ง์ ๊ตฌ์ถํ ๋ ํ์ฉํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฒ์๋ ์ธํฐ๋ท์์ ์ ์ํ ์ ์๊ฒ ํ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฒดํฌํ์ง ์์ต๋๋ค.
์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด [Next]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
Elastic Beanstalk ํ๊ฒฝ์ ์ธ๋ถ ์ค์ ์ ๋๋ค.
- Instance Type: EC2 ์ธ์คํด์ค์ ์ ํ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- EC2 key pair: EC2 ์ธ์คํด์ค์ ์ ์ํ ๋ ์ฌ์ฉํ ํค ์์ ๋๋ค. ์์์ ์์ฑํ awskeypair๋ฅผ ์ ํํฉ๋๋ค.
- Email address: ํ๊ฒฝ์์ ์ฃผ์ ๋ด์ฉ์ด ๋ฐ๋๋ฉด ์ด๋ฉ์ผ๋ก ๋ด์ฉ์ ๋ฐ์๋ด ๋๋ค. ์ด๋ฉ์ผ์ ์ ๋ ฅํ์ง ์์๋ ์๊ด ์์ต๋๋ค.
- Application health check URL: ELB์์ ์น ์๋ฒ(Node.js, ์ํ์น ์น ์๋ฒ, Nginx)๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ณ ์๋์ง ํ์ธํ URL์ ๋๋ค. ์ ๋ ฅํ์ง ์์ผ๋ฉด / ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ๋น์๋ก๋๋ค.
- Enable rolling updates: ๋จ๊ณ์ ์
๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ ์ต์
์
๋๋ค. EC2 ์ธ์คํด์ค์ ์ ํ์ ๋ณ๊ฒฝํ๊ฑฐ๋ EC2 ์ธ์คํด์ค๋ฅผ ๊ต์ฒดํ ๋ EC2 ์ธ์คํด์ค๊ฐ ์ ์ง๋๋ฏ๋ก ์ผ์์ ์ผ๋ก ์๋น์ค๊ฐ ์ค๋จ๋ฉ๋๋ค. ์๋น์ค๊ฐ ์ค๋จ๋์ง ์๋๋ก ์ผ๋ถ EC2 ์ธ์คํด์ค๊ฐ ์ด์ ์ค์ธ ์ํ์์ ๋ถ๋ถ์ ์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค. ์
๋ฐ์ดํธ๊ฐ ์๋ฃ๋ EC2 ์ธ์คํด์ค์์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ณ ๋จ์ EC2 ์ธ์คํด์ค๋ ์
๋ฐ์ดํธํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ์๋ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด๋ฒ์๋ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ๋น์๋ก๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋๋ค.
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rollingupdates.html - Cross zone load balancing: ์ฌ๋ฌ ๊ฐ์ฉ ์์ญ์ EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํ๋ ์ต์ ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Connection draining: Auto Scaling์ด ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌ ์ค์ธ EC2 ์ธ์คํด์ค๋ฅผ ๋ฐ๋ก ์ญ์ ํ์ง ๋ชปํ๋๋ก ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ '18์ฅ ๋ถํ ๋ถ์ฐ๊ณผ ๊ณ ๊ฐ์ฉ์ฑ์ ์ ๊ณตํ๋ ELB'์ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Connection draining timeout: Connection draining ๋๊ธฐ ์๊ฐ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Instance profile: EC2 ์ธ์คํด์ค์์ ์ฌ์ฉํ IAM ์ญํ ์
๋๋ค. ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋์ IAM ์ญํ ์ ์ ํํ ์๋ ์๊ณ ์๋ก ์์ฑํ ์๋ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก
aws-elasticbeanstalk-ec2-role
์ ์ ํํฉ๋๋ค.
์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด [Next]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
Elastic Beanstalk์ ํ๊ฒฝ์ ํ๊ทธ๋ฅผ ์ค์ ํฉ๋๋ค. 7๊ฐ๊น์ง ์์ฑํ ์ ์์ต๋๋ค. [Next]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ง๊ธ๊น์ง ์ค์ ํ ๋ด์ฉ์ ์ด์์ด ์๋์ง ํ์ธํฉ๋๋ค. ์ด์์ด ์์ผ๋ฉด [Launch]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
Elastic Beanstalk ํ๊ฒฝ ์์ฑ์ด ์์๋์์ต๋๋ค. Health๋ฅผ ๋ณด๋ฉด Launching์ด๋ผ๊ณ ํ์๋ฉ๋๋ค. ์์ ํ ์์ฑ๋๊ธฐ๊น์ง ์ฝ 5๋ถ ์ ๋ ์์๋ฉ๋๋ค.
์ด์ Node.js ์ ํ๋ฆฌ์ผ์ด์ ์์ค๋ฅผ ์์ ํ์ฌ ์๋ก ๋ง๋ ํ๊ฒฝ(exampleapp-env2)์ ๋ฐฐํฌํฉ๋๋ค.
์์์ ๋ง๋ค์๋ app.js
๋ฅผ ์ด๊ณ ๋ด์ฉ์ ์์ ํฉ๋๋ค. app.js
์ package.json์
์์ฑํ์ง ์์๋ค๋ฉด '23.2 AWS ์ฝ์์์ Elastic Beanstalk Node.js ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌํ๊ธฐ'๋ฅผ ์ฐธ์กฐํ์ฌ ๋ ํ์ผ์ ์์ฑํ๊ธฐ ๋ฐ๋๋๋ค.
๋ค์ ์ฝ๋์ res.send ํจ์์์ "- Env2"๋ฅผ ์ถ๊ฐํฉ๋๋ค.
app.js
var express = require('express')
, http = require('http')
, app = express();
app.get(['/', '/index.html'], function (req, res){
res.send('Hello Elastic Beanstalk - Env2');
});
http.createServer(app).listen(process.env.PORT || 3000);
.app.js
์ package.json
ํ์ผ์ exampleapp.zip
์ผ๋ก ์์ถํฉ๋๋ค.
๋ฐฉ๊ธ ์์ฑํ Elastic Beanstalk ํ๊ฒฝ(exampleapp-env2
)์ ํ์ด์ง์์ Upload and Deploy ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ ๋ก๋ ๋ฐ ๋ฐฐํฌ ์ฐฝ์ด ํ์๋ฉ๋๋ค. ํ์ผ ์ ํ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
ํ์ผ ์ด๊ธฐ ์ฐฝ์์ ๋ฐฉ๊ธ ์์ถํ๋ exampleapp.zip
ํ์ผ์ ์ ํํ๊ณ [์ด๊ธฐ]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
Git์ผ๋ก ๋ฐฐํฌ
AWS ์ฝ์์์ zip ํ์ผ์ ์ฌ๋ฆฌ์ง ์๊ณ Git์ผ๋ก ๋ฐฐํฌํด๋ ๋ฉ๋๋ค.
ํ์ผ์ ์ด๋ฉด Version label์ ํ์ผ๋ช
์ด ๊ทธ๋๋ก ์
๋ ฅ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ์
๋ก๋ํ ๋๋ง๋ค Version label์ด ๋ฌ๋ผ์ ธ์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ exampleapp2
์ ์
๋ ฅํฉ๋๋ค(๋ค์ ๋ฒ์๋ exampleapp3
exampleapp4
๋ฑ์ผ๋ก ์
๋ ฅํฉ๋๋ค). ์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด [Deploy]
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ ์ ๊ธฐ๋ค๋ฆฌ๋ฉด Health๊ฐ Updating์์ Green์ผ๋ก ๋ฐ๋๊ณ , Elastic Beanstalk ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ๊ฐ ์๋ฃ๋ฉ๋๋ค. ์ค๋ฅธ์ชฝ ์์ [Actions]
๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ์
๋ฉ๋ด๊ฐ ๋์ต๋๋ค. ์ฌ๊ธฐ์ Swap Environment URLs๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ด์ Elastic Beanstalk ํ๊ฒฝ(exampleapp-env2)์ URL์ ๊ต์ฒดํฉ๋๋ค. Select an Environment to Swap์ Environment name์ ํ์ฌ ์์ฑ๋ ํ๊ฒฝ์ ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค. ์ฒ์์ ์์ฑํ๋ Elastic Beanstalk ํ๊ฒฝ(exampleapp-env)์ ์ ํํ๊ณ Swap ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ ์ ๊ธฐ๋ค๋ฆฌ๋ฉด Health๊ฐ Updating์์ Green์ผ๋ก ๋ฐ๋๊ณ , Elastic Beanstalk ํ๊ฒฝ URL์ด ๊ต์ฒด๋ฉ๋๋ค. ์์ชฝ ํ๊ฒฝ URL์ด exampleapp-env2.elasticbeanstalk.com์์ exampleapp-env.elasticbeanstalk.com์ผ๋ก ๋ฐ๋์์ต๋๋ค. ์ด์ ์ด ๋งํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์น ๋ธ๋ผ์ฐ์ ์์ Elastic Beanstalk ํ๊ฒฝ URL์ ์ ์ํ๋ฉด ๋ฐฉ๊ธ ์์ ํ๋ app.js
์ ๋ด์ฉ์ด ํ์๋ฉ๋๋ค.
์ด์ฒ๋ผ Elastic Beanstalk ํ๊ฒฝ URL ๊ต์ฒด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์๋น์ค ์ค๋จ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.