# 스크립트 내용
tag:value 사전 등록 후 1,2호기 정의 (혹은 Name:ec2name 으로 대체 가능)
Ec2 Name으로 서버 정보 받아서 서버 status 및 IP Print
import boto3
import time
import sys
# EC2 인스턴스 필터링
tag_key = 'Name'
tag_value1 = '1서버 이름' # 원하는 태그 값으로 변경
tag_value2 = '2서버 이름'
ec2_client = boto3.client('ec2', region_name='ap-northeast-2')
filters1 = [{'Name': f'tag:{tag_key}', 'Values': [tag_value1]}]
filters2 = [{'Name': f'tag:{tag_key}', 'Values': [tag_value2]}]
instances1 = ec2_client.describe_instances(Filters=filters1)
instances2 = ec2_client.describe_instances(Filters=filters2)
lambda_client = boto3.client('lambda', region_name='ap-northeast-2') # 람다 클라이언트 생성
# 1호기 기동 람다 호출
payload1 = '{"test": "start1"}' #대상 1서버 태그:밸류
response1 = lambda_client.invoke(
FunctionName='람다 함수 이름', # 호출하려는 람다 함수명으로 변경
InvocationType='Event',
Payload=payload1
)
print("람다 함수 호출 완료:", response1)
time.sleep(10)
# 인스턴스 정보 추출
if 'Reservations' in instances1:
for reservation in instances1['Reservations']:
for instance in reservation['Instances']:
instance_id = instance['InstanceId']
instance_state = instance['State']['Name']
instance_ip = instance.get('PrivateIpAddress')
print(f"Instance ID: {instance_id}, State: {instance_state}, IP: {instance_ip}")
if instance_state != 'running':
for _ in range(3): # 3번 시도
time.sleep(5) # 5초 간격으로 재시도
instance = ec2_client.describe_instances(InstanceIds=[instance_id])['Reservations'][0]['Instances'][0]
instance_state = instance['State']['Name']
print(f"Instance ID: {instance_id}, State: {instance_state}, 재시도 중")
if instance_state == 'running':
print (f"Instance ID: {instance_id}, State: {instance_state}, IP: {instance_ip}")
break
else:
# 2호기 기동 람다 호출
payload2 = '{"test": "start2"}' #대상 2서버 태그밸류
response2 = lambda_client.invoke(
FunctionName='람다 함수 이름', # 호출하려는 람다 함수명으로 변경
InvocationType='Event',
Payload=payload2
)
print ("2호기 기동 람다 호출 완료:", response2)
time.sleep(10)
if 'Reservations' in instances2:
for reservation in instances2['Reservations']:
for instance in reservation['Instances']:
instance_id = instance['InstanceId']
instance_state = instance['State']['Name']
instance_ip = instance.get('PrivateIpAddress')
print(f"Instance ID: {instance_id}, State: {instance_state}, IP: {instance_ip}")
if instance_state != 'running':
for _ in range(3): # 3번 시도
time.sleep(5) # 5초 간격으로 재시도
instance = ec2_client.describe_instances(InstanceIds=[instance_id])['Reservations'][0]['Instances'][0]
instance_state = instance['State']['Name']
print(f"Instance ID: {instance_id}, State: {instance_state}, 재시도 중")
if instance_state == 'running':
print (f"Instance ID: {instance_id}, State: {instance_state}, IP: {instance_ip}")
break
else:
print("인스턴스 기동 실패")
sys.exit(1)
'AWS' 카테고리의 다른 글
AWS - Docker 설치 (0) | 2023.11.23 |
---|---|
AWS - Glue 관리 스크립트 (1) | 2023.10.17 |
Aws - sagemaker ld_library_path (0) | 2023.06.27 |
AWS-SES 모니터링 로깅 파일 생성 설정 Amazon-kinesis 사용 (0) | 2023.06.13 |
Lambda- Lambda to Lambda invoke (0) | 2023.06.12 |