AWS Lambda를 활용하면 EC2 인스턴스를 자동으로 시작하거나 종료할 수 있습니다. EC2 인스턴스를 예약된 시간에 관리할 수 있도록 설정하면 비용을 절감하고, 운영을 효율적으로 관리할 수 있습니다. Lambda 함수와 AWS의 이벤트 브리지를 연계하여 특정 시간에 EC2 인스턴스를 자동으로 시작하거나 종료할 수 있도록 설정하는 방법을 함께 살펴보도록 하겠습니다.
1. Lambda를 위한 IAM 역할 설정
Lambda 함수가 EC2 인스턴스를 제어하려면 적절한 IAM 역할을 부여해야 합니다. AWS Management Console 또는 AWS CLI를 사용하여 Lambda에 EC2를 제어할 수 있는 권한을 추가해야 합니다.
IAM 역할을 생성하고 필요한 권한을 부여하는 과정은 아래와 같습니다.
# IAM 역할 생성 (AWS CLI)
aws iam create-role --role-name LambdaEC2ControlRole --assume-role-policy-document file://trust-policy.json
# EC2 제어 권한 추가
aws iam attach-role-policy --role-name LambdaEC2ControlRole --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess
또한, AWS Lambda 콘솔에서 IAM 역할을 직접 생성할 수도 있습니다. IAM에서 "AmazonEC2FullAccess" 정책을 추가하여 Lambda가 EC2 인스턴스를 제어할 수 있도록 설정하면 됩니다.
2. Lambda 함수 생성 및 EC2 자동 시작 코드
Lambda 함수를 생성한 후, Python을 사용하여 특정 EC2 인스턴스를 자동으로 시작하는 코드를 작성할 수 있습니다. 이를 위해 AWS SDK인 boto3
라이브러리를 사용합니다.
아래의 예제로 함께 살펴보겠습니다. 인스턴스 ID는 EC2 콘솔에서, 자동시작 및 종료를 설정할 VM에 대한 인스턴스 ID를 복사하여 아래 칸에 넣으면 됩니다.
import boto3
def lambda_handler(event, context):
ec2 = boto3.client("ec2", region_name="us-east-1") # 원하는 리전 지정
instance_ids = ["i-0123456789abcdef0"] # 시작할 인스턴스 ID 입력
response = ec2.start_instances(InstanceIds=instance_ids)
return {
"statusCode": 200,
"body": f"Started EC2 Instances: {instance_ids}"
}
이 코드에서는 boto3
를 사용하여 EC2 클라이언트를 생성한 후, 특정 EC2 인스턴스를 시작합니다. 실행 결과는 Lambda 콘솔의 로그에서 확인할 수 있으며, 정상적으로 실행되면 해당 인스턴스가 시작됩니다.
3. Lambda 함수 생성 및 EC2 자동 종료 코드
EC2 인스턴스를 자동으로 종료하려면 비슷한 방식으로 Lambda 함수를 생성하고, stop_instances()
메서드를 사용하여 인스턴스를 종료할 수 있습니다.
아래의 예제로 함께 살펴보겠습니다.
import boto3
def lambda_handler(event, context):
ec2 = boto3.client("ec2", region_name="us-east-1") # 원하는 리전 지정
instance_ids = ["i-0123456789abcdef0"] # 종료할 인스턴스 ID 입력
response = ec2.stop_instances(InstanceIds=instance_ids)
return {
"statusCode": 200,
"body": f"Stopped EC2 Instances: {instance_ids}"
}
이 함수는 지정된 인스턴스를 종료하는 역할을 하며, 이벤트 트리거를 설정하면 특정 시간에 자동으로 실행될 수 있습니다.
4. 이벤트 브리지(EventBridge) 트리거 설정
Lambda 함수가 자동으로 실행되도록 설정하려면 AWS EventBridge를 사용하여 특정 시간에 트리거할 수 있습니다. AWS 콘솔에서 다음과 같은 설정을 진행합니다.
- EventBridge에서 새 규칙(Rule) 생성
- 이벤트 소스로 "Schedule expression" 선택
- Cron 표현식을 사용하여 실행 시간 설정 (예: 매일 오전 9시 실행)
- 대상(Target)으로 Lambda 함수 선택
예를 들어, 매일 오전 9시에 EC2 인스턴스를 시작하고, 오후 6시에 종료하도록 설정할 경우 다음과 같은 Cron 표현식을 사용할 수 있습니다.
# 매일 오전 9시(UTC) 실행 (EC2 시작)
cron(0 9 * * ? *)
# 매일 오후 6시(UTC) 실행 (EC2 종료)
cron(0 18 * * ? *)
이렇게 설정하면 특정 시간에 Lambda 함수가 실행되어 EC2 인스턴스를 자동으로 관리할 수 있습니다.
Lambda와 EventBridge를 활용하면 EC2 인스턴스를 자동으로 시작하고 종료할 수 있으며, 이를 통해 불필요한 리소스 사용을 줄일 수 있습니다. 이러한 방식은 운영 효율성을 높이고, 비용을 절감하는 데 효과적이라 이를 적극적으로 활용하는 것을 추천합니다. 특히나, AWS에서는 현재 EC2 탭에서 자동 종료 기능을 별도로 제공하고 있지 않기 때문에, 이런 설정을 통해 효율적으로 서버 자원을 관리하는 것을 권장합니다.