ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS Lambda 활용 : Cron, 스케쥴러 처럼 주기적 반복 실행
    case Computer :/AWS | DevOps 2022. 1. 22. 14:11

    서비스를 만들다 보면 주요 서비스 외에 동일한 작업을 주기적으로 실행해야 하는 순간들이 있습니다.

    예를 들어 하루 한번 백업, 월 통계 계산 같은 같이 방법입니다.

    예전에는 Linux에서는 Cron 을 사용했었고 Windows에서는 Task Scheduler 를 통해 작업을 할 수 있었다.

    요즘에 serverless 로 서비스를 운영하는 곳도 많아지면서 다른 방법으로 스케쥴러를 사용해야 합니다.

     

    21년까지만 해보 CloudWatch에 "규칙(Rules)" 이 포함되어 있었지만 21년 어느 센가 EventBridge 라는 서비스로 분리되었습니다. EventBrige의 규칙을 사용하며 주기적으로 실행되도록 합니다.

     

    1. AWS Console에서 EventBridge 서비스로 이동합니다. 메인에서 "규칙 생성"을 선택합니다. 혹은 "규칙 메뉴 > 규칙 생성" 을 합니다. 아직까지는 CloudWatch 에 "이벤트 > 규칙" 메뉴를 통해 이동가능합니다.(저도 아직 적응이 안 되어 cloudwatch를 통해 접속합니다)

    AWS EventBrige

     

    2. 규칙 설정 - 이름

    규칙 이름은 사용자 마음대로 가능하지만 규칙이 여러개인 경우 이름을 언제 실행되는지 혹은 어떻게 실행되는지 알아볼 수 있게 합니다.

    예를 들어

    Every_5MIN - 5분마다 실행

    Every_1HOUR - 1시간마다 실행

    Every_MIDNIGHT - 매일 자정

    Every_FRIDAY_MIDNIGHT - 매주 금요일 자정

     

     

    3. 규칙 설정 - 패턴

     규칙이 실행되는 일정한 패턴이다. 쉽게 고정 비율마다 옵션을 사용해도 되며 cron으로 가능하다. 

    기능은 cron식이 더 복잡하게 가능합니다.

    고정 비율은 분 시 일을 고정적으로 밖에 사용 못한다.

    Cron 식에 대해서는 하단에 다시 상세하게 설명하겠습니다.

    Cron 식으로 작성했을 때 다음 언제 호출이 될지 시간 정보를 표시해 주기 때문에 좀 더 알기 쉽게 작성이 가능합니다.

     

    4. 규칙 설정 - 대상

    규칙마다 규칙으로 인해 호출될 대상을 5개씩 지정할 수 있다.

    여기서는 Lambda 함수를 선택하면 같은 리전에 있는 함수 목록을 선택만으로 설정 가능하다.

    함수 목록이 안 나온다면 지금 콘솔에 리전을 확인하세요

    상수의 경우는 하나의 lambda function으로 2개 이상에 프로세스를 처리할 때 유용합니다.

    예를 들어 데이터 백용 함수가 있는데 parameter를 통해서 일단위 주 단위 월 단위 백업을 할 수 있도록 구현하게 되었을 때 parameter를 통해 전달을 하게 되면 동일한 기능을 하는 코드를 분리할 필요 없이 사용 가능합니다.

     

    5. 저장

    저장 이후에 바로 적용이 되며 실행은 항상 0시 0분을 시준으로 실행이 됩니다.

    매 10분마다 실행하는 규칙은 10시 5분에 저장했다고 해서 10시 15분에 실행되는 것이 아니고 10시 10분, 10시 20분 이렇게 실행이 되는 것을 알고 있어야 합니다.

     

     

    * Cron Pattern

    Cron 식은 총 6개 필드로 구분합니다.

    [분] [시간] [일] [월] [주] [연]

    [Minute] [Hours] [Day-of-month] [Month] [Day-of-week] [Year]

    day-of-week : 1-7, 1:일요일, 7:토요일을 의미한다.

    많이 사용되는 특수문자
    대시(-) : 범위 

    콤마(,) : 여러 값

    아스트리크(*) : 모든 값을 의미하지만 aws 규칙에서는 day-of-moneth와 day-of-week에는 사용하면 안되며 ?를 대신 사용합니다.

    물음표(?): 값을 신경쓰지 않겠다(?) 라는 의미 무슨 값이 들어와도 된다.  

    # 매일 10시 00분에 실행
    0 10 * * ? *
    
    # 매일 10시 00분에 실행
    0 10 * * ? *
    
    # 주중(월-금)에만 저녁 6시에 실행
    0 18 ? * MON-FRI *
    0 18 ? * 2-6 *  # 위와 동일합니다.
    
    # 토요일 새벽 1시에 실행
    0 1 ? * SAT *
    
    # 매달 1일 00시 00분에 실행
    0 0 1 * ? *
    
    
    # 10분마다 실행
    0/10 * * * ? *
    */10 * * * ? *  #이것도 가능합니다.
    참조 : Schedule Expression for Rules  - aws document

     

    반응형

    댓글

Designed by Tistory.