无法按顺序启动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”后立即结束。