0. 기본 구성
기본 VPC에 EC2 2개 만들어놓고 진행하겠다
EC2 인스턴스 id들은 복사해두자
1. IAM 정책 생성
Lambda 함수에서 EC2를 시작/중지 시킬 수 있는 role을 만들어야 하기 때문에 정책을 먼저 만들어주겠다
IAM > 정책 > 정책 생성 > JSON으로 들어가 아래의 코드로 변경
{
"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": "*"
}
]
}
정책 검토 > 이름 대충 설정 후 정책 생성
2. IAM role 생성
IAM > 역할 > 역할 만들기 > 사용사례에서 Lambda 선택 > 다음
방금 만든 정책 검색 > 선택 후 다음 > 이름 설정 후 역할 만들기
3. Lambda 함수 생성
3-2) EC2 Stop
서비스 > Lambda > 함수 생성
이름 설정해주고 Python으로 설정, 기존 역할 사용 > 방금 만든 역할 선택 후 함수 생성
함수 코드에 아래 코드 작성
import boto3
region = 'ap-northeast-2'
instances = ['인스턴스id1','인스턴스id2']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print ('stop your instances: ' + str(instances))
리전과 인스턴스 ID만 본인에게 바꿔서 작성하면 된다
작성이 끝나면 배포를 눌러준다
함수가 생성되었다는 메세지가 뜨면 테스트를 한번 해보자
오른쪽 상단의 테스트를 눌러 이벤트 이름만 대충 설정해 준 후 생성을 누른다
생성 후 테스트 버튼을 다시 눌러보면
실행이 성공했다고 한다
EC2 탭으로 가서 확인해보자
EC2들이 중지되고 있다
3-2) EC2 Start
Stop 만들때와 마찬가지로 함수 생성 후 아래 코드를 작성해주자
import boto3
region = 'ap-northeast-2'
instances = ['인스턴스id1','인스턴스id2']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print ('start your instances: ' + str(instances))
리전과 인스턴스 ID도 똑같이 바꿔서 적어주자
마찬가지로 배포 후 테스트를 해보면
인스턴스들도 다시 살아났다
4. CloudWatch로 Lamda 정기적으로 트리거하기
CloudWatch > 이벤트 > 규칙 > 규칙 생성
이벤트 소스에서 일정을 누른 후 Cron 표현식을 선택해주자
(고정 비율로 하면 그냥 몇분/몇시간에 한번씩 트리거되는듯)
현재 시간이 오후 4시 23분이기 때문에, 4시 26분에 트리거되도록 설정해보겠다 : 26 7 * * ? *
이는 매년 매월 매일 7시 26분 (GMT 시간이라 한국시간에서 -9 해야함) 마다 트리거 하겠다는 뜻이다
자세한 Cron 표현식은 여기를 참조하자
그리고 대상 추가를 눌러 ec2-stop 함수를 선택해준 후 세부 정보 구성을 누른다
이름만 설정해주고 규칙 생성을 완료하자
이제 26분에 아마 ec2들이 꺼질 것이다
ec2-start 함수는 Cron식을 28 7 * * ? *
로 설정해주고 규칙을 생성해줬다
5. 함수가 잘 트리거됐는지 확인
26분이 되었다
인스턴스들이 꺼지는걸 확인했다
28분이 되니
인스턴스들이 켜지는걸 확인했다
CloudWatch의 로그 > 로그 그룹으로 들어가보면 함수가 트리거될 때 작성된 로그도 확인할 수 있다
끝
'공부 > AWS' 카테고리의 다른 글
[AWS WAF] #0 실습 전 준비 (0) | 2021.02.25 |
---|---|
[AWS] VPN과 TGW, VGW, CGW (+TGW cost) (0) | 2021.02.04 |
[AWS] Transit Gateway 사용해보기 (+ VPC Peering과 다른 점) (0) | 2021.01.18 |
[AWS] AWS Cloud Shell (0) | 2020.12.21 |
[AWS] AWS 주요 ML 서비스들 정리 (0) | 2020.12.10 |
댓글