2012-11-27 3 views
23

나는 boto/python을 사용하여 EBS 볼륨에서 부팅하는 새로운 EC2 인스턴스를 시작합니다. 인스턴스를 시작할 때 부팅 EBS 볼륨의 기본 크기를 무시하고 싶습니다. EBS의 크기를 지정하여 Boto로 EC2 인스턴스를 시작하는 방법은 무엇입니까?

내 발사 코드에 맞게 수없는 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, ]) 

This web page

명령 줄 도구를 사용하여 실행중인 EC2 인스턴스의 EBS 볼륨의 크기를 증가하는 방법을 보여줍니다,하지만 난 '

답변

36

먼저 블록 디바이스 매핑을 만들어야 : 다음 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]) 

것은 불행하게도이 not really well documented이지만, 예를 can be found in the source code.

+2

이것은 작동합니다! 고맙습니다! 나 같은 다른 놈들 한테주의해라. 나는 내가 영리하고 '/ dev/sda1'을''/ dev/xvda1'' '로 바꾼다 고 생각했다. 왜냐하면 내가 실행하는 우분투 인스턴스에서 부트 볼륨의 이름이기 때문이다. 'df -h' 명령. 어떤 이유로 든 "Invalid device name/dev/xvda1"라는 오류 메시지와 함께 실패했습니다. 그래서 그것을 다시'/ dev/sda1'으로 바꾸었고 모두 잘 돌아갔습니다. –

+0

기본 아마존 linux 8GB ami는 아직 8GB 크기의 파티션 테이블을 가지고 있는데 처음 부팅 한 후에 확장해야합니까? –

+0

기본적으로 옳습니다. 이 경우 Amazon AMI가 어떤 작업을 수행하는지 알지 못합니다. 우분투 AMI는 처음 부팅 할 때 자동으로 파티션을 확장합니다. – j0nes

0

환경을 문서화하고 자동화하는 데 사용되는 CloudFormation을 사용할 수도 있습니다. 당신의 ESB 정의에 대한 템플릿을 확인할 수 있습니다 : 당신은 다음 환경을 배포 할 Boto CloudFormation API을 사용할 수 있습니다 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" ]} 
     } 
    } 

.

+0

감사합니다. cloudformation 꽤 흥미로운 찾고있다, 이것에 대해 자세히 살펴 보겠습니다. –

관련 문제