AWS Lambda 예약 된 작업


145

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

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

예약 된 일들

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

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

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

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

답변:


159

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 * * ? *)

추가 자료

노트

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

1 분 정밀 지원에 대한 희망이 있는지 알고 있습니까?
kaptan

2
그것은 약간의 해킹이지만 1 분 동안이 작업을 수행 할 수 있습니다 youtube.com/watch?v=FhJxTIq81AU
ingh.am

4
이벤트 소스 유형은 이제 "CloudWatch Events-Schedule"
Guy Daher

@GuyDaher 감사합니다. 이에 따라 답변을 업데이트했습니다.
Anthony Neace

3
현재 1 분 속도를 지원합니다. docs.aws.amazon.com/lambda/latest/dg/…
advncd

18

이 게시물 이후로 다른 솔루션이 등장한 것 같습니다 . 저자가 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에 코드를 연결하는 것은 빠르고 쉽습니다. 신청 절차 나 계정 생성이 필요하지 않습니다


9
더 이상 올바른 대답이 아닙니다. 신뢰할 수없는 도시 시계는 더 이상 사용할 수 없습니다
blueskin

15

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

Werner Vogel은 re : Invent에서 오늘 밤 (10/08)에 발표했습니다.

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.


9

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

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

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

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

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

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


4
이 답변은 기본적으로 Shadi 's Answer에 설명 된 Unreliable Town Clock을 구현할 수있는 하나의 메커니즘에 대한 지침입니다 . UTC 작성자가 "언제든지 경고없이 사라질 수있다"고 경고하면 접근 방식이 훨씬 우수 할 것입니다.
Brian

첫 번째 구현-1 메시지-며칠 동안 작동하고 중지됩니다. 주기적으로 메시지가 SQS에 전달되지 않는 것 같습니다. 2 개 이상의 메시지 (합계 3 개)를 추가했습니다. 이제 일주일 동안 작동합니다. CloudWatch에서 주기적으로 누락 된 메시지가 표시됩니다. 단 2 개의 메시지 만 전달되었지만 여전히 타이머가 틱합니다. Gist.github.com/mikeplavsky/5ffe7e33e0d70a248537
maplpro

@Brian Unreliable Town Clock ( townclock.io ) 의 저자로서 나는 자신을 운영하는 것이 낯선 사람 (me)에 의존하는 것보다 더 많은 통제력을 제공한다는 데 동의합니다. 사실, 나는 자신의 신뢰할 타운 시계를 실행하는 사람들을 격려하고 GitHub의에 소스를 게시 한 : github.com/alestic/alestic-unreliable-town-clock
에릭 하몬드

4

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

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


시간이 변경되었습니다 및 람다 이제 상자 밖으로 크론 형 스케줄링 지원 docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html을
더크 콘래드 Coetsee에게

2

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

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


1

cloudWatch 이벤트로 예약 할 수도 있습니다. 규칙 작성-> 대상 (람다) 첨부 및 규칙에 cron / rate wise 스케줄을 설정하십시오.


1

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

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

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

기능 만들기

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
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"}]'

1

특정 시간 간격 동안 람다에서 쿼리를 실행하는 간단한 방법은 람다 함수에 대한 규칙을 설정하는 것입니다. 람다 함수를 만든 후에는 cloudwatch >> rules >> schedule로 이동하십시오. cron 표현식을 정의하고 대상 섹션에서 트리거하려는 람다 함수를 선택하십시오.


0

람다 함수를 생성하는 동안 트리거 "CloudWatch Events-Schedule"을 생성하십시오.

이제 rate = 15 분과 같은 스케줄 표현식에서 AWS 사전 설정을 사용하거나 cron 표현식을 사용할 수 있습니다.

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

요구 사항에 따라 Cron 일정은 "0 0 17 1/1 *? *"입니다.


-1

Diksha는 AWS Team에서 권장하는 AWS SWF 트리거를 기반으로하는 AWS Lambda Scheduler 입니다. cron 표현식을 사용하여 작업을 스케줄하고 실행할 시간, 시작 시간 또는 종료 시간을 지정할 수도 있습니다. 예약 된 작업 기록뿐만 아니라 상태도 볼 수 있습니다. 보안은 AWS 정책에 의해 관리됩니다.

diksha 엔진을 설정하면 다음과 같은 방식으로 cron 표현식을 사용하여 함수를 스케줄 할 수 있습니다.

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

이 작업에서 작업은 매분 10 회 실행됩니다. AWS SWF는 자체적으로 기능을 트리거합니다.

세부 사항 : https://github.com/milindparikh/diksha

면책 조항 : 나는 프로젝트에 기고자입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.