https://serverlessland.com/patterns/lambda-dynamodb을 기반으로 진행
문제 - sam build 후 deploy 하면 배포가 되지 않고 에러가 발생
원인 - SAM CLI로 만들어진 스택이 아닌 다른 스택이 존재하고 있어서인것 같다...?
해결 - AWS CloudFormation 콘솔에 접속해서 스택을 직접 삭제해주니 잘 되었다.
항상 IAM 사용자에게 권한 잘 주기 - 실습 도중 권한 문제가 많이 발생했다..😅
API Gateway가 트리거가 되어 API 엔드포인트에 HTTP 요청을 보냈을 때 함수가 호출되어 DynamoDB에 값이 저장되는 것을 볼 수 있어서 좋았다. 특히 API 키를 이용하여 인증을 추가하고 권한 부여자를 이용한 인증까지 추가하여 POSTMAN으로 헤더에 x-api-key와 authorizationToken 값을 입력해야 요청이 보내지는 것을 해보니 API Gateway의 장점을 느껴볼 수 있었다.
문제 - 이미지 리사이징을 하기 위해 sharp 모듈이 필요했고 npm install 명령을 통해서 관련 모듈을 설치하였으나 그 후 build 후 deploy 하면 에러가 발생
원인 - 에러메시지로 구글링을 하였지만 나온 해결책을 전부해도 안되었고 모듈폴더를 지웠다 설치해도, 프로젝트 폴더를 지웠다 해도 안되었다... 심지어 에러 로그 밑에 나와있는 npm install --ignore-scripts=false --foreground-scripts --verbose sharp
, npm install --platform=linux --arch=x64 sharp
명령어를 입력해도 안됐다. 프로세서 문제인 것 같다..
해결 -
"scripts": {
"preinstall": "npm install --platform=linux --arch=x64 --no-save sharp"
}
학습 가이드에 M1 Mac 의 경우 package.json에 구성하라고 되어있다. 인텔 맥이어서 신경안썼는데 혹시나해서 추가해보니 된다... sharp 모듈을 dependencies에 패키지를 등록하지 않는다는 것 같다.
https://stackoverflow.com/questions/60181138/error-running-sharp-inside-aws-lambda-function-darwin-x64-binaries-cannot-be-u
이미지 업로드하는 S3 버킷과 리사이징되어 썸네일이 저장되는 S3버킷은 서로 다른 버킷이어야 한다. 같은 버킷으로 설정한다면 함수가 무한으로 트리거 되어 끔찍한 결과가 초래될 수 있다. (AWS에서도 함수 트리거로 S3 버킷을 설정할 때 해당사항에 대해 주의를 준다.
Lambda에서 함수가 실행되면 로그에 event가 기록되고 그 event에서 원하는 값을 가져와서 S3 버킷에 업로드된 이미지를 다른 S3 버킷에 저장할 수 있게 하였다. 함수에도 권한을 따로 설정해주어야 하는 것, SQS와 SNS에 정책을 설정해주어야 하는 것을 배웠고 간단하게나마 S3 버킷과 Lambda사이에 SQS를 두어 이벤트를 받아 함수가 실행하게 하였다. 또한 썸네일 저장 S3 버킷에 SNS를 연결하여 썸네일이 저장되면 메일로 알림이 가도록 해볼 수 있어 좋았다.