AWS

Lambda - 태그를 통한 서버 기동 및 정상 확인 후 실패 시 2호기 기동 스크립트

Neeson.lee 2023. 9. 4. 09:38

# 스크립트 내용

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