๋ค์ด๊ฐ๋ฉฐ
ย ย ย ์๋น์ค ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด Serverless๋ก ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. AWS๋ฅผ ์ฐ๊ณ ์๋ค๋ฉด Lambda ๋ฅผ ํ์ฉํ๋ฉด ๋๋๋ฐ, ๊ฐ๋จํ ๊ฒฝ์ฐ์๋ ์ฝ์๋ก ์ฝ๋๋ฅผ ์ง์ ์์ฑํ๊ฑฐ๋ ์ฝ๋๋ฅผ ์ง์ ์ ๋ก๋ ํด๋ ๋์ง๋ง ๊ฒฐ๊ตญ CI/CD ๊ตฌ์ฑ์ด ์๊ตฌ๋๋ค. Severless ๋ฐฐํฌ ๋ฐ ๊ฐ๋ฐ์ ์ํ ๋๊ตฌ๋ค์ ์ด๋ฏธ ๋ง์ด ์กด์ฌํ๋ค(Serverless, AWS SAM, Zappa(Python), Chalice(Python)) ๊ทธ ์ค์์๋ AWS SAM์ ํ์ฉํ์ฌ AWS Lambda์ ๋ฐฐํฌ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. ๋จ์ํ CI/CD ๋ฟ๋ง ์๋๋ผ ๋ก์ปฌ ํ ์คํ , IAC ์ ํจ๊ณผ๊น์ง ์ป์์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฒ๊ธ์ ํตํด์ SAM์ ํ์ฉํ์ฌ AWS Lambda๋ฅผ ๊ด๋ฆฌํ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
AWS SAM ๊ตฌ์กฐ
ย ย ย AWS SAM์ AWS ์ข ์์ ์ด๊ธด ํ์ง๋ง, ํ์ฌ ํ์ฌ์์๋ AWS Cloud๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๊ณ , ์์ ์ธ๊ธํ๋๋ก local testing๊ณผ ์ธํ๋ผ ๊ด๋ฆฌ๊น์ง ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์(AWS CloudFormation ๋ฆฌ์์ค๋ ํฌํจ๊ฐ๋ฅํ๋ค(๋งํฌ ์ฐธ๊ณ ), AWS SAM์ ์ฑํํ์๋ค. ์ธํ ์ด๋ ๊ตฌ์ฑ์ aws ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค. ํ์ฌ ์ฌ์ฉ์ค์ธ SAM ๊ตฌ์กฐ๋ฅผ ๊ฐ์ํํด์ ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
|
|
ย ย ย ์ฃผ์ ํ์ผ๋ค์ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
- common_layer/: Lambda Layer๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ Makefile ๋ฐ python dependency
- lambda_function1/, lambda_function2/: Lambda ์์ค
- samconfig.toml: ๋ฐฐํฌ์ ์ฐธ์กฐํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์
- template.yaml: SAM ๋ฐฐํฌํ๊ธฐ ์ํ template์ ์ ์
ย ย ย common_layer์ lambda_function ํด๋๋ ์์ ์ค๋ช ์ ์ํด ์ง์ ์ถ๊ฐํ ํด๋์ด๋ฉฐ, samconfig ์ template ํ์ผ์ sam application ์ด๊ธฐํ์ ์๋์ผ๋ก ์์ฑ๋๋ค.
ํ๊ฒฝ๊ด๋ฆฌ(Prod, Dev)
ย ย ย samcofing.toml์ ํ๋ผ๋ฏธํฐ ๊ฐ์ template.yaml์ ํ์ฉํ๋ฉด ๋ฐฐํฌํ๊ฒฝ์ ๋ถ๋ฆฌํ์ฌ ๋ฐฐํฌ, ๊ด๋ฆฌํ ์ ์๋ค. ๊ฐ๋จํ๊ฒ Lambda function 2๊ฐ๋ฅผ API Gateway 1๊ฐ๋ก ์๋นํ๋ ๊ตฌ์กฐ๋ฅผ ์์ ๋ก ๋ง๋ค์ด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
|
|
- line 9~20 : template์์ ์ฌ์ฉํ parmeter ์ ์, samconfig.toml์ ํตํด ๊ฐ์ ์ฃผ์ ํจ.
- line 24~45 : lambda_function1 ์ ์, parameter ๊ฐ์ ํ์ฉํ์ฌ Lambda ํจ์๋ช ๊ณผ subnet ํ๊ฒฝ๋ถ๋ฆฌ.
- line 33~39 : lambda_function1 ์ ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ ์ ์, ๋ค์ํ ๋ฆฌ์์ค์ง์ (S3, SNS Event…)์ด ๊ฐ๋ฅํ๋ฉฐ, ์์ ์์๋ API Gateway์ ’/first’ path๋ฅผ ํตํด ์์ฒญ์ด ๋ค์ด์ฌ๊ฒฝ์ฐ lambda_function1์ด ํธ๋ฆฌ๊ฑฐ ๋๋ค.
- line 47~70 : lambda_function2 ์ ์, parameter ๊ฐ์ ํ์ฉํ์ฌ Lambda ํจ์๋ช ๊ณผ subnet ํ๊ฒฝ๋ถ๋ฆฌ. API Gateway์ ’/second’ path๋ฅผ ํตํด ์์ฒญ์ด ๋ค์ด์ฌ๊ฒฝ์ฐ lambda_function2์ด ํธ๋ฆฌ๊ฑฐ ๋๋ค.
- line 72~75 : Lambda๋ฅผ ์๋นํ๊ธฐ์ํ API GW ์ ์
|
|
- line 5~12 : SAM config dev deploy section, stack_name์ SAM ๋ฐฐํฌ์ ์ฌ์ฉ๋๋ Cloudformation๋ช ์ ์ ์ํ๊ฒ์ด๊ณ parameter_overrides ์ต์ ์ ํตํด SAM template์ ์ ๋ฌํ parameter๋ฅผ ์ ์ํ๋ค.
- line 14~21 : SAM config production deploy section
- ์ด๋ ๊ฒ ์ ์ํ deploy option์ ๋ฐฐํฌ์
--config-env
์ต์ ์ผ๋ก ์ง์ ํ ์ ์๋ค. - ๋ฐฐํฌ ์์
1 2
sam deploy --config-env dev # dev sam deploy --config-env prod # prod
Layer ๊ด๋ฆฌ
ย ย ย Labmda์ ๊ฒฝ์ฐ ์ฝ๋ ์ ๋ก๋ ์ฌ์ด์ฆ ํฌ๊ธฐ์ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์, ์ธ๋ถํจํค์ง๋ ๊ณต์ฉ ๋ชจ๋์๊ฒฝ์ฐ Lambda Layer๋ก ๋ฐ๋ก ๊ด๋ฆฌํ๋๊ฒ ์ข๋ค. SAM์์๋ Lambda Layer๋ฅผ bulidํ์ฌ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค. ์์ธํ ๋ฐฉ๋ฒ์ ๋งํฌ๋ฅผ ํ์ธํ๋ฉด ๋๋ฉฐ, ์ต์ข ์ ์ธ SAM template์ ์๋์ ๊ฐ๋ค.
|
|
Local test
ย ย ย SAM์ ํ์ฉํ์ฌ local์ ํ ์คํธํ๋ ์ต์ ์ ์ฌ๋ฌ๊ฐ์ง ์๋๋ฐ, ์ฃผ๋ก ์ฌ์ฉํ๋ ์ต์ ๋๊ฐ์ง๋ ์๋์ ๊ฐ๋ค.
sam local start-api
: ๋ก์ปฌ์์ API Gateway๋ฅผ ์คํํ๋ ์ต์ , ๋ก์ปฌ ์๋ฒ์ฒ๋ผ ํ ์คํธ ๊ฐ๋ฅํ๋คsam local invoke
: ๋ก์ปฌ์์ Lambda ํจ์๋ฅผ ์คํํ๋ ์ต์ , API Gateway๊ฐ ์๋ ๋ค๋ฅธ event๋ก ์คํ๋๋ ๊ฒฝ์ฐ ํ์ฉํ๋ค.- ์๋ฅผ๋ค์ด AWS SNS์ notification์ด ๋ฐ์๋๋ฉด Lambda ํจ์๊ฐ ์คํ๋๋ ๊ฒฝ์ฐ ํ
์คํธ๋ ์๋์ ๊ฐ๋ค.
1 2 3
sam local generate-event --help # --help๋ก event list ํ์ธ ๊ฐ๋ฅ sam local generate-event sns notification > events/sns-event.json # sns-event.json ์์ฑ sam local invoke TestFunction -e events/sns-event.json # TestFunction ์คํ
- ์๋ฅผ๋ค์ด AWS SNS์ notification์ด ๋ฐ์๋๋ฉด Lambda ํจ์๊ฐ ์คํ๋๋ ๊ฒฝ์ฐ ํ
์คํธ๋ ์๋์ ๊ฐ๋ค.
๋ง์น๋ฉฐ
ย ย ย ํ์ฌ ํ์ฌ์์ SAM์ ์ฌ์ฉํ์ฌ 10์ฌ๊ฐ์ Lambda์ ๊ด๋ จ ๋ฆฌ์์ค๋ค์ ๊ด๋ฆฌํ๊ณ ์๋ค. ๊ธฐ์กด์ ๊ฒฝ์ฐ Lambda์ ํ์๊ด๋ฆฌ๊ฐ ๋์ง ์๊ฑฐ๋ ์ค๊ตฌ๋๋ฐฉ์ผ๋ก ๋ฐฐํฌ๋๊ณ ์์๋๋ฐ, ์์ ๊ฐ์ด SAM์ผ๋ก ๊ตฌ์ฑํ ๋ค๋ก๋ ํ๋์ Repository ์์ Lambda๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ฐฐํฌ ์๋ํ๊น์ง ๊ตฌ์ถํ๊ฒ ๋์๋ค. ๋ํ samconfig๋ฅผ ํตํด ํ๊ฒฝ๊ตฌ์ถ์ ์ฝ๊ฒ ๋ถ๋ฆฌ ํ ์์๊ฒ ๋์ด ํ ์คํธ๋ PoC๋ฅผ ์ํ ๊ตฌ์ถ๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์งํํ ์ ์๊ฒ๋์๋ค.