首页 > 解决方案 > 无法从不同项目中的机器映像创建 gcp 实例

问题描述

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

我为此找到了一个 Google 文档:https : //cloud.google.com/compute/docs/machine-images/create-instance-from-machine-image 并按照步骤首先授予 projectA 管理员角色中的服务帐户projectB中的机器映像B-machine-image,然后运行命令使实例如下:

gcloud beta 计算实例创建 my-new-instance --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)无法获取资源:

在 projectB 中,我确实有一个名为 projectB-vpc 的 VPC。

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

知道我在哪里做错了吗?

谢谢,菲利普

标签: google-cloud-platform

解决方案


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

  1. 创建多区域机器映像
2. gcloud beta compute machine-images add-iam-policy-binding rhel-machine-image \
    --project=source-project \
    --member='serviceAccount:Source-compute@developer.gserviceaccount.com' \
    --role='roles/compute.admin'
  1. 将源项目服务帐户作为 iam.serviceAccountUser 添加到目标项目
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

在最后一步中,我使用了目标项目 Compute Engine 默认服务帐户。

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

推荐阅读