로컬 환경은 Mac OS, 백엔드 서버는 Linux 환경의 AWS EC2에서 진행하였습니다.
로컬 작업
1. 프로젝트 폴더 제일 상위에 lambda 폴더 생성하기
npm init을 통해 package.json을 생성한다.
이 때 package.json에 정의하는 name이 AWS에서의 lambda의 이름으로 지정됩니다.
2. package 설치하기
npm i aws-sdk sharp
3. lambda/index.js
const AWS = require('aws-sdk');
const Sharp = require('sharp');
const S3 = new AWS.S3({ region: 'ap-northeast-2' });
exports.handler = async (event, context, callback) => {
const Bucket = event.Records[0].s3.bucket.name;
const Key = event.Records[0].s3.object.key;
const filename = Key.split('/')[Key.split('/').length - 1];
const ext = Key.split('.')[Key.split('.').length - 1];
const requiredFormat = ext === 'jpg' ? 'jpeg' : ext;
try {
const s3Object = await S3.getObject({ // S3로부터 이미지를 get
Bucket,
Key,
}).promise();
const resizedImage = await Sharp(s3Object.Body) // Sharp 패키지를 이용한 리사이즈 진행
.resize(800, 800, {
fit: 'inside',
})
.toFormat(requiredFormat)
.toBuffer();
await S3.putObject({ // 리사이즈한 이미지를 thumb 폴더에 저장한다.
Body: resizedImage,
Bucket,
Key: `thumb/${filename}`,
}).promise();
console.log('success');
return callback(null, `thumb/${filename}`);
} catch (error) {
console.error(error);
return callback(error);
}
};
S3로부터 이미지를 get하는 코드, 리사이즈하는 코드, 다시 S3 저장소로 put 하는 코드를 작성합니다.
이 후 git 저장소의 push합니다.
EC2 환경에서의 작업
이후 EC2 인스턴스로 ssh command를 통해 접속합니다.
접속 후 로컬에서 작성한 코드들을 git pull 및 npm install을 통한 패키지 설치를 진행합니다.
(permission 에러 발생시 sudo를 통하여 명령어를 실행)
1. root 디렉토리로 가서 .aws 폴더를 생성
cd ~
mkdir .aws
cd .aws
2. 생성한 폴더 내부에 vi를 이용하여 credentials를 작성하여 줍니다.
vi credentials
~/.aws/credentials
S3 접근을 위한 aws_access_key_id와, aws_secret_access_key를 입력하고 저장합니다.
3. claudia 패키지 설치하기
운영체제에 차이에 의해, 실제로는 lambda 코드의 업로드가 번거롭거나 쉽지 않은데요,
Node.js를 이용한 프로젝트에서는 AWS lambda로 쉽게 코드를 업로드를 도와주는 npm package인 claudia 활용합니다.
npm i -g claudia
4. claudia를 활용하여 lambda 함수 생성하기
sudo claudia create --region ap-northeast-2 --handler index.handler
이 후 코드를 수정하게 되어 lambda에 반영이 필요하다면,
sudo claudia update
명령을 통해 코드 수정을 반영 할 수 있습니다.
5. lambda 생성 결과
lambda 생성을 확인합니다.
이 후 lambda를 클릭하여, 트리거 설정을 진행합니다.
메뉴에서 S3를 선택 해주시고, 필요하시다면 접두사 파트에서 특정 폴더를 지정해 주실수도 있습니다.
그리고 마지막으로, 권한 - 실행 역할 탭에서 각 역할에 맞는 정책까지 연결합니다.
이 후 이미지 업로드시에, 이미지가 저장이 되는 S3에 이벤트가 발생하게 되면 lambda가 실행 됩니다.
즉, 이미지 리사이징이 진행되는 것이죠.
S3 버킷의 thumb 폴더 안에 리사이즈 된 이미지가 저장되어 있는 것을 확인하실 수 있습니다.
또한 모니터링 탭을 통해, lambda 실행 및 에러에 관련한 그래프와 로그도 기록된 것을 확인 해 볼 수 있습니다.
'아카이브' 카테고리의 다른 글
200621 / TIL (0) | 2020.06.21 |
---|---|
200620 / TIL (0) | 2020.06.21 |
200617 / TIL (0) | 2020.06.17 |
200616 / TIL (0) | 2020.06.16 |
200615 / TIL (0) | 2020.06.15 |