Serverless Framework@AWS에서 lambda를 정기적으로 시작하는 lambda 만들기
예를 들어, 람다의 콜드 스타트 비용을 최대한 지불하고 싶지 않을 때, 정기적으로 그 람다를 발화시키는 것이 하나의 패턴으로 소개되는 경우가있는 것 같습니다.
슬라이드: htps //w w. s에서 멋지다. 네 t / 케이스 케 69 / 츠네 우 푸아 ws-mb
그러므로 이것을 Serverless Framework로 해 보겠습니다.
아마도 이것을하는 사람은 많이 있다고 생각합니다. ↓의 링크처의 기사가 바로 이번의 예 그대로입니다만, Lambda의 이름을 리터럴로 묻는 근처가 확실히 오지 않았기 때문에, Qiita에 재작성해 보았습니다.
할 일
간단합니다.
Lambda 구현
이번에는 호출하는 쪽이라는 두 가지 함수를 동일한 JavaScript 모듈에 넣습니다. schedule로 발화하는 Lambda로부터, 불리는 Lambda의 이름을 아는 방법입니다만, 환경 변수
CRON_TARGET_NAME
로 건네주기로 합니다.const AWS = require("aws-sdk");
const lambda = new AWS.Lambda();
module.exports.hello = (_event, _context) => {
console.log("hello");
};
module.exports.cron = (_event, _context) => {
const params = {
FunctionName: process.env.CRON_TARGET_NAME,
InvocationType: "Event",
};
lambda.invoke(params, (err, data) => {
console.log(err, data);
});
};
serverless.yml
나머지는 구성 파일
serverless.yml
을 씁니다.service: schedule-test
provider:
name: aws
runtime: nodejs8.10
region: ap-northeast-1
memorySize: 128
iamRoleStatements:
- Effect: Allow
Action:
- lambda:InvokeFunction
Resource:
- "*"
functions:
hello:
handler: handler.hello
name: ${self:provider.stage}-hello-function
cron:
handler: handler.cron
environment:
CRON_TARGET_NAME: ${self:functions.hello.name}
events:
- schedule: rate(5 minutes)
Lambda를 시작하는 데 필요한 두 가지가 있습니다.
functions.cron
을 실행하는 사용자가 lambda:InvokeFunction
를 허용 함) AWS 문서에 따르면 ARN 대신 함수 이름으로 Lambda를 시작하기에 충분합니다
이 시동 대상인
function.hello
AWS의 이름은 functions.hello.name
에 지정할 수 있습니다. 이름을 디폴트가 아닌 명시적으로 지정해 두는 것으로, 다른 개소에서는 ${self:functions.hello.name}
로 참조할 수 있게 되기 (위해)때문에, cron
의 환경 변수 CRON_TARGET_NAME
에 이름을 건네줄 수 있게 되어 있습니다 .IAM에 대해서는
iamRoleStatements
를 작성하여 Lambda를 시작할 수 있는 권한을 더했습니다.하지 않는 것
iamRoleStatements
의 Resource
는 *
보다 좁은 것이 좋을지도 두 개의 Lambda 함수는 동기화되어야 할 것 같으므로
InvocationType: "Event"
가 더 적합 할 수 있습니다.참고 링크
Reference
이 문제에 관하여(Serverless Framework@AWS에서 lambda를 정기적으로 시작하는 lambda 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saka1_p/items/2fa689fc0dac62a0a91a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)