代码之家  ›  专栏  ›  技术社区  ›  Rajeshwar rao Gone

无法使用lambda、python按顺序启动EC2

  •  0
  • Rajeshwar rao Gone  · 技术社区  · 2 年前

    无法按顺序启动EC2实例[x,y,z]。在启动另一个实例之前,还必须确保每个实例都处于运行状态。如果该实例已经在运行,也可以跳过。

    import boto3
    import os
    import time
    
    def lambda_handler(event, context):
    
     region = os.environ["AWS_REGION"]
    
    # Initialize Boto3 EC2 client
    ec2_client = boto3.client('ec2', region_name='us-east-1')  
    
    # List of instance names in the desired order
    instance_names = ["x", "y", "z"]
    
    # Check if an instance is fully initialized and running
    def is_instance_running(instance_id):
        response = ec2_client.describe_instances(InstanceIds=[instance_id])
        instance = response['Reservations'][0]['Instances'][0]
        return instance['State']['Name'] == 'running'
    
    # Start instances in order if they are not already running
    def start_instances_in_order(instance_names):
        for instance_name in instance_names:
            response = ec2_client.describe_instances(
                Filters=[
                    {'Name': 'tag:Name', 'Values': [instance_name]}
                ]
            )
            
            reservations = response['Reservations']
            if not reservations:
                print(f"No instances found with name '{instance_name}'")
                continue
            
            instance = reservations[0]['Instances'][0]
            instance_id = instance['InstanceId']
            
            if instance['State']['Name'] == 'running':
                print(f"Instance '{instance_name}' with ID '{instance_id}' is already running. Skipping...")
            else:
                print(f"Starting instance '{instance_name}' with ID '{instance_id}'...")
                ec2_client.start_instances(InstanceIds=[instance_id])
                
                while not is_instance_running(instance_id):
                    print(f"Waiting for instance '{instance_name}' with ID '{instance_id}' to be in running state...")
                    time.sleep(30)
                
                print(f"Instance '{instance_name}' with ID '{instance_id}' is now running.")
    
    start_instances_in_order(instance_names)
    

    脚本只启动实例“z”,而忽略顺序中的“x”和“y”实例。此外,在等待实例状态实际运行之前,函数在启动实例“z”后立即结束。

    0 回复  |  直到 2 年前