0. 사용 목적
개발계 인스턴스의 경우, 업무시간 외에 지속적으로 실행시킬 필요가 없으므로, 업무시간 외에 AutoStop/Start를 통해 비용 절감 목적
1. Lambda 함수에서 사용할 IAM 생성
Step 1.
-. IAM -> Role 생성 -> AWS Service -> Lambda 선택(EC2는 확인하려고 클릭한거였는데..저렇게 남아있음)
Step 2.
아래 Permission을 추가.
{
"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. Lambda 함수 생성
-. Start용 함수와 Stop용 함수, 두 개를 생성할 것.
-.함수 생성
위와 같이 Author from scratch 선택하며, Python 3.9로 생성하였음.
Role은 위에서 생성한 Role을 추가해줘야 하며, Stop과 마찬가지로 Start도 생성해줘야함.(EventBridge를 따로 사용해야하므로 각 각 생성)
-. Lambda Stop 함수
import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
위 Code에서 'instance, region'은 내 인스턴스 ID, 인스턴스가 위치한 region으로 수정해줄 것
-. Lambda Start 함수
import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))
마찬가지로 region, instances 변수 수정해줄 것.
3. EventBridge Rule 생성할 것.
EventBridge 규칙은 Cron을 활용하여 진행할 것이며, Cron의 시간은 GMT 기준이므로 한국시간으로 계산하여 작성 필요.
위 Cron식은 한국시간 기준 19시 55분을 기준으로 설정.
대상과 함수를 지정하여 Rule 생성할 것.
*STOP 함수도 위와 동일하게 생성해주면 됨.
5. Cron 표현식 참고
** 해당 방법으로 ec2 뿐 아니라, rds도 적용 가능할 것으로 보이나, 테스트해보지 않았습니다. 추후 필요하신 분은 테스트해보시면 될 것 같습니다.
++TMI : RDS의 경우, Stop하여도 7일 뒤면 자동 Start가 진행됩니다. 시작되는 일정에 맞춰 AutoStop을 설정하는 것도 하나의 방법
'AWS Cloud' 카테고리의 다른 글
[CloudFront] Invalidation(무효화) 적용하기 (0) | 2022.04.26 |
---|---|
RDS Oracle Version 12 to 19 (0) | 2022.04.01 |
EC2-Linux Firewalld 실행으로 인한 ssh 접속 불가 문제 (0) | 2022.01.14 |
[ALB] ALB 규칙을 통해 특정 웹페이지 경로에 특정 IP만 접근하게 하기 (0) | 2021.11.15 |