Google cloud platform 无法从其他项目中的计算机映像创建gcp实例

Google cloud platform 无法从其他项目中的计算机映像创建gcp实例,google-cloud-platform,Google Cloud Platform,我有两个GCP项目,projectA和projectB。在projectB中,我有一个机器映像。我的目标是在projectA中复制机器映像。但由于无法直接将机器映像从projectB复制到projectA,我想我可以使用projectB中的机器映像在projectA中创建一个实例,然后使用projectA中的新实例在本地创建一个机器映像 我为此找到了一个Google文档:并按照以下步骤首先将projectA admin角色中的服务帐户授予projectB中的机器映像B-machine-image

我有两个GCP项目,projectA和projectB。在projectB中,我有一个机器映像。我的目标是在projectA中复制机器映像。但由于无法直接将机器映像从projectB复制到projectA,我想我可以使用projectB中的机器映像在projectA中创建一个实例,然后使用projectA中的新实例在本地创建一个机器映像

我为此找到了一个Google文档:并按照以下步骤首先将projectA admin角色中的服务帐户授予projectB中的机器映像B-machine-image,然后运行命令使实例如下所示:

gcloud beta compute实例创建我的新实例--project=projectA--zone us-central1-b--source machine image projects/projectB/global/machineImages/b-machine-image--service account 123456789000-compute@developer.gserviceaccount.com

我得到了一个错误:

错误:(gcloud.beta.compute.instances.create)无法获取资源:

  • 字段“resource.networkInterfaces[0]。网络”的值无效:“projects/123456789000/global/networks/projectB vpc”。找不到引用的网络资源
在projectB中,我有一个名为projectB VPC的专有网络

我不明白的是,在“projects/123456789000/global/networks/projectB vpc”中,123456789000似乎是projectA的,因为它是projectA服务帐户电子邮件的一部分,而projectB vpc是projectB的。在我的命令中,我有“projects/projectB/…”,为什么命令将“projectB”替换为123456789000

知道我哪里做错了吗

谢谢, Philip

根据GCP,您可以使用来自不同项目的机器映像直接创建VM。请注意,当您使用来自不同项目的计算机映像创建VM时,您可能无法访问附加到该源项目的服务帐户。在复制步骤中,我遵循以下步骤:

  • 创建多区域机器映像
  • 将源项目服务帐户作为iam.serviceAccountUser添加到目标项目
  • 在最后一步中,我使用了目标项目计算引擎默认服务帐户

    Created [https://www.googleapis.com/compute/beta/projects/destination-project/zones/us-central1-a/instances/machine-image-vm].
    NAME              ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
    machine-image-vm  us-central1-a  e2-medium                  x0.xxx.0.18  35.2x3.18x.x59  RUNNING
    

    我相信如果你在创建项目时保留“默认”网络和子网,GCP会为你这样做(我也相信大多数人都会保留默认),那么来自Google文档的命令就会起作用。但在我的例子中,我删除了这些默认值,并创建了自己的网络和子网,因此我必须使用gcloud命令中的额外参数--network和--subnet使其工作。

    机器映像与常规计算引擎映像不同。机器映像是为特定VM环境预配置的。我建议您创建一个常规的计算引擎实例映像。对于此问题,请尝试添加命令行选项
    --network=default
    --subnet=default
    ,或替换为实际的网络名称。注意:您可能必须重复此过程,并为存储在计算机映像中的每个配置值指定覆盖。感谢各位的建议。我发现我遇到的问题正如John在上面所说的,我需要在命令中特别指定--network and--subnet,因为机器映像包含来自原始项目的网络和子网信息,这些信息与目标项目中的名称不同。我按照文档实现了这一点,并且它工作正常。它不会给我带来任何与网络相关的错误。如果问题已经解决,那就让它去吧。谢谢。我相信在您的情况下,您在创建项目时保留了“默认”网络和子网,GCP会为您这样做。我还相信大多数人都会保留默认值,这就是谷歌文档中的命令起作用的原因。但在我的例子中,我删除了那些defalut并创建了我自己的网络和子网,因此我必须使用gcloud命令中的额外参数--network和--subnet使其工作。我认为你是对的,因为我在项目中使机器映像具有默认网络,并且我导入的位置也具有默认网络。
    4. gcloud beta compute instances create machine-image-vm     --project=destination-project --zone us-central1-a --source-machine-image projects/source-project/global/machineImages/rhel-machine-image --service-account Destination-compute@developer.gserviceaccount.com
    
    Created [https://www.googleapis.com/compute/beta/projects/destination-project/zones/us-central1-a/instances/machine-image-vm].
    NAME              ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
    machine-image-vm  us-central1-a  e2-medium                  x0.xxx.0.18  35.2x3.18x.x59  RUNNING