티스토리 뷰

간혹 Ruby on Jets에서 작업을 해낸 후, AWS Lambda로 프로젝트를 배포하려 하면 다양한 사유 이름 때문에 오류가 발생하거나, 배포는 됐는데 기능이 작동하지 않는 경우가 있습니다.

 

개인적으로 오류를 겪은 사례에 대해 해당 글에 계속 업데이트를 해나갈 예정입니다.

 

 

1. '1분'과 같은 단수 표현 시, 's' 를 붙여선 안됨.

class CrawlJob < ApplicationJob

  rate "1 minute"
  def dig
    Post.create(title: "[#{Time.now.in_time_zone("Asia/Seoul").strftime('%Y-%m-%d %H:%M')}] 저는 일하고 있습니다.", content: "화이팅")
  end
end

2분과 같이 복수시간 표현일 경우엔  minutes  라고 표현해도 되나, 위와같이 scheduler job 시간단위가 '1분' 과 같이 단수표현일 경우  minutes  라고 표현해선 안됩니다.

 부록  당근마켓 연사 : Ruby on Jets 체험기 - '1 minutes' 표현 금지

 

 

2. 메소드 : 예약어 주의

일부 메소드에 대해선 예약어가 있다보니 메소드 이름 부여에 있어 주의해야 합니다. (Jets 내 사전 예약어와 동일한 메소드 이름을 지을 시, 함수 작동이 안됨.)

 

2020. 5. 2에 해당 메소드로 생성 및 함수 실행결과 무사히 잘 됐습니다.

Jets쪽에서 개선해낸 것 같습니다.

 실험 당시의 환경 

1. Jets 버전 : 2.3.15

2. Ruby 버전 : 2.5.3

 부록  당근마켓 연사 : Ruby on Jets 체험기 - 메소드 예약어 유의

 

 

3. cronab 규칙 미준수로 인한 에러

AWS 공식문서에 기재되어있는 정상적인 crontab 규칙은 아래와 같습니다. 

## 정상적인 crontab 규칙 표현

cron "30 3 * * ? *" # 매일 오전 3시 30분(UTC+0)에 간격으로 Job 실행
cron "*/5 * ? * SAT *" # 매주 토요일 5분 간격으로 Job 실행

 부록  AWS Lambda Crontab 규칙

 

Crontab 규칙 미준수로 인한 오류

1) '요일(week)' 혹은 '월(month)' 중 하나에는 따로 설정이 없을 시 ?로 표시해야한다.

## 잘못된 crontab 규칙 표현 ('요일'에 '?' 표현 미사용)
cron "30 3 * * * *"

## 잘못된 crontab 규칙 표현 ('월'에 '?' 표현 미사용)
cron "23 1 * * MON *"

 

본래는 '요일'에는 ?을 넣지 않아도 오류가 발생하지 않는데, AWS Lambda에서는 함수 등록(Jets배포) 시 day-of-month 또는 day-of-week 중 하나에 반드시 물음표(?) 삽입을 하도록 권장하고 있습니다.

 

AWS Lambda에 언급되어 있는 crontab 규칙

저같은 경우는 초기에 AWS 문서를 제대로 확인하지 않고, 위와같이 입력했다가 에러가 발생되는게 확인되었습니다.

 

 참고  ? 표현

1. '일''요일'에만 사용 가능한 표현식으로, 일단 둘 중 하나에만 사용이 가능합니다.

2. ?는 일 혹은 요일에 무관하게 scheduler가 작동되길 원할 때 사용 가능합니다.

예시 : cron "30 2 * * ? *" ⇒ 날짜에 관계없이 매일 오전 2시 30분(UTC+0)에 작업이 실행되게 해라.

 

2) crontab 인자는 총 6개여야 한다.

## 잘못된 crontab 규칙 표현 (crontab element 갯수 부족)

cron "30 3 * ? *"

한번은 코딩을 할 때 crontab 입력 시, 본래는 6개의 인자가 들어가야 하지만 모르고 5개를 넣었던 적이 있습니다.

위와같은 잘못된 작성 역시 오류를 일으키는게 확인됐습니다.

 

 

4. 임시파일 생성/보관

AWS Lambda에서는 일반적인 디렉터리 위치에는 파일 생성/보관이 안됩니다. 이는 디렉터리 권한 때문입니다.

오직  /tmp  한 디렉터리에 대해서만 파일 생성이 지원이 되는 점 참고해주세요.

 부록  Ruby on Jets : 임시파일 저장/보관

 

5. AWS Lambda 내 OS에서는 zip 명령어 미지원

AWS Lambda : zip 명령어 미지원 

AWS Lambda에서는 파일 압축을 하는 zip 명령어(unzip package)에 대한 지원을 하지 않습니다.

그렇다보니 Zip 명령어를 쓰고싶을 경우 Rails에서 zip을 지원하는 Gem을 활용해야 합니다.

 

Jets에 zip을 지원하는 Gem 설치 및 활용법은 아래 부록글을 참고해주세요.

 부록  Ruby on Jets : 파일 압축

 

 

댓글
댓글쓰기 폼
공지사항
Total
156,759
Today
59
Yesterday
130
링크
«   2021/11   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
글 보관함