CloudWatchEvents+lambda+boto3로 서버 비용 절감

목적→서버 요금 절약



htp://my 헤로 2. s3-u-b-s-u-st-2. 아마조나 ws. 이 m
Angular의 튜토리얼을 참고로 작성한 포트폴리오입니다.
백엔드에서 SpringBoot(EC2)와 KeyCloak(FARGATE)와 MySQL이 움직이고 있습니다.
특히 FARGATE는 개인으로 운용하는 분에는 서버비가 높기 때문에,
CloudWatchEvents+lambda로 정해진 시간에 작업을 중지하는 구성을 구현합니다.

람다 만들기 및 설정





AWS Lambda 콘솔 화면에서 함수 생성을 클릭합니다.



1.lambda 함수 이름을 설정합니다.

2. 이번에는 파이썬 AWSSDK (boto3)를 사용하기 위해 "Python 3.8"을 선택합니다.

3. 함수 만들기를 클릭합니다.

이제 함수를 만들 수는 있지만 기본 실행 역할은 ECS 서비스 설정을 업데이트할 수 없습니다. 다음 단계를 참고하여 기본 역할에 권한을 부여합니다.







FullAccess의 정책을 첨부해 버리는 것은 세키리티상, 베스트 프랙티스가 아닌 경우가 있습니다만, 이번은 개인의 계정이므로 FullAccess의 정책을 첨부합니다.

lambda 소스 코드





example.py
def lambda_handler(event, context):

     #desiredcountを0にする
     client = boto3.client('ecs')
     response = client.update_service(
     cluster='myk',
     service='ecs-kck-myk',
     desiredCount=0,
     )

     #停止するために必要なtaskArnを取得
     response = client.list_tasks(
     cluster='myk',
     launchType='FARGATE'
     )

     taskArns=response["taskArns"]

     #タスクを停止
     for task in taskArns:
      response = client.stop_task(
      cluster='myk',
      task=task,
      )

desiredCount를 0으로 설정하여 ECS 서비스의 작업을 중지하면 자동으로 작업이 시작되는 것을 방지합니다. 이번에는 특히 서비스 등을 지정하지 않고 클러스터 내의 모든 taskArn을 취득하여 클러스터 내의 모든 태스크를 정지시키고 있습니다.

CloudWatchEvents에서 규칙 만들기





AWS 콘솔에서 CloudWatchEvents 화면을 열고 규칙 생성을 클릭합니다.

CloudWatchEvents 설정





1. 일정을 클릭

2. 크론 수식을 클릭하여 lambda를 실행할 시간을 입력합니다.
이번에는 평일 18:00에 lambda를 실행시키고 싶기 때문에,
0 3 ? * TUE-SAT *
를 입력합니다. GMT와 JST의 9시간의 시차를 고려하는 것에 주의합니다.
Cron식에 대해서는 이쪽에 자세하게 써 있습니다.
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마 존 C ぉ 우도 tch / ぁ st / 에 ぇ ts / S 치 즈 ぇ ゔ ぇ ts. HTML

3. 대상 선택에서 실행할 lambda 함수를 선택합니다.

4. 설정 세부정보를 클릭합니다. 나중에 규칙의 이름을 결정하여 규칙을 만듭니다.

CloudWatchEvents 측의 설정은 이상입니다.

이제 지정된 시간에 lambda 함수가 실행됩니다.

이번에는 정해진 시간에 태스크를 정지시키는 구성을 구현했지만, 마찬가지로 태스크를 시작시키는 구성을 구현함으로써 정해진 시간에만 포트폴리오를 공개할 수 있어 서버 요금을 절약할 수 있다. !

좋은 웹페이지 즐겨찾기