Programing

AWS Lambda 예약 된 작업

crosscheck 2020. 7. 1. 08:09
반응형

AWS Lambda 예약 된 작업


아마존은 AWS Lambda ( http://aws.amazon.com/lambda/ )를 발표했다 .

제품 설명에는 다음이 포함됩니다.

예약 된 일들

AWS Lambda 함수는 외부 이벤트 타이머에 의해 트리거 될 수 있으므로 정기적으로 예약 된 유지 관리 시간 또는 피크가 아닌 시간 동안 함수를 실행할 수 있습니다. 예를 들어, 바쁜 시간 동안 야간 아카이브 정리를 수행하도록 AWS Lambda 함수를 트리거 할 수 있습니다.

이 글을 읽었을 때 마침내 "크론 같은"작업을 일관되게 수행 할 수있는 방법을 알았습니다. 매일 오후 5시에 특정 쿼리를 실행하고 싶습니다.

그러나 설명서의 어느 곳에서도 이것을 찾을 수 없습니다. 프로그래밍 이벤트 또는 다른 AWS 서비스의 이벤트에 대한 트리거 만 언급합니다.

내가 오해 했습니까? 아니면 누군가 나를 문서화 할 수 있습니까?


2015 년 10 월 8 일에 추가 된 예정된 이벤트에 대한 기본 지원 :

AWS 블로그 게시물 에서 발표 한 바와 같이 , 스케줄링은 이제 " CloudWatch Events-Schedule " 이라는 이벤트 소스 유형 (트리거라고도 함) 으로 지원되며 속도 또는 크론 식으로 표현할 수 있습니다.

새로운 람다에 예정된 이벤트 추가

생성하는 '트리거 구성'단계로 이동하고 'CloudWatch Event-Schedule'트리거를 지정하십시오. 아래 구성 예 :

UTC 5pm에 스케줄 된 이벤트를 작성하기위한 구성을 보여주는 이미지.

기존 람다에 예약 된 이벤트 추가

람다의 '트리거'탭으로 이동하여 '트리거 추가'를 선택하고 'CloudWatch Event-Schedule'트리거를 지정하십시오. SNS 트리거가있는 기존 람다가있는 스크린 샷 예 :

Lambda 콘솔에서 트리거 UI를 추가하기 위해 탐색하는 방법을 보여주는 이미지입니다.

일단로드되면이 트리거를 구성하기위한 UI는 위의 "새 람다에 예약 된 이벤트 추가"섹션의 스크린 샷과 동일합니다.

토론

예를 들어 cron()대신 을 사용하고 싶을 것입니다 rate(). 람다의 Cron 표현식에는 모든 필드가 필요하며 UTC로 표시됩니다. 따라서 매일 오후 5시 (UTC)에 함수를 실행하려면 다음 cron 표현식을 사용하십시오.

cron(0 17 * * ? *)

추가 자료

노트

  • 이 기능이 처음 릴리스 된 이후이 이벤트 유형의 이름이 "예약 된 이벤트"에서 "CloudWatch 이벤트-일정"으로 변경되었습니다.
  • 이 기능이 릴리스되기 전에이 문제에 대한 권장 솔루션 ( 42 분 50 초에 "AWS Lambda 시작"에 따라 )은 SWF를 사용하여 타이머 를 생성하거나 외부 애플리케이션으로 타이머를 생성하는 것이 었습니다.
  • 예정된 이벤트 블로그 게시물이 나온 이후 Lambda UI가 점검되었으며 스크린 샷이 더 이상 정확하지 않습니다. 최신 개정판은 2017 년 3 월 10 일부터 업데이트 된 스크린 샷을 참조하십시오.

이 게시물 이후로 다른 솔루션이 등장한 것 같습니다 . 저자가 SNS 주제 Unreliable Town Clock을 구독하도록 제안하는 UTC (Unreliable Town Clock)반복되는 AWS Lambda 호출 일정 . SWF 나 SNS를 사용하지 않았지만 SNS 솔루션이 더 간단한 것 같습니다. 여기 기사에서 발췌 한 내용이 있습니다.

신뢰할 수없는 도시 시계 (UTC)

Unreliable Town Clock (UTC)은 매 분기마다“chime”메시지를 모든 가입자에게 브로드 캐스트하는 새로운 무료 공개 SNS 주제 (Amazon Simple Notification Service)입니다. 차임벨을 AWS Lambda 함수, SQS 대기열 및 이메일 주소로 보낼 수 있습니다.

차임 속성을 사용하여 15 분마다 코드를 실행하거나 한 시간에 한 번 (예 : 분 == "00"일 때) 또는 하루에 한 번 (예 : 시간 == "00"및 분 = 일 때) 만 실행할 수 있습니다. = "00") 또는 다른 일련의 간격.

나중에 특정 시간에 한 번만 실행하려는 함수를 구독 할 수도 있습니다. 함수는 원하는 시간이 끝날 때까지 모든 호출을 무시하도록합니다. 시간이되면 작업을 수행 한 다음 SNS 주제에서 구독을 취소 할 수 있습니다.

Unreliable Town Clock에 코드를 연결하는 것은 빠르고 쉽습니다. 신청 절차 나 계정 생성이 필요하지 않습니다


새로운 솔루션 : Lambda 예약 된 작업

Werner Vogel은 오늘 저녁 (10/08) re : Invent에서 AWS Lambda에 자체 스케줄러가 있다고 발표했습니다.

2015-10-08AWS Lambda 릴리스 정보 :

AWS Lambda 콘솔을 사용하여 정기적으로 예약 된 코드를 호출하도록 AWS Lambda를 설정할 수도 있습니다. 고정 비율 (시간, 일 또는 주 수)을 지정하거나 cron 표현식을 지정할 수 있습니다. 예를 들어 연습 5 : Lambda 함수를 사용하여 예약 된 이벤트 처리 (Python)를 참조하십시오 .


기존 솔루션 : AWS Data Pipeline을 사용한 예약

AWS Data Pipeline을 사용 하여 지정된 기간의 작업 예약 할 수 있습니다 . ShellCommandActivity로 파이프 라인을 구성 할 때 조치는 모든 명령이 될 수 있습니다 .

예를 들어 AWS CLI 명령을 실행하여 다음을 수행 할 수 있습니다.

  • SQS에 메시지를 보내십시오
  • 또는 Lambda 함수를 직접 호출 하십시오 ( invoke 참조 ).

AWS 콘솔에서 직접 AWS Data Pipeline 예약 작업을 쉽게 생성 할 수 있습니다 (예 : AWS CLI 명령 사용).

여기에 이미지 설명을 입력하십시오

API를 사용 하여 예약 정의 할 수도 있습니다 .

{
 "pipelineId": "df-0937003356ZJEXAMPLE",
 "pipelineObjects": [
    {
      "id": "Schedule",
      "name": "Schedule",
      "fields": [
        { "key": "startDateTime", "stringValue": "2012-12-12T00:00:00" }, 
        { "key": "type", "stringValue": "Schedule" }, 
        { "key": "period", "stringValue": "1 hour" }, 
        { "key": "endDateTime", "stringValue": "2012-12-21T18:00:00"  }
       ]
     }, {
      "id": "DoSomething",
      "name": "DoSomething",
      "fields": [
        { "key": "type", "stringValue": "ShellCommandActivity" },
        { "key": "command", "stringValue": "echo hello" },
        { "key": "schedule", "refValue": "Schedule" }
      ]
    }
  ]
}

제한 : 최소 예약 간격은 15 분입니다.
가격 : 한달에 약 $ 1.00.


내가하는 방법은 다음과 같습니다.

  • 다음을 수행하는 Lambda를 만듭니다.

  • 다음에 대한 CloudWatch 경보 생성 : ApproximateNumberOfMessagesVisible> 1 분 동안 0

  • 경보에 SNS 주제 구독
  • SNS 주제에 Lambda 구독

이제 약 15 분 해상도의 타이머가 있습니다.

그런 다음 다른 Lambda 함수는 SNS 주제에 가입하고 15 분마다 호출됩니다.


HTTP를 통해 람다 함수를 쉽게 트리거 할 수 있기 때문에 (예 : GET 또는 curl 사용) 간단한 해결책은 easycron과 같은 관리되는 CRON을 사용하는 것입니다 : https://www.easycron.com/ 람다 함수가 실행되도록 트리거하십시오.

동일한 문제가 발생하여 CRON 작업 자체에서 더 많은 유연성과 복잡성을 허용했기 때문에 Python의 Google App Engine에서 cron 서비스를 실행했습니다.


기능 페이지의 트리거 추가에서 CloudWatch Events를 추가하고 일정 유형으로 만들 수 있습니다.

여기에 이미지 설명을 입력하십시오


웹 콘솔 방식은 매우 간단합니다. CloudWatch람다에 대한 규칙을 만들고 람다 Triggers에 추가 하십시오.

사람들을 위해 누가 그와 자동화 할 필요가있다 aws cli, 우리가 할 수있는

  1. 함수를 만들고
  2. 규칙을 만들고
  3. 권한을 부여하고
  4. 링크 규칙 및 기능

Create function

aws lambda create-function --function-name ${FUNCTION-NAME} \
--runtime java8 \
--role 'arn:aws:iam::${Account}:role/${ROLE}' \
--handler org.yourCompany.LambdaApp \
--code '{"S3Bucket":"yourBucket", "S3Key": "RC/yourapp.jar"}' \
--description 'check hive connection' \
--timeout 180 \
--memory-size 384 \
--publish \
--vpc-config '{"SubnetIds": ["subnet-1d2e3435", "subnet-0df4547a"], "SecurityGroupIds": ["sg-cb17b1ae", "sg-0e7ae277"]}' \
--environment Variables={springEnv=dev}

Create rules

## create
aws events put-rule --name ${ruleName} \
--schedule-expression 'rate(5 minutes)' \
--state ENABLED \
--description 'check hive connection'

# grant permission to the Rule to allow it to trigger the function
aws lambda add-permission --function-name ${functionName} \
--statement-id 123 \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:acc:rule/${ruleName}

# link rule and function
aws events put-targets --rule ${ruleName} \
--targets '[{"Id":"1", "Arn":"arn:aws:lambda:us-east-1:acc:function:RC-checkhive"}]'

simple way to run your query in lambda for particular time interval is to set rule for your lambda function. for that after creating lambda function go to cloudwatch>>rules>>schedule. and define cron expression and in the target section select lambda function which you want to trigger.


You could schedule it with cloudWatch events too. Create rule -> attach target (lambda) and set up cron/rate wise schedule on your rule.


While creating the lambda function create trigger "CloudWatch Events - Schedule"

Now you can either use AWS presets in schedule expression like rate = 15 min or you can use a cron expression.

여기에 이미지 설명을 입력하십시오

For your requirement the Cron Schedule is "0 0 17 1/1 * ? *"


Diksha is AWS Lambda Scheduler based on AWS SWF Trigger as recommended by AWS Team. One can schedule jobs using cron expressions and can also specify how many time you want to run, when to start or when to end. You can view status as well as history of scheduled jobs. Security is managed by AWS policies.

Once you set up diksha engine, you can schedule functions using cron expression in following way:

java -jar diksha-client-0.0.1.jar -lcfg cf1 -cj "jobName|functionName|context|0 0-59 * * * *|10"

In this job job will run every minute for 10 times. AWS SWF will trigger function by itself.

Details: https://github.com/milindparikh/diksha

Disclaimer: I am contributor to the project.

참고URL : https://stackoverflow.com/questions/27382009/aws-lambda-scheduled-tasks

반응형