aws-lambda image-resizing(node.js)
17214 ワード
어떤 서비스든지 이미지를 볼 때, 모바일에서 보는 이미지와 PC에서 보는 이미지는 용량이 다르고 크기도 다르다.
사용자가 어디서 보든지 원본 이미지를 그대로 보여주면 용량만 차지하고 비효율적이다. 때문에 때에 맞춰 이미지의 크기를 리사이징 해줄 필요가 있다.
lambda란? AWS Lambda는 Amazon Web Services의 일부로 Amazon에서 제공하는 이벤트 중심의 서버리스 컴퓨팅 플랫폼. 이벤트에 대한 응답으로 코드를 실행하고 해당 코드에 필요한 컴퓨팅 리소스를 자동으로 관리하는 컴퓨팅 서비스.
쉽게 말해 함수를 만들어 놓으면 서비스 안에서 이벤트가 실행될 시 코드를 실행해주고 필요한 리소스를 자동으로 관리해주는 것
aws lambdalambdaを使用して画像をリフレッシュする
1. 먼저 front와 back 폴더 2개가 있다면 root 폴터에 lambda 폴더도 생성해준다.
2. git init (package.json이 생김)
3. git add . && git commit
lambda 폴더안에 index.js 파일 생성
$ npm install aws-sdk sharp
const AWS = require('aws-sdk');
const sharp = require('sharp');
const s3 = new AWS.S3();
exports.handler = (event, context, callback) => {
const Bucket = event.Records[0].s3.bucket.name; // react-nodebird-s3
const Key = decodeURIComponent(event.Records[0].s3.object.key); // original/12312312_abc.png, decodeURIComponent: 한글 깨짐현상 해결
console.log('Bucket: ', Bucket, 'Key: ', Key);
const filename = Key.split('/')[Key.split('/').length - 1]; // 파일이름 추출
const ext = Key.split('.')[Key.split('.').length - 1].toLowerCase(); // 확장자 추출.toLowerCase(), 확장자 대문자를 소문자로
const requiredFormat = ext === 'jpg' ? 'jpeg' : ext;
console.log('filename', filename, '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);
}
};
이후 Linux(Ubuntu)에서 back으로 이동한다. 아래의 명령어를 차례로 실행
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/back$ sudo git pull
--------------------------------------------------------
lambda 파일로 이동
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/back$ cd ../lambda
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ sudo npm i
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ sudo apt install zip
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ sudo zip -r aws-upload.zip ./*
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ ls
aws.upload.zip index.js node_modules package-lock.json package.json
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ sudo curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ ls
aws.upload.zip awscliv2.zip index.js node_modules package-lock.json package.json
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ sudo unzip awscliv2.zip
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ sudo ./aws/install
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ aws
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: the following arguments are required: command
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ aws configure
AWS Access Key ID [None]: 실제값
AWS Secret Access Key [None]: 실제값
Default region name [None]: ap-northeast-2 (aws에 설정한 나의 위치)
Default output format [None]: json
--------------------------------------------------------
ubuntu@ip-000-00-00-000: ~/root/~/~/lambda$ sudo aws s3 cp "aws-upload.zip" s3://[사용자 S3 bucket 이름]
--------------------------------------------------------
이걸 하는 이유는 EC2에서 S3로 소스코드를 보내려고 한다. lambda 압축한 zip 파일을 S3로 보낼 것이다.
awsに行って正しく生成されているかどうかを確認します.Amazon S3 링크 URL:
https://coding-factory-s3.s3.ap-northeast-2.amazonaws.com/aws-upload.zip
https://[s3_bucket_name].s3.[aws에 설정한 위치].amazonaws.com/[압축한 파일 이름]
設定/一般設定/編集トリガーの追加
Reference
この問題について(aws-lambda image-resizing(node.js)), 我々は、より多くの情報をここで見つけました https://velog.io/@sksgur9800/aws-lambdanode.jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol