Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

AWS Lambda 를 사용해서 기부 데이터 상태를 변경

AWS, 20216 min read

  • 사용배경

    • (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

설정내용

  1. AWS Lambda 에서 함수를 생성한다
  • Lambda >함수 > 함수 생성
  • 함수 이름 설정,나머지는 기본 설정
  1. 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)
};
}
};
  1. 구성에서 pdv 환경변수 설정 env :"prod" url :"" 등등..

  2. 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 에 트리거를 추가
  1. 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

© 2024 by GwiyeomGo Tech Blog. All rights reserved.