▶ 이미지 크기를 줄이기 위함
▶ 새로운 서버를 만드는 것이 아닌 이미지가 등록 시 한 번씩 실행하는 함수
front
, back
폴더와 같은 위치에 lambda
폴더 추가npm init
aws-sdk
와 sharp
추가npm i aws-sdk sharp
따로 AWS 관련 인증 절차는 필요없음
const AWS = require("aws-sdk");
const sharp = require("sharp");
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
const Bucket = event.Records[0].s3.bucket.name; //engword-s3
const Key = decodeURIComponent(event.Records[0].s3.object.key); //original/1676005829013_korea1.jpg
console.log("Bucket", Bucket);
console.log("Key", Key);
const filename = Key.split("/")[Key.split("/").length - 1];
const ext = Key.split(".")[Key.split(".").length - 1].toLowerCase();
const requiredFormat = ext === "jpg" ? "jpeg" : ext;
console.log("filename", filename);
console.log("ext", ext);
try {
const s3Object = await s3.getObject({ Bucket, Key }).promise();
console.log("original", s3Object.Body.length);
const resizedImage = await sharp(s3Object.Body)
.resize(400, 400, { fit: "inside" })
.toFormat(requiredFormat)
.toBuffer();
await s3
.putObject({
Bucket,
Key: `thumb/${filename}`,
Body: resizedImage,
})
.promise();
console.log("put", resizedImage.length);
return callback(null, `thumb/${filename}`);
} catch (error) {
console.error(error);
return callback(error);
}
};
prepare/back
git pull 후 lambda 폴더로 이동 후 sudo npm i 진행
sudo apt install zip
sudo zip -r aws-upload.zip ./*
lambda 폴더에서
ls
입력 시aws-upload.zip
가 있으면 됨
awscliv2.zip
설치sudo curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
awscliv2.zip
해제sudo unzip awscliv2.zip
sudo ./aws/install
prepare/back/.env
에 있는 S3_ACCESS_KEY_ID
와 S3_SECRET_ACCESS_KEY
입력aws configure
AWS Access Key ID [None]: 본인의 S3_ACCESS_KEY_ID
AWS Secret Access Key [None]: 본인의 S3_SECRET_ACCESS_KEY
Default region name [None]: ap-northeast-2
Default output format [None]: json
aws-upload.zip
보내기aws s3 cp "aws-upload.zip" s3://버킷 이름
▶ 함수 이름 생성 후 아래의 코드 소스
오른쪽에 에서 업로드 클릭
> AWS S3 위치 누르기
https://본인의버킷이름.s3.ap-northeast-2.amazonaws.com/aws-upload.zip
1) s3로 설정
2) 버킷에 본인의 버킷 추가(클릭하면 됨)
3) 접두사 : s3에 있는 본인 폴더 추가
4) "입력과 출력 모두에 동일한 S3 버킷을 사용하는 것은 권장되지 않으며, 이 구성으로 인해 재귀 호출이 발생하고, Lambda 사용량이 증가하여 비용이 증가될 수 있음을 이해합니다." 체크할 것