以下是一个使用AWS Lambda自动在区域之间复制EC2实例的示例代码:
import boto3
def lambda_handler(event, context):
source_region = 'us-west-2' # 源区域
target_region = 'eu-west-1' # 目标区域
ec2_client = boto3.client('ec2', region_name=source_region)
# 获取源区域中的EC2实例列表
response = ec2_client.describe_instances()
instances = response['Reservations'][0]['Instances']
for instance in instances:
instance_id = instance['InstanceId']
# 创建EC2实例的副本
response = ec2_client.create_instances(
InstanceIds=[instance_id],
MinCount=1,
MaxCount=1,
DryRun=False,
Placement={
'AvailabilityZone': 'us-west-2a'
}
)
# 获取目标区域中的EC2实例ID
new_instance_id = response[0]['InstanceId']
# 等待EC2实例创建完成
waiter = ec2_client.get_waiter('instance_running')
waiter.wait(InstanceIds=[new_instance_id])
# 复制EC2实例的AMI
response = ec2_client.create_image(
InstanceId=new_instance_id,
Name='AMI copy',
Description='Copy of EC2 instance',
NoReboot=True
)
# 获取新AMI ID
new_image_id = response['ImageId']
# 在目标区域中创建EC2实例
ec2_client_target = boto3.client('ec2', region_name=target_region)
response = ec2_client_target.run_instances(
ImageId=new_image_id,
MinCount=1,
MaxCount=1,
DryRun=False,
Placement={
'AvailabilityZone': 'eu-west-1a'
}
)
# 获取目标区域中新创建的EC2实例ID
new_instance_id_target = response['Instances'][0]['InstanceId']
print(f"Copied instance {instance_id} to instance {new_instance_id_target} in {target_region} region")
上述代码首先使用AWS SDK for Python(Boto3)创建一个EC2客户端,并从源区域中获取EC2实例列表。然后,它逐个复制每个实例,并等待复制完成后创建该实例的AMI。接下来,它使用目标区域的EC2客户端创建基于新AMI的新EC2实例。
请注意,上述代码仅包含基本的错误处理和等待逻辑。在实际的生产环境中,可能需要添加更多的错误处理和完善的等待逻辑来确保操作的成功执行。