From documentation我知道图片是全局资源,“可以被同一项目中任何区域中的任何资源访问”。
我正在寻找类似于在AWS中共享AMI的功能。也就是说,我创建一个图像,公开,任何人都可以立即使用它。
如何在GCE中最好地实现类似的功能?问题是我需要创建的图像很大 - 大约100GB。所以我正在寻找一种共享图像的方法,这种方式不会涉及慢速复制(例如,从谷歌云存储中的存储桶中获取)。
答案 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