Serverless framework๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ฝ๊ฒ ์๋ฒ ๋ฐฐํฌํ๊ธฐ
์๋ ํ์ธ์. ์ค๋์ ์ง๋ Serverless์ ์ด์ด์ Serverless๋ฅผ ์ข ๋ ์ฝ๊ฒ ๋ฐฐํฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์จ๋ณด๊ณ ์ ํฉ๋๋ค.
๋ฐฐํฌ์ ์ด๋ ค์
์ง๋ Serverless ํฌ์คํธ์์ AWS๋ฅผ ์ฌ์ฉํ์ฌ FaaS๋ฅผ ์ง์ ๋ฐฐํฌํ๊ณ ์๋น์คํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ดค์ต๋๋ค. ํ์ง๋ง ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋์งธ์น๊ณ ํ ๋ฒ ์ฝ๋๋ฅผ ์ ๋ก๋ํ์ฌ ์๋น์ค๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ๋ง์ ์ ์ฐจ๊ฐ ํ์ํฉ๋๋ค.
๊ฒ๋ค๊ฐ ์ฝ๋ ํ๋๋ฅผ ์์ ํ ๋๋ง๋ค ๋ฐ๋ก ๋ฐฐํฌ๊ฐ ๋๋ ๊ฒ์ ์ข์ ๊ฒฝ์ฐ์ง๋ง, ์ง์ AWS Console์์ ์ฝ๋๋ฅผ ์์ ํด์ผ๋ง ํ๊ณ , ์ฌ์ง์ด ์ฝ๋์ ํฌ๊ธฐ๊ฐ ์ผ์ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ AWS Console์์ ์์ ํ ์ ์๋ ์ํฉ์ ์ด๋ํ๊ธฐ๋ ํฉ๋๋ค.
๋ญ๊ฐ ๋ ์ฝ๊ฒ ๋ฐฐํฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๊น?
์ ๋ ์ค์ ๋ก AWS๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํํ์ ์นด์นด์คํก ํ๋ฌ์ค์น๊ตฌ API ์๋ฒ๋ฅผ ์ด์ํ๊ณ ์์ต๋๋ค. REST API ๊ฐ๋ฐ ์ดํ ์ด๋ฅผ ์ด์ํด๋ณด๊ณ ์ ์ ์ ๋น์ฉ์ผ๋ก ์ด์ํ๊ธฐ ์ข์ ๊ณณ์ ์๊ฒ ๋์๊ณ , ๊ทธ ์ค ํ๋๊ฐ ๋ฐ๋ก AWS์์ต๋๋ค. ์ฒ์์๋ ๋น์ฐํ IaaS๋ก ์ด์ํ๊ณ ์ ํ์๊ณ , ๊ทธ๋ฌ๊ธฐ์๋ ๋๋ฌด๋ ๋ง์ ๋น์ฉ์ ๊ฐ์ํด์ผ ํ์ต๋๋ค.
๊ทธ ๋น์ฉ์ ์กฐ๊ธ ๊ฐ์ํจ๊ณผ ๋์์ ์๋ก์ด ๊ฒ์ ๊ณต๋ถํ๊ณ ์ FaaS๋ฅผ ์์ํ๊ฒ ๋์๊ณ , ๊ทธ๋ฅผ ํตํด ๋๊ผ๋ ์ต๋์ ๋จ์ ์ค ํ๋๋ ๋ฐ๋ก ์ด๋ฐ ๋ฐฐํฌ ๋ฌธ์ ์์ต๋๋ค. ์ฝ๋ ํ ์ค์ ์์ ํ๋๋ผ๋ ๋ค์ ์ฒจ๋ถํด์ ํ์ผ์ ์ ๋ก๋ํด์ผ ํ๋ ๋ถํธํจ์ด ์์๊ณ , ๊ทธ๋ค์ ํจ์ ๋จ์๋ก ์์ง์ด๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ์ด๋ค ํจ์๊ฐ ์ข ์์ ์ด๋ผ๋ฉด ์ฝ๋ ๋ ๊ฐ๋ฅผ ๋์์ ์์ ํ์ฌ ์ฌ๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋น์ค๊ฐ ๊ฐ์๊ธฐ ๋๋ณํ๋ ๊ฐ์ ๋ ์๊ฐํด์ผ ํ์ต๋๋ค.
Serverless Platform
Serverless Platform์ ์ด๋ฌํ ๋ฐฐํฌ ๋ฌธ์ ๋ฅผ ์ํ์์ผ ์ค ์์ฃผ ์ต์ ์ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์ด ํ๋ก๊ทธ๋จ์ CLI ํ๊ฒฝ์์ ๊ฐ๋จํ ์ค์ ์ดํ ๋ช ๋ น์ด ํ๋๋ก ์ฝ๊ฒ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด๋ฐ๊ฒ ๊ฐ๋ฅํ ์ด์ ๋ ๋ฐ๋ก AWS์์ ์ ๊ณตํ๋ IAM ๋๋ถ์ธ๋ฐ, ์ด๋ ์ธ๋ถ์์๋ ๊ฐ๋จํ API ํธ์ถ๋ก ์๋ฒ๋ฅผ ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ด ๋ถ๋ช ํ ์ข์ ๊ฒ์ ์ฌ์ค์ด์ง๋ง ์น๋ช ์ ์ผ ์๋ ์์ต๋๋ค. ์ด๋ฅผํ ๋ฉด ์ด๋ฌํ ์ด์์ ์ํด ์ผ๋ถ ๋น์ฉ์ ์ง๋ถํด์ผ ํ ์๋ ์๋ค๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด๋ฅผ ๋๊ตฐ๊ฐ๊ฐ ์ ์ฉํ๊ฑฐ๋ ๊ด๋ฆฌ๊ฐ ์ ๋๋ก ๋์ด ์์ง ์๋ค๋ฉด ์๊ธ ํญํ ๋ง๊ธฐ ์ฝ๊ฒ ์ง์. ๋ฐ๋์ ์ค์ํ ์ฌํญ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ๋ํด์ ์ ๋์ ์ผ๋ก ์์งํด์ผ ํ ํ์๊ฐ ์์ต๋๋ค.
Serverless Framework ์ค์น
$ npm -g install serverless
Serverless Platform์ npm / yarn ํจํค์ง ๋งค๋์ ๋ฅผ ์ด์ฉํด์ ์ค์นํ ์ ์์ต๋๋ค. ๋ฆฌ๋ ์ค/์ ๋์ค์ ๊ฒฝ์ฐ ์์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ global ์ค์น๋ฅผ ์งํํฉ๋๋ค.
(ํน์ Permission ๋ฑ์ ๊ถํ ๊ด๋ จ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ๊ด๋ฆฌ์ ๊ณ์ ์์ ์งํํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.)
$ serverless login
Serverless ํ๋ซํผ์ ๋ก๊ทธ์ธ ํฉ๋๋ค. ์ ๋ก๊ทธ์ธํด์ผ ํ๊ณ , ์ด๊ฒ์ ๋ฌด์์ธ๊ฐ์? ์ฐ๋ฆฌ๊ฐ Serverless๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด์ ๋ฐ๋์ ์ด ํ๋ ์์ํฌ์ ๋ก๊ทธ์ธ ํด์ผ ํ ํ์๋ ์์ต๋๋ค .ํ์ง๋ง ์ด ๋ก๊ทธ์ธ์ ํฌ์คํธ์ ์ ์ผ๋ฉด์ ๊ถ์ฅํ๋ ์ด์ ๋ ์์ผ๋ก ์ฌ๋ฌ๋ถ๋ค์ด ๋ฐฐํฌํ ์ฝ๋๋ค์ ๋ํ ๋ฌธ์ ์์ ์ด๋ ๊ทธ ๋์์ ๋ฐฐํฌํ ํจ์์ ๋ํ ๊ธฐ๋ก์ด ๋จ๊ฒจ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด์ฐจํผ AWS์์๋ ๋น์ทํ ์ ํ์ผ๋ก ๋จ๊ธด ํ์ง๋ง ์ฐจ์ด์ ์ด ์๋ค๋ฉด Serverless ํ๋ ์์ํฌ์์๋ ๋งํฌ๋ค์ด ํํ๋ก ๋ฌธ์๋ฅผ ๋จ๊ธธ ์ ์๋ค๋ ์ ์์ ๋ฉ๋ฆฌํธ๊ฐ ์กด์ฌํฉ๋๋ค.
๊ทธ๋ผ ๊ณผ์ ์ ์งํํ๋ฉด์ ์ดํด๋ณด๋๋ก ํ์ฃ .
Serverless Framework๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Github ๊ณ์ ์ด ์กด์ฌํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ๋ถ๋ค์ Github ๊ณ์ ์ ๋ก๊ทธ์ธํ๋ฉด Serverless framework ๊ณต๊ฐ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
IAM ์์ฑ
AWS Console ์ธ๋ถ์์ ์์ ๋กญ๊ฒ ์๋ฒ๋ฅผ ๋ฐฐํฌํ๊ณ ์์ฑํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ๊ธฐ ์ํด์๋ ์์ ์ AWS ๊ณต๊ฐ์ ์ธ๋ถ์์๋ ์์ ๋ก์ด ์ฌ์ฉํ ์ ์๋๋ก ๊ถํ์ ์ฃผ๋ ๊ฒ์ด ํ์ํฉ๋๋ค.
AWS Console์์ IAM ํญ๋ชฉ์ ์ ์ํ๊ฒ ๋๋ฉด ์ผ์ชฝ ์ฌ์ด๋์ชฝ์ ์ฌ์ฉ์๋ผ๋ ๊ฒ์ด ๋ณด์ผ ๊ฒ์
๋๋ค. ์๋ฒ๋ฆฌ์ค ํ๋ ์์ํฌ๋ฅผ ์ํ ์ฌ์ฉ์๋ฅผ ํ ๋ฒ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฌ์ฉ์ ์ถ๊ฐ ๋ฒํผ์ ์ด์ฉํ์ฌ ์์ ๊ฐ์ด ์ ์ ํ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ก์ธ์ค ์ ํ์ ์ฃผ๋๋ก ํฉ๋๋ค.
์ด ๊ณผ์ ์ ๊ถํ์ ์ฃผ๋ ๊ณผ์ ์ ๋๋ค. ์ค์ ๋ก Serverless framework์์๋ Lambda, API Gateway, CloudFoundation ์ด๋ ๊ฒ 3๊ฐ์ ์๋น์ค์ ๋ํ ๊ถํ์ด ํ์ํ๋ฐ, ์ฒ์ ์ฌ์ฉํด๋ณด์๋ ๋ถ๋ค์ ์ํด์ ํธ์์ AdministratorAccess๋ผ๋ ์ ์ฒด ๊ถํ์ ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฌ์ฉ์ ์์ฑ์ด ์๋ฃ๋๋ฉด ์์ ๊ฐ์ด ์ก์ธ์ค ํค ID์ ๋น๋ฐ ์ก์ธ์ค ํค๊ฐ ์์ฑ๋ฉ๋๋ค. Serverless framework๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ฉํด์ผ ํ ํค์ด๋ฏ๋ก ์ ๋ฉ๋ชจํด๋๋๋ก ํฉ์๋ค.
Serverless framework ์ค์
์ด์ ๊ถํ์ ๋ํ ๋ถ๋ถ๋ ์๋ฃํ์์ผ๋ ๋ก์ปฌ์ ๋ฐฐํฌํ ์ ์๋ ํ๊ฒฝ์ ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
$ serverless config credentials --provider aws --key ์ก์ธ์คํคID --secret ๋น๋ฐ์ก์ธ์คํค
์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Serverless framework ์ค์ ์ ์งํํฉ๋๋ค. ์ด ๋ช ๋ น์ด๋ฅผ ํตํด ์์ฑ๋๋ ์ค์ ํ์ผ์ ~/.aws/credentials ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค.
Serverless ๋ฐฐํฌ
์ด์ ๋ฐฐํฌ๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด์ง๋์ง ์ง์ ์คํ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ฐ๋จํ๊ฒ Serverless framework์์ ์ ๊ณตํ๋ ํ ํ๋ฆฟ์ ์ฌ์ฉํด๋ณผ ๊ฒ์ ๋๋ค.
$ serverless create -t aws-python3 -p nk-serverless
AWS Lambda๋ Node.js, Python, C#, Java ๋ฑ ์ฌ๋ฌ๊ฐ์ง ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ์๋ฒ๋ฆฌ์ค ํ๋ ์์์์๋ python3 ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ์ธ์ด์ ํ ํ๋ฆฟ์ ์ ๊ณตํฉ๋๋ค. t ์ต์ ์ ์ด์ฉํด์ ์ํ๋ ์ธ์ด์ ํ ํ๋ฆฟ์ ๋ฐ์๋ณด์ค ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ฌ๋ฌ๋ถ๋ค์ด ์ํ๋ ์ต์ ์ ๊ณจ๋ผ์ฃผ์๋ฉด ๋ฉ๋๋ค. ๋ํ ํ์ฌ๋ Serverless framework์์ AWS ๋ฟ๋ง ์๋๋ผ Azure ๋ฑ์ ํ์ฌ ํด๋ผ์ฐ๋ ์๋น์ค์์๋ ํจ์ ๋ฐฐํฌ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์์ผ๋ ๋ค๋ฅธ ํด๋ผ์ฐ๋ ์๋น์ค์ ๋ํ ๋ฐฐํฌ๋ ๊ณ ๋ คํด๋ณด์๊ธฐ๋ฅผ ์ถ์ฒํด๋ด ๋๋ค.
ํ
ํ๋ฆฟ์ ์์ฑํ๋ฉด handler.py ๋ผ๋ ํ์ผ์ ๋ณด์ค ์ ์์ต๋๋ค. ํด๋น ์ฝ๋์๋ statusCode 200๊ณผ ํด๋ผ์ด์ธํธ์์ ์์ฒญํ๋ JSON ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ์ฝ๋๊ฐ ๋ด๊ฒจ์ ธ ์์ต๋๋ค.
serverless.yml ํ์ผ์ด ์ค์ํ๋ฐ, ์ด ๋ถ๋ถ์ด ๋ฐ๋ก ๋ฐฐํฌ์ ๊ด๋ จ๋ ๋ถ๋ถ์
๋๋ค. ์ฌ๋ฌ๋ถ๋ค์ ์ฝ๋๋ฅผ ์์ ํ ํ, ๋ฐฐํฌ ๋ช
๋ น์ ์ํํ๋ฉด ํ๋ ์์์์๋ ์ด ์ค์ ํ์ผ์ ๋ณด๊ณ AWS์ ๋ฐฐํฌ ๋ฐฉ์์ ๊ฒฐ์ ํ๊ฒ ๋ฉ๋๋ค.
๋ฐฐํฌ ๋ฐฉ์์ ๋ฆฌ์ ๊ณผ S3, IoT ๋ฑ ์ฌ๋ฌ AWS์ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๋ํ ์ ์๋ ์ต์ ๋ค์ด ์กด์ฌํ๋๋ฐ, ์ด ๊ธ์์๋ ๊ฐ๋จํ stage์ ๋ฆฌ์ , ๊ทธ๋ฆฌ๊ณ ๊ฐ API์ entry point์ ๋ํด์๋ง ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
service๋ Lambda์์ ํ์ํ Prefix(์ ๋์ฌ)์
๋๋ค. ์ค์ ๋ก ์๋ฒ๋ฆฌ์ค๊ฐ ๋ฐฐํฌ๋๋ฉด nk-serverless-nkTistory-hello ๋ผ๋ ์ด๋ฆ์ผ๋ก ํจ์๊ฐ ๋ฐฐํฌ๋ฉ๋๋ค.
stage๋ API Gateway์ ์ง์ ์ ๋๋ค.
region์ ํด๋น ํจ์๋ฅผ ๋ฐฐํฌํ๊ณ ์ ํ๋ ์ง์ญ์ ๋๋ค.
function์ ๊ฒฝ์ฐ ์ฒซ ๋ถ๋ถ์ ํจ์ ์ด๋ฆ์ handler ๋ถ๋ถ์ API์ ์์ ํจ์๋ฅผ ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
$ serverless deploy
์ด์ ์ด๋ฐ ์ค์ ํ์ผ์ ๋ฐํ์ผ๋ก ์์ผ๋ก๋ ์ ๋ช ๋ น์ด๋ง ์ ๋ ฅํด์ฃผ์๋ฉด...
์ด๋ ๊ฒ ์๋ฒ๋ฆฌ์ค ํ๋ ์์์ ํ ํ๋ฆฟ ์๋น์ค๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋๊ณ ์ด ๋๋ ํฐ๋ฆฌ์ ๋งํฌ๋ค์ด ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ฉด ์ฝ๊ฒ ๋ฌธ์๋ฅผ ์ด๋ํ์ค ์๋ ์์ต๋๋ค.
๊ฐ ํจ์๋ณ๋ก ๋งํฌ๋ค์ด ๋ฌธ์๋ฅผ ์์ฑํ์ฌ ๋งค๋ด์ผ์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
AWS์๋ ์ ๋ฐฐํฌ๊ฐ ๋์์ต๋๋ค.
๋ง์น๋ฉฐ...
์ฌ๊ธฐ๊น์ง Serverless๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ดค์ต๋๋ค.
์๋ง ์๋ฒ๋ฆฌ์ค๋ฅผ ์ผ๋ง ์ฌ์ฉํ์ง ์๋ค๊ฐ ์ ์ฉํ์ค ๊ฒฝ์ฐ์๋ ํท๊ฐ๋ฆฌ์ค ์๋ ์์ ๊ฒ์ ๋๋ค๋ง ๊ณ์ ์ฌ์ฉํ๋ ๋ถ๋ค์ ์ด ๊ณผ์ ์ ์ถ์ฝํ๋ฉด์ ํฐ ์ด์ ์ด ๋์๋ค๋ ๊ฒ์ ๋๋ผ์ค ์ ์์์ ๊ฒ์ ๋๋ค.
'Cloud Platform > AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Serverless ์์ํด๋ณด๊ธฐ (0) | 2018.04.23 |
---|---|
API Gateway์ ๋๋ฉ์ธ์ ๋ด ๋๋ฉ์ธ์ผ๋ก ์ค์ ํ๊ธฐ (0) | 2018.03.03 |