개발 블로깅/오늘의 TIL
[2019.06.11] 오늘의 TIL - serverless offline에서는 돌아가는데, 배포 후 internal error나는 현상
Hello이뇽
2019. 6. 11. 12:07
lambda 함수에서 s3에 이미지를 업로드 하는 함수를 작성했었는데, serverless offline에서는 잘 되던 함수가, AWS로 배포 후에 엔드포인트로 실행시키면, 서버 내부 에러 메세지를 반환하는 현상이 있었다.
처음에는, 엔드포인트로 요청하는 자체가 외부 서버 요청이므로 cors 문제인 줄 알았다. 그래서 API Gateway에서 cors 설정을 다 열어주는 법을 이것저것 찾아보는 삽질을 하였다..
그런데 알고보니 IAM role 설정이 문제였던 것.
IAM role 설정에, 해당하는 버킷에만 접근할 수 있는 권한을 주지 않아, 문제가 일어났던 것이다.
serverless.yml
iamRoleStatements:
- Effect: "Allow"
Action:
- "s3:ListBucket"
- "s3:getObject"
- "s3:putObject"
Resource:
- "arn:aws:s3::*:*"
serverless.yml 파일 중간쯤에 IAM Role 설정 부분이 있는데, 나는 임시로 위 코드와 같이 s3의 모든 버킷 접근을 허용하도록 했다.
그리고 배포 후에 다시 실행해보니 아주 잘 된다~!
# 문제를 해결하는 중에 알게된 내용
- serverless Framework 안의 serverless.yml에서 APM GateWay, IAM Role 등 여러가지 트리거를 설정하여 배포하면 AWS에 바로 적용이 된다.
- lambda함수에서 express를 설치하여 아예 서버로 대체할 수 있다.
- serverless Framework에 설치된 모듈들이 용량이 커서, AWS 배포 시에 모듈들이 압축파일로 S3에 먼저 업로드 후 lambda에 적용된다. 그래서 s3에 모듈 관련 버킷이 새로 생긴다.
향후에 시간이 된다면, lambda에서 image file 업로드를 하는 부분을 블로깅을 할 예정이다
반응형