주요 기능
> 단순히 사진을 업로드하는 것 외에도, 인증 기능과 썸네일 생성 기능을 제공함
- 이미지가 업로드되면, 원본과 별도로 썸네일을 생성하고, 이를 별도의 버킷에 저장.
- 썸네일 이미지는 가로 200px의 크기를 가짐.
- 썸네일을 저장할 별도의 버킷은 람다 함수의 환경 설정으로 구성되어야 함.
1. sam init 명령을 이용해 Quick Start Template으로부터 Standalone function을 하나 생성
2.lambda 함수의 파라미터를 정의. 이는 이벤트 소스로부터 트리거가 발생했을 때 이벤트의 형태를 확인하기 위함입니다. 다음과 같이 코드를 작성
exports.helloFromLambdaHandler = async (event, context) => { console.log(event) console.log(context) return 'Hello from Lambda!'; }
3. 빌드 후 배포
4. S3 버킷을 하나 만들고, 트리거로 연결. 다음과 같이 설정.6. event와 context가 어떻게 콘솔에 출력되는지 확인하기 위해 "모니터링" 탭의 "CloudWatch에서 로그 보기"를 클릭하여 로그를 확인
5. 해당 버킷에 jpeg 이미지를 하나 올리면, 람다 함수가 실행
- "테스트" 탭 내 템플릿에서 S3 이벤트가 마련되어 있어서, 실제로 jpeg 이미지를 올리지 않고도 이벤트를 흉내 낼 수(mocking) 있다
7. event 객체 내용을 확인했다면, 이를 바탕으로 썸네일 생성 코드와, 버킷 저장 코드를 활용하여 썸네일 생성을 목적으로 하는 람다 함수를 작성npm install aws-sdk npm install sharp
> 코드에 있는 aws-sdk와 sharp 라이브러리를 사용하기 위해서 종속성 설치
but lambda는 리눅스 위에서 돌아 가기 때문에 리눅스 전용 sharp를 설치 해야함"dependencies": { "aws-sdk": "^2.1111.0" }, "scripts": { "preinstall": "npm install --platform=linux --arch=x64 --no-save sharp" }
하기 전 IAM에 권한을 적절히 부여했는지 확인하고,Amazon SQS를 생성해야 함
> 사전 조건
> SQS 콘솔 들어가서 '대기열 생성' 클릭
> 이름 작성> 대기열 생성 클릭
> 생성한 SQS 클릭 후 엑세스 정책 클릭 -> 편집
> 밑에 내용으로 수정
{
"Version": "2012-10-17",
"Id": "Policy1683731752793",
"Statement": [
{
"Sid": "Stmt1683731751782",
"Effect": "Allow",
"Principal": "*",
"Action": "sqs:*",
"Resource": "arn:aws:sqs:ap-northeast-2:775385743817:s3-event-deploy",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:s3:::serverless-photo-sec-bucket"
}
}
}
]
}
또한 lambda가 무한루프에 빠지지 않으려면 다른 SQS를 생성해, '배달하지 못한 편지 대기열'에 lambda와 연결할 SQS를 지정해 줘야 함
> S3와 SQS 연결을 하기 위해 S3에 이벤트 알림 클릭
> 이벤트 이름, .jpeg 작성> 이벤트 유형 -> 객체 생성 -> 모든 객체 생성 이벤트 클릭
> 대상에 밑처럼 선택 후 변경 사항 저장 클릭
> 트리거 추가를 클릭해 lambda와 SQS 연결
lambda가 수정한 섬네일을 SNS로 보내기 위해 SNS 생성
> 이메일로 알림을 받기 위헤 '표준 '선택
> 이름 작성
> 하단에 주제 생성 클릭
> 알림을 받을 이메일을 연결하기 위해 구독 생성을 클릭
> SQS에서 받은 데이터를 사용하고, sharp를 이용, SNS로 보내는 코드
오류
> sharp 라이브러리를 사용하기 위해, npm install sharp를 했었는데 오류가 발생했다
> lambda에서 sharp를 못찾는 오류였다.
> 해결 방법
lambda가 리눅스로 돌아가기 때문에, 리눅스 전용 sharp 설치 해야 한다.
"dependencies": {
"aws-sdk": "^2.1111.0"
},
"scripts": {
"preinstall": "npm install --platform=linux --arch=x64 --no-save sharp"
}
'DevOps BootCamp > 마이크로서비스' 카테고리의 다른 글
AWS 서버리스 애플리케이션 배포 (0) | 2023.05.09 |
---|---|
API Gateway (1) | 2023.05.09 |
AWS Lambda (0) | 2023.05.09 |
CQRS (0) | 2023.05.08 |
메시지 브로커를 이용한 비동기식 통신 (0) | 2023.05.08 |