์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ ์คํธ๋ถ์
- ์๋ง์กด์น์๋น์ค
- AWS
- ๋น ๋ฐ์ดํฐ
- abap
- ์๊ณ ๋ฆฌ์ฆ
- nlp
- github
- ํ ์คํธ๋ง์ด๋
- ๋ฐฑ์ค
- ํ๋ธ๋ก
- ๋ฆฌ์กํธ
- tableau
- react
- ํ์ด์ฌ
- ์ฝํ
- sap
- DFS
- Git
- ๊นํ๋ธ
- erp
- ๋ฐ์ดํฐ๋ถ์
- ์์ฐ์ด์ฒ๋ฆฌ
- AI
- ์ธ๊ณต์ง๋ฅ
- ๋ฅ๋ฌ๋
- ์ฝ๋ฉํ ์คํธ
- ํ๋ธ๋ฃจ
- ๋ฐ์ดํฐ ๋ถ์
- Today
- Total
Hey Tech
AWS Lambda์ Docker๋ฅผ ํ์ฉํ ํ์ผ ์ ๋ก๋/์ฝ๊ธฐ ์์คํ ๊ตฌํ ๋ณธ๋ฌธ
AWS Lambda์ Docker๋ฅผ ํ์ฉํ ํ์ผ ์ ๋ก๋/์ฝ๊ธฐ ์์คํ ๊ตฌํ
Tony Park (ํ ๋) 2022. 6. 20. 04:00๐ ๋ชฉ์ฐจ
1. ๊ฐ์
2. AWS ๊ธฐ๋ณธ ์ธํ
3. React ๊ธฐ๋ฐ ์น ํ์ด์ง ๊ตฌํ
4. AWS ECR ์์ฑ
5. AWS IAM Role ์์ฑ
6. ํ๋ก์ ํธ ํ์ผ ๋ฐ๊ธฐ
7. Docker ์ค์น
8. AWS CLI ์ค์น
9. Docker ์ด๋ฏธ์ง ๋น๋
10. AWS ECR ๋ก๊ทธ์ธ
11. ๋์ปค ์ด๋ฏธ์ง PUSH
12. Lambda ํจ์ ์์ฑ
13. AWS API Gateway ์์ฑ
14. Axios ๊ธฐ๋ฐ API Call
15. S3 ๊ธฐ๋ฐ ์ ์ ์น ํธ์คํ
16. ํ์ผ ์ฝ์ด์ค๊ธฐ ํ ์คํธ
1. ๊ฐ์
๋ณธ ํฌ์คํ ์์๋ Docker๋ฅผ ํ์ฉํ์ฌ AWS Lambda์์ ์ฐ๋ถํฌ์ ํ์ด์ฌ์ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ ์ธํ ํ๊ณ , AWS API Gateway๋ฅผ ํตํด ์น์์ ๋์ด์ค๋ ํ์ผ์(i.e., POST ๋ฉ์๋) ๋ด์ฉ์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ์์ ๋ค๋ฃฌ AWS๋ฅผ ํ์ฉํ ํ์ผ ์ ๋ก๋ ์น ์์คํ ๊ตฌ์ถ ํ๋ก์ ํธ์ ๊ฒน์น๋ ๋ด์ฉ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ด์ ์ ์ ๋ฆฌํ ์๋ฃ๋ฅผ ๋ง์ด ๊ฐ์ ธ์๋ค๋ ์ ์ฐธ๊ณ ํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค(Conf., ์๋์ '๋๋ณด๊ธฐ').
๐ ์ ํ ํ๋ก์ ํธ
1. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (1) React ๊ธฐ๋ฐ Frontend ๊ฐ๋ฐ
2. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (2) AWS IAM ์ญํ ์์ฑ
3. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (3) AWS Lambda ์์ฑ
4. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (4) AWS S3 ์์ฑ
5. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (5) AWS API Gateway ์์ฑ
6. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (6) AWS Lambda ํจ์ ์์ฑ
7. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (7) Axios ๊ธฐ๋ฐ API Call
8. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (8) ํ์ผ ์ ๋ก๋ ํ ์คํธ
9. ํ์ผ ์ ๋ก๋ ์น ํ์ด์ง ๊ตฌ์ถ: (9) AWS S3 ๊ธฐ๋ฐ ์น ํธ์คํ
1) ์ฌ์ฉ ๊ธฐ์
- Amazon Web Service(AWS)
- AWS Lambda
- AWS ECR
- AWS IAM
- AWS API Gateway
- AWS S3
- Docker
- React
- Python 3.6
- Ubuntu 20.04
2) ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด, S3์ ์ ์ ํธ์คํ ํ React ๊ธฐ๋ฐ ์น์ ์ฌ์ฉ์๊ฐ ๋ก์ปฌ์์ ํ์ผ์ ์ ๋ก๋ํ ๊ฒฝ์ฐ, API Gateway๋ฅผ ํตํด Docker๋ก ๋น๋ํ Ubuntu์ Python ๊ธฐ๋ฐ ์ด๋ฏธ์ง์์ ํ์ผ ๋ด์ฉ์ ์ถ๋ ฅํ๋ ์๋๋ฆฌ์ค์ ๋๋ค.
2. AWS ๊ธฐ๋ณธ ์ธํ
1) ์๋น์ค ๊ฐ์
๋จผ์ AWS ํํ์ด์ง์ ๋ฐฉ๋ฌธํ์ ์ ํ์๊ฐ์ ์ ํ์ ์ผ ํฉ๋๋ค. ์๋์ ๊ทธ๋ฆผ 1๊ณผ ๊ฐ์ด ์ต์ด ๊ฐ์ ํ ์ด๋ฉ์ผ ๊ณ์ ์ผ๋ก 1๋ ๊ฐ ๋ฌด๋ฃ ์ฒดํํ(a.k.a., ํ๋ฆฌ ํฐ์ด)์ ์ ๊ณตํฉ๋๋ค. ๋ฌผ๋ก ๋ฌด๋ฃ์ธ ๋งํผ ์ ์ฌ์ ์๋น์ค ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ํ์๊ฐ์ ์ ํด์ธ ๊ฒฐ์ ๊ฐ ๊ฐ๋ฅํ ์ ์ฉ์นด๋ ๋ฑ๋ก์ด ํ์์ ๋๋ค. ์ ํจํ ์ ์ฉ์นด๋์ธ์ง 100์์ ๊ฒฐ์ ํ๋ค๊ฐ ๊ณง๋ฐ๋ก ์น์ธ ์ทจ์๋๋ ์ ํจํ ์ ์ฉ์นด๋๋ฅผ ์ค๋นํด ์ฃผ์ธ์.
2) ์๋น์ค ์ง์ญ ๋ณ๊ฒฝ
ํ์๊ฐ์ ๊น์ง ์๋ฃํ์ จ๋ค๋ฉด ํ์ฌ PC๋ฅผ ์ฌ์ฉ ์ค์ธ ์ง์ญ๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฑฐ๋ฆฌ์ ์๋ ์๋น์ค ์ง์ญ(Region)์ ์ ํํ์ ์ผ ํฉ๋๋ค. ์ถํ์ ์๋น์ค ์๊ธ์ ๋ํด ์ดํด๋ณด๊ฒ ์ง๋ง, ์๋น์ค ์ง์ญ๋ง๋ค ๊ณผ๊ธ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋์ ๊ทธ๋ฆผ 2์ฒ๋ผ, AWS ํํ์ด์ง ์ฐ์ธก ์๋จ์ ์ง์ญ ์ด๋ฆ์ ํด๋ฆญํ๋ฉด ์๋น์ค ์ง์ญ์ ๋ณ๊ฒฝํ์ค ์ ์์ต๋๋ค. ๋ํ๋ฏผ๊ตญ์ ๊ฑฐ์ฃผํ๊ณ ๊ณ์๋ค๋ฉด Seoul์ ์ ํํด ์ฃผ๋ฉด ๋ฉ๋๋ค.
3. React ๊ธฐ๋ฐ ์น ํ์ด์ง ๊ตฌํ
์๋์ ํฌ์คํ ์ ์ฐธ๊ณ ํ์ฌ ์น ํ์ด์ง๋ฅผ ๊ตฌํํฉ๋๋ค.
https://heytech.tistory.com/403
4. AWS ECR ์์ฑ
AWS ECR์ Docker๋ก ๋น๋ํ ์ด๋ฏธ์ง๋ฅผ AWS ์์์ ์ ์ฅํ๊ณ ๋ค๋ฅธ AWS ์๋น์ค์์ ์ด์ฉํ ์ ์๋๋ก ์ง์ํ๋ ์๋น์ค์ ๋๋ค.
1) AWS ECR ์ฝ์ ์ ๊ทผ
์๋จ ๊ฒ์์ฐฝ์ Elastic์ ๊ฒ์ํ์๊ณ Elastic Container Registry๋ฅผ ํด๋ฆญํฉ๋๋ค(๊ทธ๋ฆผ 3).
3) ๋ฆฌํฌ์งํ ๋ฆฌ ์์ฑ
๋ฆฌํฌ์งํ ๋ฆฌ ์์ฑ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค(๊ทธ๋ฆผ 4).
๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ์ ์ค์ ํฉ๋๋ค. ํด๋น ์ด๋ฆ์ ํ์ฉํ์ฌ ํฅํ์ ํฐ๋ฏธ๋์์ ์์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํ ์ด๋ฆ์ผ๋ก ์ง์ผ์๊ธธ ๋ฐ๋๋๋ค(๊ทธ๋ฆผ 5).
5. AWS IAM Role ์์ฑ
IAM์ Identity and Access Management์ ์ฝ์๋ก, ํน์ ์ฌ์ฉ์๋ ๊ทธ๋ฃน์ ์๋น์ค ํน์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ ๊ด๋ฆฌํ๋ ์๋น์ค์ ๋๋ค. IAM ์๋น์ค์ ๋ํ ๊ฐ๋ ์ ์ด๊ณณ์ ์ฐธ๊ณ ํด ์ฃผ์๊ธธ ๋ฐ๋๋๋ค. IAM Role(์ญํ )์ ํน์ AWS ์๋น์ค์ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ๋ณด์ ์ฆ๋ช ์์ ๋๋ค. ์ฝ๊ฒ ๋งํด, AWS ๋ด ์ด๋ค ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ ์๊ฒฉ์ ์๋ฏธํฉ๋๋ค.
1) IAM ์๋น์ค ์ ๊ทผ
AWS ๊ฒ์์ฐฝ์ IAM์ ์ ๋ ฅํ์ฌ IAM ์ฝ์๋ก ์ด๋ํฉ๋๋ค(๊ทธ๋ฆผ 6).
2) ์ญํ ์์ฑ
์ข์ธก์ "์ญํ " ํ ์คํธ๋ฅผ ํด๋ฆญํ์ ํ, ์ฐ์ธก์ "์ญํ ๋ง๋ค๊ธฐ" ๋ฒํผ์ ๋๋ฌ์ฃผ์ธ์(๊ทธ๋ฆผ 7).
3) Lambda ์ ํ
AWS Lambda๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Lambda๋ฅผ ์ ํํ๊ณ ๋ค์ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค(๊ทธ๋ฆผ 9).
4) ECR Full Access ์ ํ
๊ฒ์์ฐฝ์ container๋ฅผ ๊ฒ์ํ์ ํ, ์๋์ AmazonElasticContainerRegistryPublicFullAccess๋ฅผ ์ฒดํฌํ์๊ณ ๋งจ ํ๋จ์ ๋ค์ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค(๊ทธ๋ฆผ 9).
5) ์ญํ ์ด๋ฆ ์ค์
์ด๋ฆ์ ์ค์ ํ์๊ณ ๋งจ ํ๋จ์ ์ญํ ์์ฑ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค(๊ทธ๋ฆผ 10).
6. ํ๋ก์ ํธ ํ์ผ ๋ฐ๊ธฐ
์๋์ Github์ Dockerfile, python ์ฝ๋ ๋ฑ ํ์ํ ํ์ผ์ ๋ชจ๋ ์ ๋ก๋ํ์์ต๋๋ค.
https://github.com/park-gb/aws-lambda-docker
zip ํ์ผ์ ์ง์ ๋ค์ด๋ก๋ ๋ฐ์ผ์๊ฑฐ๋ clone ํ์๊ธธ ๋ฐ๋๋๋ค.
git clone https://github.com/park-gb/aws-lambda-docker.git
7. Docker ์ค์น
Docker ๊ณต์ ํํ์ด์ง๋ฅผ ํตํด Docker๋ฅผ ์ค์นํ์๊ณ , docker๋ฅผ ๊ผญ ์คํํด ์ฃผ์ธ์!
https://docs.docker.com/get-docker/
8. AWS CLI ์ค์น
ํฐ๋ฏธ๋์์ ์ปค๋งจ๋ ๋ผ์ธ์ผ๋ก ์์ ํ๊ธฐ ์ํ์ฌ AWS Command Line Interface(CLI)๋ฅผ ์ค์นํฉ๋๋ค. ์๋์ ๋งํฌ์ ์ ์ํ์ ์ ์ด์์ฒด์ ์ ๋ง๋ ํ๋ก๊ทธ๋จ์ ์ค์นํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html
9. Docker ์ด๋ฏธ์ง ๋น๋
ํฐ๋ฏธ๋์ ํตํด ์์ ๋ค์ด๋ก๋ํ ํ๋ก์ ํธ ํ์ผ ํด๋๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๊ณ , docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํฉ๋๋ค. ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
docker build -t [์ด๋ฏธ์ง ์ด๋ฆ] .
๋น๋๊ฐ ๋ชจ๋ ์งํ๋์๋ค๋ฉด ์๋์ ๋ช ๋ น์ด๋ก ์ด๋ฏธ์ง์ ์กด์ฌ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
docker images
10. AWS ECR ๋ก๊ทธ์ธ
ํฐ๋ฏธ๋์์ ์์ ์์ฑํ๋ AWS ECR ๋ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. ๋ช ๋ น์ด๋ ์๋์ ๊ฐ์ผ๋ฉฐ 3๊ฐ์ง๋ฅผ ์์ ํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin [ECR ๋ฆฌํฌ์งํ ๋ฆฌ ID].dkr.ecr.[AWS ์๋น์ค ์ง์ญ].amazonaws.com/[ECR ๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ]
- ECR ๋ฆฌํฌ์งํ ๋ฆฌ ID: URI ๋งจ ์ ์ซ์12์๋ฆฌ(๊ทธ๋ฆผ 11)
- ์๋น์ค ์ง์ญ: ์์ธ์ผ ๊ฒฝ์ฐ ap-northeast-2
- ๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ: ์์ฑ ๋น์ ์์ฑํ ์ด๋ฆ
์๋์ ๊ฐ์ด ๋์๋ค๋ฉด ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ์ธ๋ ๊ฒ๋๋ค.
Login Succeeded
11. ๋์ปค ์ด๋ฏธ์ง PUSH
์์ ๋น๋ํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ AWS ECR์ ํธ์ํฉ๋๋ค. ์๋์ ์ฝ๋์์ ๋น๋ํ ๊ฐ์ ์ด๋ฏธ์ง ์ด๋ฆ, ECR ์์ด๋์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ ํด ์ค๋๋ค.
docker tag [๊ฐ์ ์ด๋ฏธ์ง ์ด๋ฆ]:latest [ECR ์์ด๋].dkr.ecr.ap-northeast-2.amazonaws.com/[ECR ๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ]:[ํ๊ทธ๋ช
]
์ฌ๊ธฐ์ ํ๊ทธ๋ช ์ ๋ฆฌํฌ์งํ ๋ฆฌ ์์ ์ ์ฅ๋ ์ด๋ฏธ์ง์ ์ด๋ฆ์ ๋๋ค. ์ฆ, ๋ก์ปฌ์์ ๋น๋ํ์ ๋์ ๊ฐ์ ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ์ด์ ์๋์ ๋ช ๋ น์ด๋ก ECR์ ์ด๋ฏธ์ง๋ฅผ ํธ์ํฉ๋๋ค.
docker push [ECR ์์ด๋].dkr.ecr.ap-northeast-2.amazonaws.com/[ECR ๋ฆฌํฌ์งํ ๋ฆฌ์ด๋ฆ]:[ํ๊ทธ๋ช
]
์๋์ ๊ฐ์ด push ์ค์ธ ๋ชจ์ต์ ํ์ธํ์ค ์ ์์ ๊ฒ๋๋ค.
12. Lambda ํจ์ ์์ฑ
AWS ๊ฒ์์ฐฝ์ Lambda๋ฅผ ๊ฒ์ํ์ ์ AWS Lambda ์ฝ์์ ์ ๊ทผํ๊ณ , ํจ์๋ฅผ ์์ฑํฉ๋๋ค(๊ทธ๋ฆผ 13).
์๋์ ๊ทธ๋ฆผ 14์ฒ๋ผ, ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ ํํ์ ํ์, ํจ์ ์ด๋ฆ์ ์์ฑํด ์ฃผ์ธ์. ๊ทธ ์๋์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ํญ์ "์ด๋ฏธ์ง ์ฐพ์๋ณด๊ธฐ" ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์์ ์์ฑํ๋ ECR ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ ํํ์๊ณ , ๋น๋ํ๊ณ push ํ๋ ์ด๋ฏธ์ง์ ํ๊ทธ๋ช ์ ์ฐพ์ ์ ํํด ์ฃผ์ธ์.
13. AWS API Gateway ์์ฑ
์น ํ์ด์ง์์ AWS Lambda์ ์ฐ๋ํ๊ธฐ ์ํ API Gateway ์ธํ ์ด ํ์ํฉ๋๋ค. ์๋์ ํฌ์คํ ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
https://heytech.tistory.com/407
14. Axios ๊ธฐ๋ฐ API Call
Axios ํจํค์ง๋ฅผ ํ์ฉํ์ฌ API Call ์ธํ ์ด ํ์ํฉ๋๋ค. ์๋์ ํฌ์คํ ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
https://heytech.tistory.com/409
15. S3 ๊ธฐ๋ฐ ์ ์ ์น ํธ์คํ
์ด์ ํ์ผ์ ์ ๋ก๋ํ ์น ํ์ด์ง๋ฅผ ํธ์คํ ํ์ฌ ํ์ผ ์ ๋ก๋๋ฅผ ํ ์คํธํฉ๋๋ค. ์๋์ ํฌ์คํ ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
https://heytech.tistory.com/411?category=559266
16. ํ์ผ ์ฝ์ด์ค๊ธฐ ํ ์คํธ
์ต์ข ์ ์ผ๋ก ์น์ ํ์ผ์ ์ ๋ก๋ ํ ํ์ Lambda์ cloudwatchlog๋ฅผ ํตํด ํ์ผ์ ๋ด์ฉ์ ์ ์ฝ์ด์ค๋์ง ํ์ธํฉ๋๋ค. ์๋์ ๊ทธ๋ฆผ 16์ฒ๋ผ, ์น์์ ์ ๋ก๋ํ ํ์ผ์ ๋ด์ฉ์ ์ ์ฝ์ด์ค๋ ๊ฒ์ ํ์ธํ์ค ์ ์์ต๋๋ค.
ํฌ์คํ ๋ด์ฉ์ ์ค๋ฅ๊ฐ ์๊ฑฐ๋ ๋ณด์ํ ์ ์ด ์๋ค๋ฉด ์๋์ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์!
๊ทธ๋ผ ์ค๋๋ ์ฆ๊ฒ๊ณ ๊ฑด๊ฐํ ํ๋ฃจ ๋ณด๋ด์๊ธธ ๋ฐ๋๋๋ค :)
๊ณ ๋ง์ต๋๋ค๐