AWS Lambda 를 사용해서 기부 데이터 상태를 변경
-
사용배경
(2021/12/28)
1.2021년 기부 데이터의 상태는 2022년 1월 1일 새벽 1시 기준 평가완료 상태로 변경해야 한다.(예약작업걸기 - '평가완료' 상태로 변경(2022.01.01 01:00:00)
2. 1/1일 주말이고 새벽이어서 개발자가 직접 변경할 수 없는 상황이다. 3. 예약을 걸어서 자동으로 변경되도록 하자(2022/11/08)
4 . 11/8 일 매장을 구독한 구독자에게 매장소식 알림 메세지를 발송하는 기능을 추가 5. lambda 를 사용해서 매일 오후 6시 매장별 구독자에게 메세지를 전송 6. lamda 에서 전송 api 를 호출한다
-
어떻게 데이터의 상태를 자동으로 변경시키죠? Lambda 로 api 를 호출해서 상태를 변경합니다.
-
AWS Lambda 란 무엇입니까? Lambda는 필요 시에만 함수를 실행 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다. https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-function
설정내용
- AWS Lambda 에서 함수를 생성한다
Lambda >함수 > 함수 생성
- 함수 이름 설정,나머지는 기본 설정
- api 를 호출하는 코드로 변경
const axios = require('axios');
exports.handler = async (event) => { let env = event.env; let url = process.env.URL let token = process.env.Bearer let path = '/api/test';
const options = { withCredentials: true, headers: { Authorization: 'Bearer ' + token, Accept: 'application/json', 'Content-type': 'application/x-www-form-urlencoded', }, };
try { const res = await axios.get(url+path, options); return { statusCode: 200, body: env + ': ' + 'successful' }; } catch (e) { return { statusCode: 400, body: env + ': ' + JSON.stringify(e) }; }};
-
구성에서 pdv 환경변수 설정
env :"prod" url :"" 등등..
-
api 호출에 axios 를 사용,axios 를 사용하기 위해서 계층추가
> Runtime.ImportModuleError: Error: Cannot find module 'axios' 에러 발생시 ARN 지정 https://ljmocic.medium.com/publish-simple-node-js-aws-lambda-layer-a87c00afdd83
> (질문) 특정시간에 l/a 함수가 발동하도록 어떻게 설정하지? (답) Lambda 에 트리거를 추가
- Lambda 에서 트리거 추가+ 규칙 추가
- lamba -> (트리거를 추가) -> 규칙 추가 or 기존 규칙도 사용
- 기존 규칙도 사용 -> 규칙 를 조회할 수 있는 역할등 없다면 관리자에게 요청
- 규칙 추가
eventBridge > 규칙
에 cron 으로 지정해준다.[규칙을 생성] 예약 표현식 => cron 으로 표시
- 규칙에 대상에 트리거 동작시 사용할 구성 환경변수 값을 json 으로 지정한다
구성> 환경변수에 값 입력 -> Amazon EventBridge >규칙 선택> 상단에 편집>대상선택>(추가 설정)대상 입력 구성>json텍스트로 상수 입력 ex) {"env":"prod"}
- Cron Expression : Cron, 크론은 본래 유닉스 계열의 운영체제에서 시간 기반으로 잡 스케쥴링을 하는 후면 프로세스의 명칭이다.
cron(00 00 * * ? *) 매일 오전 9시에 실행cron(30 00 * * ? *) 매일 오전 9시 30분 실행cron(00 01 * * ? *) 매일 오전 10시에 실행cron(00 02 * * ? *) 매일 오전 11시에 실행cron(00 03 * * ? *) 매일 낮 12시에 실행cron(00 04 * * ? *) 매일 오후 1시에 실행cron(00 05 * * ? *) 매일 오후 2시에 실행cron(00 06 * * ? *) 매일 오후 3시에 실행cron(00 07 * * ? *) 매일 오후 4시에 실행cron(00 08 * * ? *) 매일 오후 5시에 실행cron(00 09 * * ? *) 매일 오후 6시에 실행
cron(00 18 * * ? *) 매일 새벽 3시
cron(00 16 31 12 ? *) 1년에 한번 1월 1일 새벽 1시 00분 ?
- `(질문) 실행 결과는 어디서 보지??
- (답) aws CloudWatch 모니터링 로그를 볼 수 있다`
6.aws CloudWatch 에서 로그를 본다 CloudWatch Logs 에 테스트,실제 트리거 결과를 볼 수 있다.
20230612
aws lambda 를 설정했는데
Task timed out after 3.01 seconds
에러가 발생해서 이후 동작하지 않았다
- 람다함수 > 일반구성> 제한 시간 을 편집했다 (3초 => 15분)
20240311
aws lambda 를 설정 후 기존 규칙을 사용했다 트리거를 람다에 추가하고 이벤트 트리거로 가서 선택한 규칙을 편집해 대상 입력 상수를 추가했다 문제는 운영,staging 환경에서 오전 10시 에 설정한 lamda 를 서정하고 싶었다 찾아보니 이벤트 트리거로 가서 선택한 규칙에서 대상을 추가하고 상수를 추가하면 된다고 한다 설정을 완료했고 테스트..
참고
https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html https://dev-bri.tistory.com/4 https://naengguk.tistory.com/128 https://jisblee.me/board/view/0/2/169 https://www.leafcats.com/94