1. Trigger를 S3로 설정한 lambda를 만든다.
(S3는 미리 만들어놔야 함)
1) Lambda > 함수생성 > 블루프린트 사용(aws에서 제공하는 템플릿) > s3 검색 > nodejs의 경우 s3-get-object
2) 구성 누른 후 나머지 설정은 기존 사용하던 값으로 설정,
S3 트리거에서 버킷을 만들어놓은 버킷으로 설정 + 이벤트 유형: 모든 객체 생성 이벤트
// 이렇게 하면, 모든 객체 생성 이벤트(생성삭제수정 등)가 일어날 때마다 lambda 함수가 호출된다.
3) 만들어진 람다
2. index.js 코드
const aws = require('aws-sdk');
const fs = require('fs');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = async(event, context, callback) => {
const bucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const params = {
Bucket: bucket,
Key: key,
};
// json 파일을 읽어와서 json 형태로 출력
var theObject = await s3.getObject(params).promise();
const data = JSON.parse(theObject.Body);
console.log(data);
// console.log(theObject.Body.toString('utf8')); // 보기 예쁜 형태로
// S3에서 이벤트가 발생할 때마다 로그에 찍어줄 값.
try {
const { ContentType } = await s3.getObject(params).promise();
console.log('CONTENT TYPE:', ContentType);
console.log('********** Event generated by S3 ************* ');
return ContentType;
} catch (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`;
console.log(message);
throw new Error(message);
}
};
3. 람다의 테스트에서 awsRegion, bucket-name, arn, key를 바꾸어주어야 정상 테스팅됨.
"awsRegion": “ap-northeast-2",
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "testConfigRule",
"bucket": {
"name": "jane-bkt”,
"ownerIdentity": {
"principalId": "EXAMPLE"
},
"arn": "arn:aws:s3:::jane-bkt"
},
"object": {
"key": "s3test.json",
"size": 1024,
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901"
}
4. 테스팅 결과
1) json 파일이 예쁘게 나온다.
2) S3의 해당 버킷에 새로운 파일을 업로드할 경우, 람다가 실행되어 Cloudwatch에서 로그를 확인할 수도 있다.
'직장생활 > AWS, GCP' 카테고리의 다른 글
terraform 0.14.6 mac(m1)에 설치하기, terraform 특정 버전 설치하기 (0) | 2022.05.24 |
---|---|
[AWS] EC2, Fargate, ECS, EKS 개념 (0) | 2022.05.23 |
[AWS] cloudwatch에서 slack으로 알람 포맷 예쁘게 보내기 (Nodejs) (0) | 2022.05.23 |
[AWS] cloudwatch, lambda를 통해 slack으로 알람 보내기 (Nodejs) (0) | 2022.05.23 |
[AWS] Lambda와 slack 연동하기 (Nodejs) (0) | 2022.05.23 |