Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何使用boto3指定core os ec2实例的根卷大小?_Amazon Web Services_Coreos_Aws Ec2_Boto3 - Fatal编程技术网

Amazon web services 如何使用boto3指定core os ec2实例的根卷大小?

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_

我无法从源代码中找出如何定义根设备的大小

您可以使用BlockDeviceMappings部分指定N个附加块设备,您可以在其中声明它们的大小。但无法设置根卷的大小。因此,它总是创建一个根卷大小为8GB的实例,这是默认值。

请参阅

另外,这里有一种方法可以从


今天我自己也遇到了这个问题,可能是因为最初的海报太晚了,但万一以后有人偶然发现这个问题,我做了以下几点:

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'
                }
            }
        ]
    )