【AWS】Lambda 함수를 격주(2주마다)로 자동 실행

소개



AWS Lambda 함수를 격주로 실행하는 방법을 찾았을 때의 메모.
CloudWatch Event에서는 격주나 격월의 스케줄로 처리를 트리거하는 cron식을 기술할 수 없기 때문에, 방법을 고안할 필요가 있었다.
이하, 3 패턴의 방법을 소개한다.

방법 1 CloudWatch Event(cron식에 의한 매주 실행) + Lambda 함수 코드 내에서 격주 판정


  • CloudWatch Event에서 Lambda 함수를 매주 실행하는 규칙을 만들고 실행 일정은 cron 식으로 정의합니다.
  • 룰에 의해 트리거되는 Lambda 함수측에서는, Lambda 함수 코드내에서 실제로 실행하고 싶은 처리의 앞에 격주 판정 처리를 기술해, 격주일만 실행하고 싶은 처리를 실시하도록 한다.

  • 설정 예



    2019년 4월 26일(금)을 기준일로 격주 금요일 18시(JST)에 Lambda 함수 「MyLambdaFunc1」(Python 런타임)을 실행하는 경우

    CloudWatch 이벤트

    매주 금요일 18시 (JST)에 Lambda 함수 "MyLambdaFunc1"을 실행하는 규칙 "MyRule1"을 작성
    $ aws events put-rule --schedule-expression "cron(0 9 ? * FRI *)" --name MyRule1
    $ aws events put-targets --rule MyRule1 --targets MyLambdaFunc1
    

    람다

    Lambda 함수 「MyLambdaFunc1」의 코드내에서 실제로 실행하고 싶은 처리의 앞에, 함수 실행일이 2019년 4월 26일부터 짝수 주 경과한 날인 경우는 처리를 계속, 홀수주 경과한 날인 경우 처리를 종료하는 격주 판정 처리를 기술

    lambda_function.py
    from datetime import datetime
    
    def lambda_handler(event, context):
    
        ## 隔週判定処理 ##
        if (datetime.now() - datetime.strptime('2019/4/26', '%Y/%m/%d')).days % 14 != 0:
            return()
    
        ## 以降、隔週で実行したい処理 ##
    

    방법 2 API Gateway + 외부 스케줄 기능(예: Microsoft Flow)


  • API 게이트웨이에서 Lambda 함수를 트리거하는 API를 만들고 배포하여 외부에서 액세스 할 수 있습니다.
  • Microsoft Flow에서 격주로 API 게이트웨이에 액세스하는 플로우 만들기

  • 설정 예



    격주 금요일 18시(JST)에 Lambda 함수 「MyLambdaFunc2」를 실행하는 경우

    API 게이트웨이

    Lambda 함수 「MyLambdaFunc2」의 트리거가 되는 API를 작성. 배포한 API의 엔드포인트 URI와 API 키 인증을 설정한 경우에는 키 값을 삼가한다.
    API는 GUI로부터 작성해도 좋지만, 나의 과거 기사의 방법 로 한발로 작성하는 것도 가능.
    ///過去記事の方法///
    $ function_name=MyLambdaFunc2
    $ aws lambda invoke --function-name agdep --payload {\"functionName\":\"${function_name}\"} outfile;cat outfile | jq .;rm outfile
    
    ///実行結果に作成されたAPIのエンドポイントURIとAPIキーが出力される///
    [
      "https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/test-func_api_rsc",
      "XXXXXXXXXXXXXXXXXXXX"
    ]
    

    Microsoft Flow

    Microsoft Flow 로 플로우를 신규 작성해, 반복 트리거를 이하와 같이 설정.


    속성 이름

    설명


    간격
    2

    빈도


    시간대
    모든 시간대

    시작 시간
    현재 날짜와 시간 이후에 흐름을 처음 실행하고 싶은 날짜와 시간 이전의 모든 날짜와 시간
    yyyy-MM-ddTHH:mm:ss.sss 형식. 시간 말미에 Z 는 불필요

    설정요일
    금요일

    설정 시간(시간)
    18

    설정 시간(분)
    0





    HTTP 액션을 다음과 같이 설정.


    속성 이름

    설명


    방법
    POST

    URI
    API 엔드포인트 URI
    API Gateway에서 API를 만들 때 가져온 URI 지정

    헤더
    {"x-api-key": "API 인증 키"}
    ※API Gateway에서 API 키 인증을 설정한 경우에만. API 작성시에 취득한 API 키를 x-api-key 헤더로 지정




    방법 3 CloudWatch Event(rate식에 의한 격주 실행)


  • CloudWatch Event에서 Lambda 함수를 격주로 실행하는 규칙을 만들고 실행 일정은 rate 식으로 정의합니다. (규칙의 초기 실행 타이밍 = 스케줄 시작 타이밍을 지정할 수 없으며 규칙을 작성한 타이밍에서 첫 번째 실행과 스케줄을 시작하기 때문에 규칙을 작성하는 방법을 고안해야합니다.)

    설정 예



    규칙 작성시 및 작성시부터 격주로 Lambda 함수 「MyLambdaFunc3」를 실행하는 경우

    CloudWatch 이벤트

    격주로 Lambda 함수 "MyLambdaFunc3"을 실행하는 규칙 "MyRule3"을 만듭니다.
    $ aws events put-rule --schedule-expression "rate(5 minutes)" --name MyRule3
    $ aws events put-targets --rule MyRule3 --targets MyLambdaFunc3
    

    참고



    htps : // 코 m / 바르 탄 G / ms / b14 베 f93c004f90c0 세 4
    htps : // 이 m / 똥 r_조 / ms / 아 15 예 2760 아 1d9 796b67
    htps : // / cs. 아 ws. 아마존. 이 m/cぃ/ぁてst/레후에렌세/에ㄔㅇts/이어 x. HTML
    htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마 존 C ぉ 우도 tch / ぁ st / 에 ぇ ts / S 치 즈 ぇ ゔ ぇ ts. HTML
  • 좋은 웹페이지 즐겨찾기