2013-06-15 2 views
1

저는 boto 2.5.1, Python 2.7, Ubuntu Precise를 사용하고 있습니다. 스냅 샷을 EC2 인스턴스에 마운트하려고합니다. 스냅 샷에서 볼륨을 생성하는 방법을 생각해 봤지만 첨부 방법을 알 수는 없습니다. 내가 할 경우 내가 잘못 한 일의 단서로boto에서 스냅 샷을 마운트하는 방법은 무엇입니까?

vol-2df00677 
i-1509d364 
Traceback (most recent call last): 
    File "./mongo_pulldown.py", line 48, in <module> 
    main() 
    File "./mongo_pulldown.py", line 28, in main 
    c.attach_volume(volume, instance, "/dev/snap") 
    File "/home/roy/deploy/current/python/local/lib/python2.7/site-packages/boto/ec2/connection.py", line 1530, in attach_volume 
    return self.get_status('AttachVolume', params, verb='POST') 
    File "/home/roy/deploy/current/python/local/lib/python2.7/site-packages/boto/connection.py", line 985, in get_status 
    raise self.ResponseError(response.status, response.reason, body) 
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request 

:

[setup stuff elided] 
c = EC2Connection() 
print volume 
print instance 
c.attach_volume(volume, instance, "/dev/snap") 

을 나는 놀랍게도 도움이되지 않는 예외를 얻을. 디바이스 이름이 임의라고 가정하고, attach 호출은 디바이스를 프로세스의 일부로 작성합니다. 아니면 장치가 이미 존재합니까?

"잘못된 요청"보다 유용한 진단 방법은 무엇입니까?

답변

1

attach_volume 메서드는 instance_idvolume_id이지만 개체를 ​​전달합니다. 이 시도 :

c.attach_volume(volume.id, instance.id, "/dev/sdh") 

device_name 사용중인 OS에 대한 합리적인 장치 이름이어야합니다. 그 값이 here 일 수있는 것에 대한 자세한 내용을 찾을 수 있습니다.

boto는 표준 파이썬 로깅을 사용하므로 원하는만큼 로그하도록 구성 할 수 있습니다. 이 gist은 전체 디버그 로깅을 얻는 방법을 보여줍니다. 그러나 boto는 액세스 권한이있는 항목 만 기록 할 수 있으며 EC2의 응답은 많은 정보를 제공하지 않을 수도 있습니다.

+0

내가 더 분명해야했습니다. 나는 개체가 아니라 문자열을 전달하고 있습니다. –

1

글쎄, 나는 장치에 뭔가 나쁜 걸 보냈다. 나는 '/ dev/snap'을 전달하고 있었다. 내가 이것을 'xvdg'로 바꿨을 때, 일들이 잘되었습니다. '/ dev/xvdg'도 작동하는 것으로 나타 났으며 ('/ dev /'부분은 무시 된 것처럼 보입니다.)

나는 가능한 다음 사용하지 않는 장치 이름을 찾기 위해 약간의 기능을 썼다 :

def get_device_name(): 
    for c in 'fghijklmnop': 
     name = "xvd%s" % c 
     path = "/dev/%s" % name 
     try: 
      os.stat(path) 
     except OSError: 
      return path 
내가 일반적으로 사용되는 세트의 외부 고정 된 이름을 사용하여, 나는 이것에 대해 걱정할 필요 피할 수 있다고 기대했다

어리 석음.