[AWS] elastic beanstalk: ์์

elastic beanstalk๋ ์น์๋ฒ๋ฅผ ์ฌ๋ฆฌ๊ธฐ ์ํ ์ข
ํฉ ํจํค์ง๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์ด๊ฒ ๋ญ ๋
๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ์๋๋ฐ, ๊ธฐ๋ณธ์ ์ธ ์๋ฒ ๊ตฌ์ถ๋ถํฐ ์คํ ์๋์กฐ์ , ๋ก๋๋ฐธ๋ฐ์ฑ๊น์ง ์๋์ผ๋ก ์ธํ
์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์๋นํ ํธ๋ฆฌํ๋ค ํ ์ ์๋ค.
๊ธฐ๋ณธ ์์ค๋ง ์ฌ๋ฆฌ๋ฉด ๋๋จธ์ง๋ ๋๋ถ๋ถ ์์์ ํด์ค๋ค.
๋ณธ ํฌ์คํธ์์๋ ๊ฐ๋จํ๊ฒ ์์๋ง ํ๋ฒ ํด๋ณด๊ฒ ๋ค.
์ฑ ๋ง๋ค๊ธฐ
๋จผ์ ์ฑ์ ๋ง๋ค์ด๋ณด์.
์ด๋ฆ์ ์ ์ด์ฃผ๊ณ ,
์ฌ์ฉํ ํ๋ซํผ์ ๊ณ ๋ฅธ๋ค.
Node.js, Java, Ruby ๋ฑ์ ๋ฉ์ด์ ํ ํ๊ฒฝ์ ๋๋ถ๋ถ ์ง์ํ๋ฉฐ, ๊ทธ๊ฒ ์๋๋ผ๋ Docker๋ก ์ง์ ์ฌ๋ฆด ์๋ ์๋ค.
์ด๋๋ก ์์ฑ์ ํ๋ฉด

๋ช๋ถ์ ๋ ๊ฑธ๋ฆด ๊ฒ์ด๋ค.

๋ฐ๋จ

์์ค ์ ๋ก๋ํ๊ธฐ
์ด๋ฒ์ ์๋ฒ ์์ค๋ฅผ ์์ฑํด์ ์ ๊ธฐ์ ๋ฐฐํฌํด๋ณด์.
์๋์์ ์ฌ์ฉํ ์ธ์ด์ ์ํ ์ฝ๋๋ฅผ ๋ฐ์์ ์๋ฒ๋ฅผ ์์ฑํ์.
๋จ์ ์๋ฒ๋ง ์์ฑํ๋ฉด ๋๋ ๊ฒ ์๋๋ผ ๋น์ฆํก ์ ์ฉ ์ค์ ํ์ผ๊ฐ์ ๊ฒ๋ ์ข ๋ฃ์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/GettingStarted.DeployApp.html
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ํ์ํ ๋งํผ ์์ ํด์ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๋ค.
์ ๊ธฐ์ ๋น์คํก์ด ์คํํ ๋ฉ์ธ ์์ค๋ app.js๋ค ์ ๊ฒ๋ง ์ ์ ํ ์์ฑํ๋ฉด ๋๋ค.

๋๋ ๋์ถฉ 2๊ฐ์ ๊ฒฝ๋ก๋ง ๊ฐ์ง๋ ๋จ์ํ ์๋ฒ๋ฅผ ๊ตฌํํ๋ค.

const port = process.env.PORT || 3000;
const fs = require("fs");
const log = function (entry) {
fs.appendFileSync(
"/tmp/sample-app.log",
new Date().toISOString() + " - " + entry + "\n"
);
};
const express = require("express");
const app = express();
app.get("/", async (req, res) => {
log("/ ํ");
res.json({ foo: "bar", text: "์ผ์
" });
});
app.get("/test", async (req, res) => {
log("/test ํ");
res.json({ foo: "test", text: "ํ
์คํธ" });
});
app.listen(port, () => {
console.log("## ์๋ฒ ์คํ");
});
์ทจํฅ๊ป ๊ตฌ์ฑํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋น์คํก ๊ด๋ฆฌํ์ด์ง๋ก ๊ฐ์
์
๋ก๋ ๋ฐ ๋ฐฐํฌ
๋ฐฉ๊ธ ์์ค๋ฅผ nodejs๋ผ๋ ์ด๋ฆ์ ํ์ผ๋ก ์์ถํด์ ์ ๋ก๋ํ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฝ๊ฐ์ ์ฒ๋ฆฌ์๊ฐ์ด ์์๋๋๋ฐ,
๋ค ๋๊ณ ๋์ ๋๋ฉ์ธ์ ๋ค์ด๊ฐ๋ณด๋ฉด

์์ฑํ๋๋ก ์ ๋ฐ์์ด ๋์ด์์ ๊ฒ์ด๋ค.


๋์ถฉ ์ด๋ฐ์์ผ๋ก ์จ๋จน์ผ๋ฉด ๋๋ค.
๋ค๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ์๊ฑด RDS๋ ๋ค์ด๋๋ชจ ๋ฑ์ผ๋ก ๋ณ๋ ๊ตฌ์ถํด์ผ ํ ๊ฒ์ด๋ค.
์ฐธ์กฐ
https://www.bespinglobal.com/introduction-aws-beanstalk/
https://www.slideshare.net/awskorea/aws-elastic-beanstalk-aws-aws-devday2018
https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/GettingStarted.html