ドキュメントとソース コードから、ルート デバイスのサイズを定義する方法がわかりません。
サイズを宣言できる BlockDeviceMappings セクションを使用して、N 個の追加のブロック デバイスを指定できます。ただし、ルート ボリュームのサイズを設定する方法はありません。そのため、デフォルト値であるサイズ 8GB のルート ボリュームを持つインスタンスが常に作成されます。
ドキュメントとソース コードから、ルート デバイスのサイズを定義する方法がわかりません。
サイズを宣言できる 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 などの create_instances にさらに引数を渡す必要があります) が、基本的にルート デバイス (この場合は /dev/xvda) を目的のボリュームと共に BlockDeviceMappings 値の一部として渡します。サイズ (上記の例では 50GB)。
スティーブ ジェフリーズが述べたように、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'
}
}
]
)
Stackoverflow: EBS のサイズを指定して Boto で EC2 インスタンスを起動する方法を参照してください。
また、AWS Command-Line Interface (CLI)から実行する方法は次のとおりです。
aws ec2 run-instances --image-id ami-xxxxxxxx --instance-type m1.xlarge --block-device-mappings '{"DeviceName": "/dev/sda1","Ebs" : { "VolumeSize" : 50 }}'