프로그램을 개발하다보면 지속적으로 떠 있는 서비스가 아니더라도, 필요한 시점에만 실행이 되어야하는 프로그램들이 필요합니다.
일반적으로는 특정 시점에 대용량 데이터를 처리하는 경우를 뜻하기는 하는데, 경우에 따라서는 대용량 데이터가 아니더라도 특정 시점에 한 번, 또는 특정 시간 단위마다 반복해서 돌아야하는 경우들을 말하기도 하죠.
AWS 에서도 이런 기능을 위한 서비스를 제공하고 있습니다.
대표적으로는 2가지 선택지가 있을 수 있습니다.
(1) 서버리스가 아니다 (& EC2 를 쓴다 )=> 기존에 개발하던 것과 동일하게 배치 서비스를 만든다음에 EC2 서버에 올리면 됩니다.
(2) 서버리스다 (& 람다를 쓴다) => Amazon EventBridge 사용한다.
사실 복잡하게 쓸 수 있고 여러 가지 기능을 지원합니다만은 일반적으로 우리가 상상하는 "크론식"을 이용한 배치를 떠올린다면 특별한 옵션을 상상할 필요는 없습니다.
오른쪽에서 보듯이 EventBridge를 사용하는 방식은 여러 가지가 있는데요.
기초적인 기능만 사용하고 싶다면 일정(Scheduler) 만으로 충분합니다.
대시보드 왼쪽에서 일정을 클릭하면 아래와 같은 화면을 볼 수 있습니다. 여기에서 오른쪽 "일정 생성" 버튼만 눌러주시면 됩니다.
일정 생성하기
일정을 생성하는 방법은 쉽습니다.
먼저 "이름"을 입력해주시고요. 나중에 일정을 관리할 필요가 있다면 추가로 "설명" 을 입력하고, "일정 그룹"을 배정해주시면 됩니다.
기본값은 최초에 생성된 default 이고, 여기 그룹에 저장됩니다. (추가로 일정 그룹을 생성해서 관리한다면, 일정 관리하는 화면이 더 편해지겠죠? )
다음은 일정 패턴을 지정하는 것인데요.
한 번만 실행되고, 더 이상 사용되지 않거나, 계속해서 동작하는 것 모두를 지정할 수 있습니다.
유연한 기간이라는 옵션은 저는 보통 꺼두고 사용하는데요. "꺼짐"을 선택해두면 정확한 시간에 실행되도록 만들 수 있고요. (그럼에도 실제 함수의 실행시간을 초단위 까지 맞출 수는 없습니다. EventBridge가 동작하는 시간을 지정하는 것이어서, 여기에서 다른 서버리스 서비스 혹은 API 를 호출하는 동안 추가로 시간이 필요합니다.)
유연한 기간이라는 옵션을 지정하게 되면, 지정한 시간 < ?? < 지정한 시간 + 지정된 유연한 시간 사이의 어딘가에서 실행되게 됩니다.
반복을 사용하게 되면 조금 더 복잡하게 사용하고 싶다면 크론표현식을 선택해주면 되고요. 간단하게 쓰려면 Rate 기반 일정을 적어주시면 됩니다. (단, 여기에서는 분 단위로 밖에 사용할 수 없다는 점은 주의해주세요. 혹시 초단위로 반복되어야하는 경우에는 쓰기가 어렵습니다.)
다음 단계로 넘어가게 되면 이렇게 EventBridge 가 어떤 것들을 호출할지 고를 수 있습니다.
가장 대표적으로 사용하는 람다를 선택해보면, 실제 람다로 호출될 때 필요한 내용들을 선택하도록 되어있습니다.
먼저 정의되어 있는 람다 함수를 선택하고 (새로 생성하거나) , 버전이나 별칭을 골라주고, 혹시 람다 함수로 전달하고 싶은 데이터까지 추가로 입력해주시면 됩니다.
단 주의할 점이 있는데요. 기본적으로 페이로드에 값을 실어주게 되면 이벤트 브리지에서 람다함수로 넘겨주는 데이터를 덮어쓰게 됩니다.
그래서 혹시 만약에 이벤트브리지에서 람다로 넘겨주는 정보를 사용하기 위해서는 페이로드를 사용하면 안되는 단점이 있습니다.
-- Payload 미사용시
{
'version': '0', # 고정값
'id': '87661d36-a077-44cb-8bc1-#######', # 스케줄러 ID
'detail-type': 'Scheduled Event',
'source': 'aws.scheduler',
'account': '계정정보',
'time': '2024-04-15T14:16:00Z', # 실행시간
'region': 'us-east-1', # 리전
'resources': ['arn:aws:scheduler:us-east-1:########:schedule/default/study_push_sender_dev'],
'detail': '{}' # 이벤트에 대한 상세정보가 있는 경우 값이 있음
}
-- Payload 사용시
{
'stage': 'prod'
}
마지막으로는 실제 이 일정에 대한 여러 옵션들을 지정할 수 있습니다.
- 바로 시작하도록 할 것인지 선택
- 일정이 동작이 완료된 후에 => 일회성이므로 삭제 or 유지
- 재시도 여부 및 재시도 정책 설정
- 권한 설정
마지막으로는 설정이 원하는대로 처리가 되었는지 확인 후 "일정 저장" 버튼을 눌러주면 정상적으로 일정이 생성될 것입니다.
'Cloud > AWS' 카테고리의 다른 글
AWS 람다에서 python으로 구글 시트 데이터 쓰기 (0) | 2025.02.16 |
---|---|
AWS 게이트웨이+람다에서 HTTPStatusCode 400을 설정해보기 (0) | 2023.11.05 |
dynamodb 파이썬으로 데이터 스캔하기 (1) | 2023.10.28 |
APIGateway 에서 람다로 데이터 전달하는 GET,POST 기본 템플릿 (0) | 2023.10.24 |
람다를 이용해서 S3의 csv 파일 데이터를 DynamoDB로 넣기 (0) | 2023.08.10 |
댓글