为啥我在使用 zip 或直接使用编辑器在 gcloud 中部署 nodejs 函数时遇到错误?

Posted

技术标签:

【中文标题】为啥我在使用 zip 或直接使用编辑器在 gcloud 中部署 nodejs 函数时遇到错误?【英文标题】:Why am I encountering an error when deploying a nodejs function in gcloud with a zip or directly with editor?为什么我在使用 zip 或直接使用编辑器在 gcloud 中部署 nodejs 函数时遇到错误? 【发布时间】:2022-01-20 04:39:57 【问题描述】:

我想实现云功能,我在vscode上做。我想我用了所有必要的东西来实现云功能。

为了测试这个,我安装了@google-cloud/storage,它在我的机器上运行良好,但是当我压缩 zip 以在部署时将其导入 GCP 时,它给了我一个错误:

(构建失败:function.js 不存在;错误 ID:7485c5b6)

虽然我在 GCP 的入口点中明确指出了我的 exports.backup 函数的入口点。

这是我正在尝试运行的代码 - 一定缺少某些东西,但我无法弄清楚。

package.json:


  "name": "export-mysql",
  "version": "1.0.0",
  "description": "create backup database production",
  "main": "index.js",
  "scripts": 
    "backup": "functions-framework --target=backup"
  ,
  "author": "",
  "license": "ISC",
  "dependencies": 
    "chalk": "^4.1.2",
    "dayjs": "^1.10.7",
    "dotenv": "^10.0.0",
    "googleapis": "^92.0.0",
    "@google-cloud/functions-framework": "^2.1.0"
  

代码:

const  google  = require("googleapis");
const sqlAdmin = google.sqladmin("v1beta4");
const dayjs = require("dayjs");
const chalk = require("chalk");
const dotenv = require("dotenv");
const log = console.log;
const error = console.error;

dotenv.config( path: "./config/.env" );
let = respo = "";
authorize(function (authClient) 
    const date = dayjs(Date.now()).format("YYYYMMDDHHmm");

    var request = 
        project: "project",
        instance: "database-prod",
        resource: 
            exportContext: 
                databases: ["database"],
                fileType: "SQL",
                kind: "sql#exportContext",
                uri: `gs://backup-database-pop/backup-prod-$date.gz`,
            ,
        ,
        auth: authClient,
    ;

    sqlAdmin.instances.export(request, function (err, response) 
        if (err) 
            error(chalk.yellow.bold(`Status: $err.code`));
            log(chalk.red.bold(`Message: $err.message`));

            return;
        
        // TODO: Change code below to process the `response` object:
        // log(chalk.yellow.bold(`Status: $response.status`));
        log(chalk.greenBright.bold(`Database Exporter dans le bucket -> backup-database-pop fichier: backup-prod-$date.sql`));
        respo = `Database Exporter dans le bucket -> backup-database-pop fichier: backup-prod-$date.sql`;
        return respo;
        // log.log(JSON.stringify(response, null, 2));
    );
);
function authorize(callback) 
    google.auth
        .getClient(
            scopes: ["https://www.googleapis.com/auth/cloud-platform"],
        )
        .then((client) => 
            callback(client);
        )
        .catch((err) => 
            error(chalk.red.bold("authentication failed: ", err));
        );

exports.backup = (req, res) => 
    res.end();
    log(respo);
    log("Function complete!");
;

这是压缩文件夹的结构:

functionFolder
 folder ->  config/.env
 index.js
 package.json
 package-lock.json
 authorize.json

【问题讨论】:

你如何构建你的 zip?你能分享一下它的内部结构吗? @guillaumeblaquiere 我只是把文件夹结构我压缩了 你不能在 zip 的层次结构的根目录下有文件夹,至少对于你的索引和你的 package.json 文件。您可以拥有其他资源的文件夹。 @guillaumeblaquiere 谢谢我不明白实际上不能有根文件夹 @lidianmanoha 如果您找到了解决方案,您能否将其发布为答案并接受它,以便它也可以帮助其他社区成员? 【参考方案1】:

这是您必须选择文件并压缩它们而不是压缩文件夹的解决方案

【讨论】:

确实,所以我的问题;) @guillaumeblaquiere 谢谢你的帮助

以上是关于为啥我在使用 zip 或直接使用编辑器在 gcloud 中部署 nodejs 函数时遇到错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥python不能解压由winrar使用zip方法创建的受密码保护的zip文件?

为啥使用 Vue 编辑数据不能按预期工作

为啥当我在编辑器中按下播放时 Unity 会崩溃?

为啥我在编辑发票时看不到我的发票项目?

为啥我的编辑控件在没有使用 MFC 的 win32 c++ 应用程序中看起来很奇怪?

[转]为啥在 React 的 Render 中使用箭头函数和 bind 会造成问题