개발 블로깅/오늘의 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 업로드를 하는 부분을 블로깅을 할 예정이다

반응형