많이 읽은 경제뉴스 텔레그램 알람 봇 만들기 - AWS Lambda - ③

2020. 3. 30. 18:53AWS

이제 2편에서 작성했던 코드를 실행시킬 서버가 필요합니다. 저의 주목적은 단순한 크롤러라기 보단 알람 봇이었기 때문에 자동으로 누군가 나에게 알람을 보내주는 기능을 원합니다. 그렇기 때문에 사용하고 있는 노트북에 프로그램을 24시간 켜 두고 크롤링을 하는 것은 의미가 없고 서버를 사용해야 합니다. 하지만 이 코드를 하루에 한 번 실행하기 위해 서버를 증설하는 것은 자원낭비가 심하여서 홈서버와 AWS-EC2 두 가지 전부 사용하지 않고 Lambda를 사용하는 것입니다.

 

Lambda 프리티어는 한달에 계산시간 400,000초, 요청건수 1,000,000건입니다. 어지간히 오래걸리는 코드이지 않는 이상한달에 400,000초를 넘기 힘들고 요청 건수도 5분에 한 번씩 코드를 실행시켜도 남는 정도라 개인이 사용하기에는 무리가 없습니다. 31일 X 24시간 X 60분 X 60초 = 2,678,400 초인데 총 1,00,000 건이 사용 가능하니 단순히 계산해보면 2,678,400 / 1,000,000 = 2.6784 초/건 이 나옵니다. 2.6784초에 한 번씩 코드를 실행해야 100만 건을 쓸 수 있습니다.

 

저도 AWS초보자라 불안한 마음으로 테스트 해보았는데, 실제로 한달정도 사용해보니 아래와 같이 요금이 청구되었습니다. 보시다시피 모두 프리티어 사용량에 한참 모자라는 정도라 안심하시고 사용하셔도 될 것 같습니다. 

(하지만 저랑 코드가 다르거나 하루에 한 번 요청이 아니라 자주 요청하시는 분들은 혹시 모르니까 요금서를 자주 확인해보시길 바랍니다.. 요금 폭탄 맞을 수도 있다고 하니까요..)

 

1. AWS 가입 및 프리티어 사용

  • 아래의 AWS 계정 생성을 누르고 순서대로 AWS 계정을 생성해주시면 됩니다.
  • AWS 프리티어는 가입 후 1년 동안 사용 가능합니다. 각 서비스별 프리티어에 대한 자세한 내용은 링크를 확인하시면 됩니다.

 

 

2. Lamdba 

  • AWS에 가입후에 초기화면에서 왼쪽에 제품 - 주요 서비스 - AWS Lamda를 들어갑니다.

 

 

  • 가입했던 이메일로 로그인을 해주시면 됩니다.

 

 

  • 로그인 후에 왼쪽 메뉴에 함수를 들어가시면 아무것도 없을 것입니다.(저는 만들어 둔 것이 있습니다.)
  • 우측에 함수 생성을 누르시면 됩니다.

 

 

  • 새로 작성, 블루프린트 사용, 서버리스 앱은 리포지토리 찾아보기가 차례로 보이는데 새로 작성을 선택합니다.

 

 

  • 아래에 기본 정보에서 함수의 이름을 작성하고 런타임은 코드를 작성할 때 사용한 언어를 선택하시면 됩니다.
  • 함수 이름은 아무거나 상관없습니다. 

 

 

  • 함수를 생성하시면 초기화면이 아래와 같이 나옵니다. 

 

 

  • 초기화면에서 더 아래로 내려가시면 함수 코드를 작성하는 부분이 나옵니다.
  • 1번은 아까 선택했던 언어를 뜻하고 4번은 코드를 작성하는 곳입니다.
  • 2번은 아래 예시에 따르면 3번의 코드명인 lambda_function에 4번의 실행 함수 명인 lambda_handler를 합쳐서 lamdba_function.lambda_handler 인 것입니다.

 

 

  • 핸들러 옆에 정보를 눌러보시면 우측에 도움말이 뜨면서 핸들러에 대한 설명이 나옵니다.

 

 

  • 4번에는 전에 우리가 작성했던 코드를 복사해서 붙여 넣기 합니다. 

 

 

  • 그다음 더 아래로 내려가면 기본 설정이 있는데, 편집을 눌러 줍니다.

 

 

  • 기본 설정 편집에서 메모리와 제한 시간을 설정해주는데, 짧은 코드이기 때문에 128MB 메모리 그대로 놔둡니다.
  • 제한 시간은 여유롭게 10초로 줍니다.

 

 

3. main 함수 수정

  • 이전 게시물에서 main함수를 수정할 필요가 있다고 말씀드렸습니다.
  • 위에서도 서술했다시피 코드이름과 코드 내에 실행될 함수명 때문입니다.
  • 코드명, 실행 함수 명과 핸들러를 맞춰주기만 하면 되기 때문에 둘 중 하나를 바꾸면 됩니다.
  • 저는 핸들러는 놔두고 코드명과  실행 함수명을 바꿔줬습니다. 

 

 

4. 트리거 사용

  • 이제 트리거를 사용해서 함수가 내가 원하는 시간에 작동하도록 설정합니다.
  • 초기 화면의 좌측 하단에 보시면 트리거 추가가 있습니다.

 

 

  • CloudWatch Event/EventBridge를 선택하시고 새 규칙 생성을 눌러줍니다.
  • 원하시는 규칙 이름과 규칙 설명을 적으시면 됩니다.
  • 규칙 유형의 예약 표현식을 체크하고 예약 표현식을 적으시면 되는데 예약 표현식이라는 것은 간단히 말하면 이 함수를 어떤 시간에 실행할 것인지에 대해 표현하는 식입니다.
  • 이 예약식은 rate 또는 cron 표현식 두 가지로 나타낼 수 있으며 링크에서 자세한 설명을 보실 수 있습니다.
  • 저는 오후 1시에 실행되길 원하기 때문에 cron(0 4 * * ? *)이라고 적었습니다.
  • 원래는 오후 1시라면 cron(0 13 * * ? *) 이 맞으나 AWS는 UTC기준이기 때문에 한국 시간보다 9시간이 빠릅니다.
  • 오후 1시에 작동되길 원한다면 UTC기준 오전 4시에 작동되도록 설정하면 9시간이 더해져서 한국 시간인 오후 1시에 작동이 됩니다.

 

 

 

4. 외부 라이브러리 사용

  • 트리거까지 설정하시고 다시 초기화면으로 돌아오시면 좌측에 메뉴 버튼을 눌러줍니다.
  • 참고로 메뉴 버튼을 눌러 창을 이동하면 위에서 바꾼 내용들이 저장되지 않기 때문에 바뀐 내용이 있다면 우측 상단에 저장을 항상 체크해줍니다. 

 

 

  • 좌측 메뉴 함수 아래에 계층(Layer)이 보일 텐데 계층을 누르고 우측의 계층 생성을 눌러줍니다.

 

 

  • 계층 구성창에서 역시 계층의 이름과 설명을 원하시는 대로 적어주시면 됩니다.
  • . zip 파일 업로드를 체크하시고 Lambda 내부에서 지원하지 않는 외부 라이브러리를 추가하시면 되는데 그 파일을 만드는 방법은 아래에서 설명하겠습니다. 

 

 

 

  • cmd창을 열고 라이브러리를 다운로드하고 싶은 폴더에 들어가서 pip install 패키지명 -t . 이라고 치시면 위치한 폴더에 해당 패키지가 설치됩니다.
  • 저와 코드가 똑같다면 python-telegram-bot, bs4, requests를 차례로 설치해주시면 됩니다.

 

 

 

  • 라이브러리를 설치한 폴더 내에 python이라는 새폴더를 생성하여 라이브러리들을 모두 python 새폴더에 넣습니다.

 

 

  • 다시 cmd창에서 python 폴더 바로 전 폴더인 test에 들어간 상태에서 zip -r  파일명. zip . 이라고 치면 test 폴더에 압축파일이 생깁니다.

 

 

 

  • 압축파일을 열었을 때 python 폴더가 상위 폴더가 되어서 통째로 압축되어 있으면 됩니다.

 

 

 

  • 이 압축파일을 위에서 본 계층 구성의 업로드에 넣고 아래와 같이 업로드하시면 됩니다.

 

 

  • 계층(Layer)을 만들었으니 다시 초기화면으로 돌아와 계층을 추가해줍니다.
  • Layers를 누릅니다.

 

 

  • 바로 아래에 계층 창이 뜨게 되고 Add a layer를 누릅니다.

 

 

 

  • Add layer 함수라는 새로운 창이 뜨는데 실행 시간 호환 계층 목록에서 선택을 체크하시고 아까 만들었던 계층 이름을 찾아 선택하고 버전(같은 이름으로 처음 만들었다면 버전 1)을 선택해서 추가해줍니다.

 

 

4. 테스트 및 확인

  • 이제 알람 봇을 사용할 준비가 다 되었습니다.
  • 실제로 오후 1시까지 기다리기에는 시간이 너무 오래 걸리므로 테스트를 해줍니다. 
  • 초기화면 우측 상단에 바뀐 내용들을 저장해 주시고 테스트를 누릅니다.

 

 

  • Configure test event라는 새로운 창이 뜨는데 새로운 테스트 이벤트 생성을 체크, Hello World 이벤트 템플릿을 선택하고 이벤트 이름을 원하시는 대로 작성해줍니다.

 

 

  • 테스트 이벤트를 생성하고 생성한 테스트 이벤트를 선택하여 우측 상단에 테스트 버튼을 눌러주시면 코드가 실행되었는지 오류가 발생하였는데 실행 결과가 나옵니다.

 

 

  • 코드가 성공적으로 실행되었고 저의 핸드폰에도 텔레그램으로 알람이 오면서 기사 목록이 전송되었습니다.

 

 

 

이것으로 많이 읽은 경제뉴스 텔레그램 알람 봇 만들기를 마칩니다. 감사합니다.

 

 

이전 포스팅

2020/03/20 - 많이 읽은 경제뉴스 텔레그램 알람 봇 만들기 - AWS Lambda - ①

2020/03/22 - 많이 읽은 경제뉴스 텔레그램 알람 봇 만들기 - AWS Lambda - ②