Boto/pythonを使用して、EBSボリュームから起動する新しいEC2インスタンスを起動しています。インスタンスを起動するときに、起動EBSボリュームのデフォルトサイズを上書きしたいと思います。
起動コードに適合するかもしれないbotoメソッドまたはパラメーターが見つかりませんでした。
ec2 = boto.connect_ec2( ACCESS_KEY, SECRET_KEY, region=region )
reservation = ec2.run_instances( image_id=AMI_ID,
key_name=EC2_KEY_HANDLE,
instance_type=INSTANCE_TYPE,
security_groups = [ SECGROUP_HANDLE, ] )
このWebページ は、コマンドラインツールを使用して実行中のEC2インスタンスのEBSボリュームのサイズを増やす方法を示していますが、EC2インスタンスが指定されているときにbotoを使用したいと思います。
最初にブロックデバイスマッピングを作成する必要があります。
dev_sda1 = boto.ec2.blockdevicemapping.EBSBlockDeviceType()
dev_sda1.size = 50 # size in Gigabytes
bdm = boto.ec2.blockdevicemapping.BlockDeviceMapping()
bdm['/dev/sda1'] = dev_sda1
この後、ブロックデバイスマップをrun_instances
呼び出し:
reservation = ec2.run_instances( image_id=AMI_ID,
key_name=EC2_KEY_HANDLE,
instance_type=INSTANCE_TYPE,
security_groups = [ SECGROUP_HANDLE, ],
block_device_mappings = [bdm])
残念ながら、これは 実際には十分に文書化されていません ですが、例 ソースコードにあります です。
CloudFormation を使用することもできます。これは、環境の文書化と自動化に使用されます。 ESB定義のテンプレートを次の場所で確認できます。 https://s3.amazonaws.com/cloudformation-templates-us-east-1/EC2WithEBSSample.template
"Resources" : {
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"AvailabilityZone" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "TestAz" ]},
"SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
"KeyName" : { "Ref" : "KeyName" },
"ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
"Volumes" : [
{ "VolumeId" : { "Ref" : "NewVolume" },
"Device" : "/dev/sdk"
}
]
}
},
...
"NewVolume" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Size" : "100",
"AvailabilityZone" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "TestAz" ]}
}
}
次に Boto CloudFormation API を使用して環境をデプロイできます。