AWSS3Resizing
지극히 개인적으로 저장 해 두기 위해서 만든 기능
사전 준비
S3 버킷 생성
S3 버킷을 미리 생성 해 줍니다.
그리고 원활한 예제를 위해서 /images/origin에 파일을 하나 만들어 줍니다.
이벤트 트리거를 걸기 위해서는 우선 람다 함수가 필요하기 때문에 생성만 해 줍니다.
IAM 생성
lambda를 기반으로 S3에 접근 할 수 있는 IAM을 생성합니다.
IAM의 역할 -> 역할 생성 -> 사용 사례에서 Lambda 선택 -> AmazonS3FullAccess, AWSLambdaBasicExecutionRole 선택
Lambda 생성
람다를 생성 해 줍니다. 기존 역할에는 방금 생성한 IAM을 해 줍니다.
시간은 3초가 너무 짧습니다. 10초로 해 줍니다.
메모리도 128MB가 Default로 되어있는데, 메모리가 작습니다. 512MB로 만들어 줍니다.
코드 작성
sharp라는 모듈을 이용하여 이미지를 리사이징합니다.
Lambda는 기본적으로 생성 할 때 x64, 운영체제는 리눅스로 생성이 되기 때문에
아래의 명령어를 입력하여 모듈을 설치 해 줍니다.
npm install --arch=x64 --platform=linux sharp
index.js은 Node 18.x에서 사용하는 코드 입니다. index2.js는 Node 12.x에서 사용하는 코드 입니다.
코드 압축 및 업로드
람다에서는 기본적으로 Node 12.x에서는 aws-sdk가 설치가 되어있습니다. Node 18.x에서는 @aws-sdk/client-s3가 설치되어 있습니다.
그러나 sharp는 별도로 가지고 있지 않기 때문에 코드를 압축해서 업로드 해 주어야합니다.
코드 압축 후 "에서 업로드"를 눌러 업로드 해 줍니다.
업로드는 자동으로 Deploy가 됩니다.
테스트
테스트코드는 다음과 같습니다.
이벤트 예제에서 s3.bucket.name과 s3.bucket.arn, s3.objet.key를 수정 해 줍니다.
예시는 다음과 같습니다.
{
"Records": [
{
"eventVersion": "2.0",
"eventSource": "aws:s3",
"awsRegion": "ap-northeast-2",
"eventTime": "1970-01-01T00:00:00.000Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"responseElements": {
"x-amz-request-id": "EXAMPLE123456789",
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "testConfigRule",
"bucket": {
"name": "student-01-test-bucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
},
"arn": "arn:aws:s3:::student-01-test-bucket"
},
"object": {
"key": "images/origin/Loading Data.png",
"size": 1024,
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901"
}
}
}
]
}
S3에 트리거 설정
버킷에서 속성의 하단에 이벤트 알림을 생성 합니다.
여기서 작성 해야할 부분은 아래와 같습니다.
접두사 : images/origin
이벤트 유형: 전송(s3:ObjectCreated:Put)
대상 : Lambda 함수에서 만든 람다 선택