EC2 자동중지 및 실행(AWS lambda,Cloudwatch)

Jay·2021년 4월 16일
0

👓 정의

AWS lambda

: 서버리스 컴퓨팅 서비스

  • 특정 이벤트의 응답으로 서버를 실행한다.
    ( 월별 무료 요청 1백만 건 및 월별 400,000GB-초 컴퓨팅 시간)

그렇다고 서버가 없다는 뜻은 아니다. 관리자의 수고가 덜어지는 서비스라고 보면된다.
AWS lambda에 EC2 start,stop 함수를 생성할 것이다.

AWS Cloudwatch

: AWS에서 동작하는 애플리케이션(EC2,RDS,ELB 등)의 상태 모니터링 도구.

aws lambda에서 생성한 함수를 Cloudwatch를 통해 실행하는 것이다.
요금은 링크를 참조하자.


자동 실행&종료 로직

지난 포스팅 에서 탄력적 IP를 설정했다.
이젠 EC2인스턴스를 중지 후 재실행 해도 IP가 바뀌지 않는다😌.

EC2 자동 중지 및 재실행을 위해선 크게 4가지를 설정해야한다.
(탄력적 IP를 부여하지 않았다면, 이전 포스팅을 참고하여 먼저 탄력적 IP부터 부여해야한다.)
1. IAM
2. lambda
3. cloudwatch
4. pm2

[1] IAM 설정

  • 먼저 IAM에서 정책과 역할을 생성해주어야 한다.

정책 생성하기

정책 > 정책생성

이후 아래의 정책을 넣어줬다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Start*",
                "ec2:Stop*"
            ],
            "Resource": "*"
        }
    ]
}


역할생성

역할 >역할 만들기

AWS 서비스 >Lambda

생성해뒀던 정책 연결

선택사항

검토 후 역할 만들기 버튼


[2] Lambda 적용

함수 생성

  • ec2 start와 stop 2개를 만들것이다.

함수 생성

함수이름은 start 런타임은 파이썬을 선택했다

코드를 추가해주고 >> Deploy

import boto3

region = 'ap-northeast-2' 
instances = ['i-01111546420e6e5d']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.start_instances(InstanceIds=instances)
    print('start your instances: ' + str(instances))
  • instances = 본인 EC2 인스턴스 ID

Stop에 대한 함수를 생성할 때에는, 8번째줄의 start를 stop으로 바꾸면 된다.

구성 >> 권한 >> 실행역할 >> 편집

기존에 생성한 역할 선택

위에 언급한대로 stop도 만들면 된다!


[3] Cloudwatch

규칙 >> 규칙생성

해당 페이지 밑의 링크에 cron 표현식 방법이 나온다.

  • 월 - 금 GMT 00시에 start 로 적용했다.
    (시차가 9시간이니까.. 9시에 실행되겠지?)

규칙 생성

  • stop도 마찬가지로 cron 표현식만 바꿔서 정의하면 된다.

[4] PM2 설정

  • EC2 인스턴스가 중지되었다가 다시 시작되면 PM2 프로세스도 종료될 것이다.
  • 서버 실행 프로세스를 우분투 시작프로그램으로 지정해줘야한다.

ec2 인스턴스 터미널에 접속

명령어 입력

  • pm2 startup

스크립트 copy&paste

  • pm2 startup을 하면 아래와같이 코드를 줄 것이다.
$ pm2 startup
[PM2] You have to run this command as root. Execute the following command:
      sudo su -c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v4.3/bin pm2 startup <distribution> -u <user> --hp <home-path>
  • 받은 코드를 입력한다.

프로세스 실행

  • 이후 필요한 프로세스를 실행시킨다.
    (서버를 pm2 start로 실행했다.)

pm2 save

  • 명령어 pm2 save 입력

pm2 공식문서


댓글에 누가 친절하게 써놨는데 읽어보길 바란다.

Just going to make some notes for myself, as the existing docs are a bit unclear to me:

To create a startup script:

1. run pm2 startup
2. copy the output of that command and paste it back into the terminal. this configures pm2 to run as a daemon service.
3. start all the processes that you want to run automatically
4. run pm2 save.

At any point in the future, to update the list of process, just run pm2 save again.

WARNING: pm2 unstartup terminates all user processes currently running under pm2!!!

--

이로써 EC2 자동중지, 자동실행에 관한 Lambda Cloudwatch 설정이 끝났다.

https://waspro.tistory.com/660
https://cholol.tistory.com/506

profile
programming!

0개의 댓글