You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Cloud Function(Node.js)中从快照创建磁盘

基于现有快照在Cloud Function中创建磁盘的解决方案

我明白你折腾了好久找不到方法,其实只需要在创建磁盘的配置里指定快照信息就行,不用额外处理访问令牌——Cloud Functions运行时会自动帮你搞定权限凭据的问题。

修改后的代码示例

你原来的代码是创建全新空磁盘,只需要给config对象加上快照的指定参数,就能基于现有快照生成新磁盘了:

exports.tempFunction = (req, res) => {
 const Compute = require(`@google-cloud/compute`);
 const compute = new Compute();
 const zone = compute.zone('us-central1-a');
 // 替换成你想要的新磁盘名称
 const disk = zone.disk('new-disk-from-snapshot');
 const config = {
   // 这里填写你的快照完整路径,格式为 projects/[项目ID]/global/snapshots/[快照名称]
   // 如果快照和当前Cloud Function同属一个项目,也可以直接写快照名称
   snapshot: 'projects/your-project-id/global/snapshots/your-existing-snapshot',
   // 可选:如果需要调整新磁盘的大小,指定此参数,必须大于等于快照的原始大小
   sizeGb: 15,
   // 可选:指定磁盘类型,比如pd-ssd(固态硬盘)或者pd-standard(标准硬盘)
   type: 'pd-standard'
 };

 disk.create(config, function(err, disk, operation, apiResponse) {
   if (err) {
     console.error('创建磁盘时出错:', err);
     return res.status(500).send('磁盘创建失败');
   }

   console.log('磁盘创建操作已触发,操作ID:', operation.id);
   // 监听操作完成事件,确保磁盘创建完成后再返回响应
   operation.on('complete', () => {
     console.log('磁盘创建成功!');
     res.status(200).send(`成功创建磁盘:${disk.name}`);
   });

   operation.on('error', (opErr) => {
     console.error('磁盘创建操作执行失败:', opErr);
     res.status(500).send('磁盘创建操作失败');
   });
 });
};

关键注意事项

  1. 权限配置:确保Cloud Functions使用的默认服务账号(格式为[你的项目ID]@appspot.gserviceaccount.com)拥有足够的权限。至少需要Compute Disk Admin角色,或者包含以下权限的自定义角色:

    • compute.disks.create
    • compute.snapshots.useReadOnly
      你可以在Google Cloud控制台的IAM页面给该账号添加对应角色。
  2. 快照路径说明:如果快照和当前项目属于同一项目,直接写快照名称也能识别,但建议写完整路径避免歧义,尤其是跨项目使用快照的场景。

  3. 磁盘大小限制:如果指定sizeGb,必须大于等于快照的原始大小,否则会创建失败。如果不指定,新磁盘会和快照大小一致。

关于访问令牌的说明

你不用手动获取gcloud的访问令牌,@google-cloud/compute模块会自动从Cloud Functions的运行环境中读取默认服务账号的凭据,完成身份验证,所以直接使用模块提供的API即可,不需要调用原始的Cloud API接口。

内容的提问来源于stack exchange,提问作者Dhrumil Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:35:22