请求磁盘时的HTTP 400

时间:2014-01-23 07:55:11

标签: python google-compute-engine

我正在使用python API在GCE上启动一些实例,我在创建实例时遇到了一些问题。我正在尝试将持久性磁盘附加到我的实例,但是当我尝试创建实例时,它会给我以下错误:

HttpError 400 when requesting https://www.googleapis.com/compute/v1beta16/projects/projectid/zones/us-central1-a/instances?alt=json returned "Invalid value for field 'resource.disks[0].source': 'https://www.googleapis.com/compute/v1/projects/projectid/zones/us-central1-a/disks/hm'.  Must be a URL to a Compute resource in the same zone."

磁盘的JSON是:

"disks": [
            {
              "kind": "compute#attachedDisk",
              "boot": "true",
              "type": "PERSISTENT",
              "mode": "READ_WRITE",
              "deviceName": "%s" % instance_name,
              "zone": "https://www.googleapis.com/compute/v1/projects/projectid/zones/us-central1-a/",
              "source": "https://www.googleapis.com/compute/v1/projects/projectid/zones/us-central1-a/disks/%s" % instance_name,
            }
          ]

变量'instance_name'由python放入。

我不确定为什么会发生这种情况,因为磁盘存在且位于同一区域。

有人有任何建议吗?

谢谢,

乔治

**更新**

我通过更新到v1 API解决了这个问题

2 个答案:

答案 0 :(得分:0)

这是因为您尝试将一个区域(us_central1-a)中的永久磁盘附加到不同区域中的实例。永久磁盘是按区域划分的,您无法跨区域连接到实例,只能跨区域访问磁盘快照。

您收到的错误消息的最后一部分表示:

  

请求https://www.googleapis.com/compute/v1beta16/projects/projectid/zones/us-central1-a/instances?alt=json时的HttpError 400返回“字段'资源的无效值resource.disks [0] .source':'https://www.googleapis.com/compute/v1/projects/projectid/zones/us-central1-a/disks/hm'。必须是指向计算资源的网址同一区域。“

您的磁盘位于 us-central1-a ,您尝试在哪个区域创建实例?

如果您想在其他区域使用该磁盘,例如 europe-west1-a ,则您必须:

1)在同一区域中创建临时实例,附加磁盘,然后使用 gcutil moveinstances 命令将实例移动到所需区域。这将随之移动磁盘,然后您可以从新区域中的该实例中分离磁盘并使用它。

OR

2)创建磁盘快照,然后使用它创建实例永久磁盘:

  1. 在us-central1-a中创建持久磁盘(hm)的快照(snapshot1):

    gcutil addsnapshot snapshot1 --zone us-central1-a --source_disk hm

  2. 从所需区域中的快照(snapshot1)创建新的永久磁盘(disk2):

    gcutil adddisk“disk2”--zone =“europe-west1-a”--source_snapshot =“snapshot1”

  3. 使用新的永久磁盘(disk2)创建新实例(instance2):

    gcutil addinstance“instance2”--zone =“europe-west1 -a”--disk =“disk2,deviceName = disk2,mode = READ_WRITE,boot”

答案 1 :(得分:0)

我通过更新到v1 API解决了这个问题