Amazon web services 如何使用boto3指定core os ec2实例的根卷大小?
我无法从源代码中找出如何定义根设备的大小 您可以使用BlockDeviceMappings部分指定N个附加块设备,您可以在其中声明它们的大小。但无法设置根卷的大小。因此,它总是创建一个根卷大小为8GB的实例,这是默认值。请参阅 另外,这里有一种方法可以从Amazon web services 如何使用boto3指定core os ec2实例的根卷大小?,amazon-web-services,coreos,aws-ec2,boto3,Amazon Web Services,Coreos,Aws Ec2,Boto3,我无法从源代码中找出如何定义根设备的大小 您可以使用BlockDeviceMappings部分指定N个附加块设备,您可以在其中声明它们的大小。但无法设置根卷的大小。因此,它总是创建一个根卷大小为8GB的实例,这是默认值。请参阅 另外,这里有一种方法可以从 今天我自己也遇到了这个问题,可能是因为最初的海报太晚了,但万一以后有人偶然发现这个问题,我做了以下几点: import boto3 ec2 = boto3.resource('ec2', region_
今天我自己也遇到了这个问题,可能是因为最初的海报太晚了,但万一以后有人偶然发现这个问题,我做了以下几点:
import boto3
ec2 = boto3.resource('ec2',
region_name='eu-west-1',
aws_access_key_id='my-key',
aws_secret_access_key='my-secret')
instance = ec2.create_instances(ImageId='my-image-id',
BlockDeviceMappings=[{"DeviceName": "/dev/xvda","Ebs" : { "VolumeSize" : 50 }}])
上述内容已被截断(您需要传递更多参数来为其他值、InstanceType等创建_实例),但本质上是将根设备(/dev/xvda,在本例中)作为BlockDeviceMappings值的一部分传递给所需的卷大小(在上例中为50GB)。与Steve Jefferies提到的相同,命名DeviceName是关键。我能够使用您通常在AWS控制台上看到的/dev/sda1。下面是一个使用磁性材料的工作示例
BlockDeviceMappings=[
{
'DeviceName': '/dev/sda1',
'Ebs': {
'VolumeSize': 30,
'VolumeType': 'standard'
}
}
]
以下是必须设置根设备大小的最小必填字段:
import boto3
ec2_resource = boto3.resource('ec2')
reservations = ec2_resource.create_instances(
ImageId= "ami-xyz",
MinCount=1,
MaxCount=1,
InstanceType='xyz',
KeyName='key-pair',
TagSpecifications=[
{
'ResourceType': 'instance',
'Tags': [{
'Key': 'Name',
'Value': 'xyz-machine'
}]
}
],
IamInstanceProfile={
'Name':'xyz-role'
},
BlockDeviceMappings=[
{
'DeviceName': '/dev/sda1',
'Ebs': {
'VolumeSize': 30,
'VolumeType': 'standard'
}
}
]
)
对于我的实例,根设备被称为
/dev/sda1
,我不得不使用它来代替/dev/xvda
,但在EC2中这对我来说是正确的。OpsWorks用户应该注意,OpsWorks的create_instance()
API与本答案中描述的EC2的create_instances
类似,但有一些区别;您需要将“ROOT\u DEVICE”
指定为DeviceName
,而不是实际名称,并且每个卷都需要VolumeType
(将其设置为“gp2”
,以获得默认的通用SSD卷类型)。是的,这些不一致对Amazon来说是愚蠢的。要使设备名称与boto3保持一致:imgs=list(ec2.images.filter(imageid=['my-image-id');device_name=imgs[0]。root_device_name
当我执行上述操作时,它可以工作,但lsblk
显示/dev/svda仍然为8Gb,因此它不接受提供的值。进一步的研究表明,这会创建一个额外的40gb卷,而该卷缺少分区。根卷的大小仍然为8Gb。奇怪的是,我无法用create_实例设置此值。我发现这里的答案只是添加了另一个EBS,而不是更改根。对我来说,解决方法是生成一个具有所需初始根大小的AMI(这是默认值,因此在创建新实例时很好)。然后,可以使用体积大小修改和后续分区扩展来调整实例的大小。有点痛苦但可行;您的链接(关于Boto)和命令行咒语(用于命令行客户端)都没有回答有关Boto 3的问题。您是否在create\u实例中按特定顺序运行此操作?因为我有两个EBS,一个是默认大小,另一个是指定大小。另外,因为它们都有/dev/sda1
,所以实例会立即停止自身。。。有什么想法吗?编辑-格式化
import boto3
ec2_resource = boto3.resource('ec2')
reservations = ec2_resource.create_instances(
ImageId= "ami-xyz",
MinCount=1,
MaxCount=1,
InstanceType='xyz',
KeyName='key-pair',
TagSpecifications=[
{
'ResourceType': 'instance',
'Tags': [{
'Key': 'Name',
'Value': 'xyz-machine'
}]
}
],
IamInstanceProfile={
'Name':'xyz-role'
},
BlockDeviceMappings=[
{
'DeviceName': '/dev/sda1',
'Ebs': {
'VolumeSize': 30,
'VolumeType': 'standard'
}
}
]
)