Bare Minimum Requirements
- 이미지가 업로드되면, 원본과 별도로 썸네일을 생성하고, 이를 별도의 버킷에 저장해야 합니다.
- 썸네일 이미지는 가로 200px의 크기를 가집니다.
- 썸네일을 저장할 별도의 버킷은 람다 함수의 환경 설정으로 구성되어야 합니다.
- 아래 과제 제출 방법을 참고해 GitHub에 제출합니다.
sam init을 통해 템플릿을 생성한다
람다함수 파일을 수정한다
exports.helloFromLambdaHandler = async (event, context) => {
console.log(event)
console.log(context)
return 'Hello from Lambda!';
}
빌드 후 배포를 진행한다
트리거로 사용할 버킷을 생성한다
만든 버킷으로 트리거를 추가한다
버킷에 대상 이미지를 등록한다
람다 함수가 정상적으로 작동하는 것을 볼 수 있다
람다 함수에 작성했던 콘솔 로그를 통해 event와 context의 정보를 볼 수 있다
크기를 줄인 사진(썸네일)을 업로드할 버킷을 생성한다
람다 함수 역할에 S3 버킷에 접근하기 위한 권한을 넣어준다
기존 버킷에 올라간 사진의 크기를 줄여 새 버킷에 올리는 코드를 작성한다
const AWS = require('aws-sdk')
const util = require('util')
const sharp = require('sharp')
const s3 = new AWS.S3();
exports.helloFromLambdaHandler = async (event, context) => {
const s3Object = await s3.getObject({
Bucket: 'ks-serverless-photo-src-bucket',
Key: '1_PC.jpeg'
}).promise()
// 이미지 리사이즈, sharp 라이브러리가 필요합니다.
const data = await sharp(s3Object.Body)
.resize(200)
.jpeg({ mozjpeg: true })
.toBuffer()
// 대상 버킷으로 파일 쓰기
const result = await s3.putObject({
Bucket: 'ks-serverless-photo-image-bucket',
Key: '1_PC.jpeg',
ContentType: 'image/jpeg',
Body: data,
ACL: 'public-read'
}).promise()
}
트러블슈팅: Error: Cannot find module 'sharp'
사진 크기를 리사이징 하는데 필요한 sharp 모듈을 찾을 수 없다는 오류가 발생했다
package.json 파일에 sharp 모듈을 인스톨하는 구문을 추가한다
트러블슈팅: Invoke Error: AccessControlListNotSupported
버킷의 객체 소유권으로 인해 발생한 오류
새로운 사진을 업로드할 버킷의 객체 소유권을 편집한다
트러블슈팅: Invoke Error: Access Denied
람다 함수 역할에 S3 full access를 넣었는데도 access denied 오류가 떠서 당황했다
새로운 사진을 업로드할 버킷의 퍼블릭 액세스 차단을 해제해야 한다
리사이징된 사진이 대상 버킷에 정상적으로 업로드 된 것을 볼 수 있다
성공 로그
기존 사진과 리사이징 된 사진
성공적으로 리사이징 된 것을 볼 수 있다
'Code States > TIL' 카테고리의 다른 글
[0512] Infrastructure as Code - Infrastructure as Code (코드형 인프라) (0) | 2023.05.12 |
---|---|
[0511] (페어) 마이크로서비스 작성 - 서버리스 애플리케이션 (0) | 2023.05.11 |
[0510] (페어) 마이크로서비스 작성 - API Gateway와 서버리스 애플리케이션 (1) | 2023.05.10 |
[0509] 마이크로서비스 작성 - 마이크로서비스 배포 툴 (SAM 실습) (0) | 2023.05.09 |
[0509] 마이크로서비스 작성 - 독립적인 서비스 구성 (1) | 2023.05.09 |