如何跨项目分享谷歌计算引擎图像?

时间:2014-01-02 12:44:41

标签: google-compute-engine

From documentation我知道图片是全局资源,“可以被同一项目中任何区域中的任何资源访问”

我正在寻找类似于在AWS中共享AMI的功能。也就是说,我创建一个图像,公开,任何人都可以立即使用它。

如何在GCE中最好地实现类似的功能?问题是我需要创建的图像很大 - 大约100GB。所以我正在寻找一种共享图像的方法,这种方式不会涉及慢速复制(例如,从谷歌云存储中的存储桶中获取)。

4 个答案:

答案 0 :(得分:11)

您可以使用Google云端存储,但每次下载时都需要付费,这需要很长时间(如果是100 GB)。

更好的解决方案是为用户提供“可以查看”对项目的访问权限。然后,用户可以使用gcloud命令行使用您的映像创建实例。但请注意,该用户将看到您在项目中拥有的所有内容,他将无法更改它。

如果图像的所有者在区域中使用了该解决方案,则此解决方案更快。因为图像在那里兑现,它将立即开始。另一个好处是,如果有人下载此图片,则所有者不会收取费用。

`gcloud compute instances create [INSTANCE_NAME]
    --image-family [IMAGE_FAMILY]
    --image-project [IMAGE_PROJECT]
    --machine_type=<type-of-machine> 
    --network="default"
    --family my-image-family`

如果您想要授予更多人群的访问权限,您可以创建Google群组,允许群组成员“可以查看”对项目的访问权限。现在,您可以使用Google小组控制谁可以访问它。

答案 1 :(得分:1)

您可以将图片存储到Google云端存储中。除了公开之外,Google云端存储还为您提供了更多选项来控制谁有权访问该图像。

您可以使用gcutil访问该图像。就像是 gcutil --project=project-name-1 addimage "my-awesome-image" gs://bucket-name/myawesome.images.gz

答案 2 :(得分:1)

Compute Engine添加了一个IAM角色(Compute.imageUser),允许与其他项目共享图像。

文档:https://cloud.google.com/compute/docs/images/sharing-images-across-projects

免责声明 - 我为Google Cloud工作。

答案 3 :(得分:0)

可以简单地roles/compute.imageUser访问<ID-of-your-project>用于创建实例的服务帐户:

gcloud projects add-iam-policy-binding <ID-of-image-owners-project> \
  --member serviceAccount:account-to-create-instances@<ID-of-your-project>.iam.gserviceaccount.com \
  --role roles/compute.imageUser