이미지 리사이징 서비스 설명
서비스 소개 및 설명은 아래에 나와있다.
https://yubi5050.tistory.com/332
구현 순서 (1~2)
1. S3 이미지 만들고 & S3 캐싱하는 CloudFront 만들기
2. Lambda (chalice) 코드 작성
- chalice의 lambda function 사용하여 구현
- edge 환경으로 ‘배포’를 하는 것을 Lambda@Edge 라고 한다.
- 코드는 cloudfront 이벤트 trigger 객체(payload) 받아서 파싱 + 리사이징 처리 + CloudFront 배포 등)
구현 순서 (3) Lambda (chalice) .config 셋팅
기본
- chalice는 IAM Roles(역할)을 자동으로 생성 해줌
- chalice config 링크 를 잘 읽고 config를 작성해야 한다!
chalice .config 과 IAM
- .config 에서 IAM 역할, 권한 비활성화 -> IAM에서 직접 관리 하기 위해
- IAM의 역할, 권한은 .config 로 생성 가능
- IAM의 신뢰 관계는 .config 로 생성 불가능
- chalice에서 IAM의 온전히 관리할 수 없기에, 직접 관리 하는 것
다음과 같이 chaclie에 셋팅(작성)
- IAM의 역할, 권한 자동으로 셋팅 안되게
- manage_iam_role : false
- 위 key false 조건에 따라 -> iam_role_arn 커스텀 iam arn 주소 입력 가능 (IAM 설정은 다음 4.에서)
{
"version": "2.0",
"app_name": "file-resizing",
"stages": {
"live": {
"lambda_functions": {
"test": {}
},
"manage_iam_role": false, // false 처리 되야 iam_role_arn 지정 가능
"iam_role_arn": "arn:aws:iam::<your arm 주소>:role/lambda-resizing-image",
"lambda_timeout": 30
}
}
}
구현 순서 (4-1) IAM 수동 설정 - 권한
- iam 역할 수동 생성
- iam 역할 - 권한을 다음과 같이 생성한다.
policy.json 파일 (aws iam 역할 - 권한)
// 배포 간 사용되는 파일 아님 - IAM 역할의 권한 (람다에서 해당 IAM 역할을 사용함)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
// lambda 컨트롤 권한
"lambda:InvokeFunction",
"lambda:GetFunction",
// 로그 권한
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
// cloudfront 권한
"cloudfront:UpdateDistribution",
"cloudfront:CreateInvalidation"
],
"Resource": "*"
}
]
}
구현 순서 (4-2) IAM 수동 설정 - 신뢰 관계
- iam 역할의 신뢰 관계 추가
- trust_policy.json 파일 (aws iam 역할 - 권한)
// 배포 간 사용되는 파일 아님 - IAM 역할의 신뢰 관계
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
// edge 환경 추가
"edgelambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
구현 순서 (5) 배포된 CloudFront 객체에서 캐싱 정책 설정
- 배포된 CloudFront 객체 접근
- '동작' 탭에서 query_parameter 설정 : width, height 등
구현 순서 (6) 배포된 CloudFront 객체에서 캐싱 정책 설정
- Lambda → Lambda@Edge 로 배포
- Lambda 설정 접속
- Lambda를 Lambda@Edge로 배포
최종 기능 및 응답/에러 정리
리사이징 성공인 경우
- ?width=500&height=300
- 상태코드 200, resizing 된 이미지 객체
리사이징 실패로 처리하는 경우
- 파라미터 부족 : ?width=500 (height 없음)
- 파라미터 값이 파일보다 더 크거나 0 : ?width=99999&height=99999
- 파라미터 자료형 유효 x : ?width=asdf&hegith=300
- 오리진 응답 상태값 200 아님
- 반환 결과 그대로 ~ (상태코드 200, 원본(오리진) 응답 객체)
- width 만 받고, 알아서 비율 조정
기타 참고 문서
- lambda edge 는 환경 변수를 지원하지 않음
- CloudFront는 배포된 Lambda 의 특정 version 을 바라본다. (버전 바꿔가면서 확인도 가능)
'AWS > Serverless Lambda' 카테고리의 다른 글
[AWS Lambda] Python Serverless 서비스 (Chalice) (0) | 2023.06.06 |
---|---|
[AWS Lambda] Python Serverless 서비스 (FastAPI + Mangum) (1) | 2023.06.06 |
[AWS] Serverless 서비스 - AWS Lambda (0) | 2023.06.06 |