我想以编程方式将EBS卷附加到EC2 VM。我将根据以下代码创建设备名称,然后在下一步中,附加创建的设备。
from string import ascii_lowercase
ec2 = boto3.resource('ec2')
inst = ec2.Instance(INSTANCE_ID)
all_device_names = ["/dev/xvd%s" % (x) for x in ascii_lowercase]
bdm = inst.block_device_mappings
used_device_names = set()
for device in bdm:
used_device_names.add(device['DeviceName'])
new_dev = list(set(all_device_names) - used_device_names).pop()
# Attach EBS volume
response = ec2Client.attach_volume(VolumeId='VolumeId',InstanceId=INSTANCE_ID,Device=new_dev)
我想同时执行我的程序的多个实例,并确保设备名称例如保留/ dev / xvdh直到附加卷在同一过程中完成。我想避免出现竞争情况,在这种情况下,代码控制范围之外的其他一些操作将开始使用设备名称/ dev / xvdh。在附加卷API完成之前,如何实现此功能来保存/保留设备名称字符串? 我是Python的新手,将感谢您的帮助。
我探索了原子操作,但这似乎是特定于文件写入的,并且我在这里处理设备名称字符串。