상황
Python을 사용하여 웹 스크래핑한 데이터를 카카오톡 API를 통해 전송하는 것을 프로그램을 개발하는 데 성공하였다.
하지만 매번 이렇게 프로그램을 실행시켜서 카카오톡으로 데이터를 보내면 의미가 없지 않을까 싶어서
특정 시간마다 프로그램이 실행되는 기능을 조사하였다.
그 결과, AWS Lambda 에서 EventBridge 스케줄러를 활용하면
일정을 직접 설정하여 함수를 실행시킬 수 있다는 것을 알게 되어서 시작하게 되었다.
그 전에...
먼저, 나는 재미 삼아서 구현하게 된 프로젝트이기 때문에 깊게 설명하지는 않을 예정이다.
이를 참고해주기 바란다.
자세한 사항은 아래 페이지를 나와있다. 나도 이것을 보고 스케줄러를 만들었다.
Amazon EventBridge 스케줄러와 함께 Lambda 사용 - AWS Lambda
Amazon EventBridge 스케줄러와 함께 Lambda 사용 Amazon EventBridge 스케줄러는 하나의 중앙 관리형 서비스에서 작업을 생성, 실행 및 관리할 수 있는 서버리스 스케줄러입니다. EventBridge 스케줄러를 사용
docs.aws.amazon.com
EventBridge 스케줄러
Amazon의 EventBridge 스케줄러는 하나의 중앙 관리형 서비스에서 작업을 생성, 실행 및 관리할 수 있는 서버리스 스케줄러이다.
이 스케줄러를 이용하여 반복 패턴에 대해 일정을 만들거나 일회성 호출을 구성할 수 있다.
또한, 특정시간에서 일정시간 내에 전송시킬 수 있는 유연한 기간을 설정할 수 있고, 재시도 제한을 정의하고
처리되지 않은 이벤트의 최대 보존 시간을 설정할 수도 있다고 한다.
나는 여기서 해당 스케줄러를 이용할 기간을 설정하고 매일 특정한 시간대에 함수를 호출하는 스케줄러를 만들었다.
EventBridge 트리거 추가
1. 트리거 추가버튼을 누른다. (나는 이미 스케줄러를 추가한 상태라 EventBridge가 생성되어 있다.)
2. EventBridge 를 선택한 후 사진에 보이는 것처럼 똑같이 선택해 준다.
- Rule 은 기존에 만들어둔 규칙이 없다면 새로운 Rule 을 만들어주면 된다.
이때, 이름과 설명은 자신이 쓰고 싶은대로 기입하면 된다. - Rule Type 은 스케줄러를 만들것이기 때문에 스케줄러 표현을 선택해 준다.
- Schedule Expression 은 특정 표현식을 사용하는데 cron 및 rate 표현식을 사용한다.
나는 여기서 cron 형식을 사용했다.
cron 형식은 아래링크를 참고해주길 바란다.
Cron expressions reference - Amazon EventBridge
If you use a '#' character, you can define only one expression in the day-of-week field. For example, "3#1,6#3" is not valid because it is interpreted as two expressions.
docs.aws.amazon.com
cron(0 22 * * ? *) : 매일 오전 7시 0분에 실행
여기서 cron 형식은 UTC 기준이기 때문에, 한국은 UTC 보다 9시간이 빠르므로 22+9 으로 다음날 7시로 계산이 된다.
이것을 기억하고 형식을 꼭 적어줘야 한다!
3. 그다음 추가 버튼을 누르면 EventBridge 가 생긴 것을 확인할 수 있다.
EventBridge 스케줄러 일정 생성
규칙은 일정에 맞춰 진행되는 것이기 때문에 일정을 생성해줘야 한다.
1. EventBridge 스케줄러를 클릭한다.
2. 왼쪽 편에 Scheduler > 일정 을 클릭한 후, 일정생성하기 버튼을 클릭한다.
3. 일정 세부 정보를 지정해준다.
4. 일정패턴을 아래와 같이 기입해준다.
- 반복적으로 일정시간에 맞춰 메세지를 전송할 것이기 때문에 반복일정을 택하였다.
- 아까와 마찬가지로 Cron 형식으로 일정을 기입해 주었다.
- 유연한 기간은 만약 자신이 7시에 메세지를 전송하려고 시간설정을 해두었는데 유연한 기간을 15분으로 해두었다면
7시에서 7시 15분 사이에 메세지가 전송될 것이다.
5. 기간 설정 기입 후 다음버튼 누르기
- 시간대만 Seoul 로 잘 맞춰주면 된다.
- 시작날짜와 종료날짜는 자신이 원하는 대로 기입하자.
6. 대상 세부 정보에서 대상 API - 템플릿 형식의 대상 선택 - PutEvents 선택
7. PutEvents 에서 이벤트버스 선택지로 제공된 것 선택, Detail-type : Object Created 기입
여기서 소스는 서비스 이름을 입력하면 된다.
나는 웹스크래핑 서비스 이므로 WebScraping이라고 입력했다.
세부 정보는 딱히 입력하지 않았다.
8. 다음버튼을 누르면,
일정상태 - 일정완료후 작업(NONE 선택함) - 재시도 정책 및 DLQ - 암호화 - 권한(이 일정에 맞는 새 역할 생성)
처럼 나오는데 일정완료 후 작업과 권한을 제외하고 그대로 다음 버튼을 클릭한다.
9. 모든 입력사항들을 체크하고 일정 생성 버튼을 누르면 생성된다.
결과
그럼 이처럼 시간에 맞춰 나의 채팅방으로 이벤트 트리거가 발생하여 보내지는 것을 확인할 수 있다.
마무리
재미로 시작하게 된 간단한 프로젝트임에도 생각보다 방황한 시간이 있었다.
하지만 이번 프로젝트를 통해 API 문서를 확인하며 공부하는 방법을 터득할 수 있었다.
블로그에는 세부적인 내용을 다루지 않는다. 간략하게 딱 특정한 부분만 기술해 놓은 정보를 공유한다.
그렇지만 최대한 간략한 내용만 기술했음을 언급하고 링크를 첨부하여 사람들이 내 블로그를 시작으로
흐름을 잡아나가길 바라기 때문에 정보 공유를 시작하게 되었다.
나도 다른 블로그들을 보면서 어떤 API를 참고해야 하는지 방향을 잡을 수 있었고
어떤 것을 조사하고 다음에는 무엇을 공부해야할지 감을 잡을 수 있었다.
그렇기 때문에 흐름 잡기용으로만 내 블로그를 참고해주길 바라며, API 문서를 읽어보는 것을 추천한다.
'Project > Personal & Toy' 카테고리의 다른 글
[AWS Lambda] HTTP 403 Error : url forbidden 문제 해결 (1) | 2023.11.14 |
---|---|
[Python] 웹 스크래핑 : requests.exceptions.ConnectionError (1) | 2023.11.02 |
[Python] 웹 스크래핑 : 같은 태그명의 정보를 가져오는 방법 (0) | 2023.11.02 |