Amazon Athena의 쿼리 결과를 Lambda를 사용하여 자동으로 gzip 압축
대상 독자
다음 중 하나에 해당하는 사람
하고 싶은 일
Athena의 쿼리 결과는 CSV에서 S3에 저장됩니다.
쿼리에 의한 집계 끝난 데이터라고는 말해, 원시 CSV라면 수백MB~수GB가 되는 경우도 있다.
gzip 압축하여 다운로드시 대역폭과 전송 요금을 절약하고 싶습니다.
절차
AWS 콘솔에서 새로운 Lambda 만들기를 선택한 경우 화면 캡처와 함께 설명
Lambda Function 템플릿 선택
트리거 설정
S3를 선택하고 CSV 파일을 만들 때 Lambda가 시작되도록 설정합니다.
Lambda Function 설정
Lambda Function의 설정 화면이 되므로 적절하게 설정한다.
gzip 압축 작업의 경우 유효성 검사 결과 Node.js가 빠르기 때문에 여기에서는 Node.js를 사용합니다.
Role 만들기
위의 화면에서 Create New Role을 선택하면 Role 작성 화면으로 이동하므로 Role을 작성합니다.
코드 작성
설정을 완료하고 Lambda Function을 만들면 코드 편집 및 테스트 화면으로 이동합니다.
작성된 CSV를 gzip 압축하여 S3에 저장하는 코드를 작성합니다.
코드는 "AWS Lambda에서 S3에 배치된 파일 gzip"을 거의 그대로 이용했다.
var aws = require('aws-sdk');
var zlib = require('zlib');
exports.handler = function(event, context) {
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
console.log('starting gzip ' + bucket + '/' + key);
var s3 = new aws.S3();
var gzStream = s3.getObject({ Bucket: bucket, Key: key }).
createReadStream().pipe(zlib.createGzip());
var s3obj = new aws.S3({ params: { Bucket: bucket, Key: key + '.gz' }});
s3obj.upload({Body: gzStream}).
send(function(err, data) {
context.done(err, data);
});
};
테스트 이벤트 설정
코드가 예상대로 작동하는지 테스트합니다.
Lambda에서는 테스트 이벤트를 설정하여 코드를 시작할 수 있습니다.
이번에는 버킷 이름과 경로만 참조하므로 테스트용 경로로 다시 씁니다.
테스트 실행
결과 확인
트리거 활성화
실제로 Athena에서 쿼리를 발행해 본다.
샘플 테이블에 적당하게 쿼리를 발행해 보자.
S3을 보러 가면 CSV 파일과 함께 gzip 압축된 파일도 작성되고 있는 것을 확인할 수 있었다.
결과
Athena에서 쿼리를 발행하는 것만으로 자동으로 gzip 파일이 만들어지게 되었다.
Reference
이 문제에 관하여(Amazon Athena의 쿼리 결과를 Lambda를 사용하여 자동으로 gzip 압축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nohama/items/7f36e1cf672a19ff9604텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)