2012-11-27 26 views
23

Tôi đang sử dụng boto/python để khởi chạy phiên bản EC2 mới khởi động từ ổ đĩa EBS. Khi tôi khởi động cá thể, tôi muốn ghi đè kích thước mặc định của ổ đĩa EBS khởi động.Làm thế nào để khởi chạy EC2 instance với Boto, xác định kích thước của EBS?

tôi không tìm thấy phương pháp boto hoặc các thông số có thể phù hợp vào mã ra mắt của tôi:

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, ]) 

This web page cho thấy làm thế nào để tăng kích thước của khối lượng EBS một chạy EC2 sơ thẩm bằng cách sử dụng công cụ dòng lệnh, nhưng tôi muốn sử dụng boto tại thời điểm EC2 được quy định:

Trả lời

36

Bạn phải tạo một ánh xạ thiết bị khối đầu tiên:

dev_sda1 = boto.ec2.blockdevicemapping.EBSBlockDeviceType() 
dev_sda1.size = 50 # size in Gigabytes 
bdm = boto.ec2.blockdevicemapping.BlockDeviceMapping() 
bdm['/dev/sda1'] = dev_sda1 

Sau ngày được bạn có thể cung cấp cho các đồ khối thiết bị trong run_instances cuộc gọi của bạn:

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

Thật không may đây là not really well documented, nhưng ví dụ can be found in the source code.

+2

Tác phẩm này hoạt động! Cảm ơn bạn! Một sự thận trọng với các noobs khác như tôi: Tôi nghĩ mình sẽ thông minh và thay đổi '/ dev/sda1' thành'/dev/xvda1' bởi vì, trên các cá thể Ubuntu mà tôi chạy, đó là tên của ổ đĩa khởi động, theo lệnh 'df -h'. Vì lý do nào đó, thất bại với thông báo lỗi: "Tên thiết bị không hợp lệ/dev/xvda1" Vì vậy, tôi đã thay đổi nó thành '/ dev/sda1' và tất cả đều tốt. –

+0

Sẽ không phải là một amazon linux 8GB ami vẫn còn có một bảng phân vùng kích thước 8GB mà sẽ phải được mở rộng sau khi khởi động lần đầu tiên? –

+0

Về cơ bản bạn có quyền. Tôi không biết Amazon AMIs làm gì trong trường hợp này, Ubuntu AMIs tự động mở rộng phân vùng khi khởi động lần đầu. – j0nes

0

Bạn cũng có thể sử dụng CloudFormation, được sử dụng để lập tài liệu và tự động hóa môi trường của bạn. Bạn có thể kiểm tra các mẫu cho các định nghĩa ESB tại địa chỉ: 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" ]} 
     } 
    } 

Sau đó bạn có thể sử dụng Boto CloudFormation API để triển khai môi trường của bạn.

+0

Cảm ơn Guy. cloudformation trông khá thú vị, sẽ xem xét kỹ hơn điều này cuối cùng –

Các vấn đề liên quan