AWS의 Lambda를 사용하여 간단한 분산 처리
이게 뭐야?
분산 처리는 AWS의 Lambda를 사용합니다.
이번에는 AWS SNS의 subscribe를 S3에 대한 업로드의 촉발로 추가하고 싶습니다.
구조
이 구성의 이점
흔히 볼 수 있는 모델로 AWS SNS의 로그인은 시간이 걸리고 전자 잡지와 트위터 알림을 하는 데는 시간이 걸린다.
이 구성의 경우 여러 서버가 SNS 등록을 하기 때문에 속도가 빨라집니다.
등록하고 싶은 내용
protocol: http
endpoint: http://example.com/임의의 문자
s3에 올라온 내용입니다.
1
b1
bb1
bbb1
bbbb1
bbbbb1
bbbbbb1
bbbbbbb1
bbbbbbbb1
bbbbbbbbb1
bbbbbbbbbb1
bbbbbbbbbbb1
람다 준비.
sample.js
var AWS = require('aws-sdk');
var sns = new AWS.SNS({
apiVersion: '2010-03-31',
region: 'ap-northeast-1'
});
var s3 = new AWS.S3({
apiVersion: '2006-03-01',
region: 'ap-northeast-1'
});
exports.handler = function(event, context) {
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var params = {
Bucket: bucket,
Key: key
};
s3.getObject(params, function(err, data) {
if (err) {
context.fail("Error getting file: " + err);
} else {
var objectBody = data.Body.toString();
var lines = objectBody.split(/\r\n|\r|\n/);
for (var i = 0; i < lines.length; i++) {
var params = {
Protocol: 'http',
TopicArn: 'arn:aws:sns:ap-northeast-1:*************:lambda_to_sns',
Endpoint: 'http://example.com/' + lines[i]
};
sns.subscribe(params, function(err, data) {
console.log(data);
});
}
}
});
// 終了条件若干適当なので、運用する場合はちゃんとするように
setTimeout(function(){
context.succeed();
}, 10000);
};
파일 만들기
1000개 정도의 파일을 만들어보도록 하겠습니다.
for i in {1..1000} ; do echo "$i\nb$inb$i\nbb$i\nbbb$i\nbbbb$i\nbbbbb$i\nbbbbbb$i\nbbbbbbb$i\nbbbbbbbb$i\nbbbbbbbbb$i\nbbbbbbbbbb$i\nbbbbbbbbbbb$i" > ./hoge$i.txt ; done
S3에 업로드
방금 만든 파일을 모두 버킷에 던져주세요.
결과
주의할 점
이 근처에 있는 람다의 상한선을 주의하세요.
http://aws.amazon.com/jp/lambda/faqs/
Q. 한 번에 실행할 수 있는 AWS Lambda 함수의 수가 제한됩니까?
AWS Lambda에서 기본적으로 특정 영역에서 계정당 동시 실행 가능 수는 100으로 제한됩니다.
또 이번에는 IAM 등록을 생략했기 때문에 잘 설정해야 한다
마지막
만약 네가 행운을 잘 쓸 수 있다면, 너도 잘못을 처리할 수 있다
Reference
이 문제에 관하여(AWS의 Lambda를 사용하여 간단한 분산 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shigure_onishi/items/8cb9b0e33f636941353d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)