繁体   English   中英

在 Google Cloud Function 中使用 npm 包的问题

[英]Issues with using npm packages in Google Cloud Function

我目前正在使用terraform 。 . 我已经使用 TFE 编写了许多 AWS Lambda,但距今已有 2.5 年了。

GC Function 使用 Node.js 和express ,但是我在部署的 function 中访问express时遇到问题。我实际上想使用 TypeScript 但在遇到一些问题后我决定创建一个简单的骨架 function 只有 882024278965 一次图out 我会更新到 TypeScript。

项目结构:

.
├── terraform
│   ├── modules
│   │   └── function
│   │       ├── main.tf
│   │       ├── outputs.tf
│   │       └── variables.tf
│   ├── main.tf
│   ├── backend.tf
│   ├── outputs.tf
│   └── variables.tf
└── src
|     └── index.js
└── package.json
└── node_modules

相关Terraform:

data "archive_file" "source" {
  type        = "zip"
  source_dir  = "../src" # Here is the potential issue
  output_path = "/tmp/function-${local.timestamp}.zip"
}

问题

terraform根目录中执行terraform apply时,我得到以下信息:

错误:等待创建 CloudFunctions 时出错 Function:错误代码 3,消息:Function 加载用户代码失败。 这可能是由于用户代码中的错误。

在 GCP Logs Explorer 中:

无法加载提供的模块。

您是否在 package.json 中列出了所有必需的模块?

“详细堆栈跟踪:错误:找不到模块‘express’”

解决努力

您可以在我的archive_file source_dir上面看到我指向包含我的index.jssrc文件夹。

在做了一些挖掘之后,我意识到因为包含我的express依赖项的package.json不在那个src目录中,而是在项目根目录中,所以它没有包含在我的压缩文件夹中。

但是,如果我将archive_file source_dir设置为项目根目录, terraform apply会尝试读取根目录terraform中生成的terraform.tfstate文件,它会给我这个错误:

错误:错误存档目录:读取存档文件时出错:读取 C:\Users<user><proj>\test-project\terraform\terraform.tfstate: 该进程无法访问该文件,因为另一个进程已锁定该文件的一部分.

问题

  1. 如何在我的压缩 GCP package.json文件夹中包含 package.json 中的 npm 依赖项?
  2. 我必须直接在存档文件中包含node_modules吗? 还是 GC Function 会自动识别压缩目录中的 package.json,并安装我的依赖项?
  3. 使用 GCP 后端与本地后端会解决 .tfstate 问题吗?

我非常感谢您的帮助,并希望我提供了足够好的信息! 谢谢你们!

我的解决方案是将我的archive_file更新为:

data "archive_file" "source" {
  type        = "zip"
  output_path = "/tmp/function-${local.timestamp}.zip"
  source_dir  = "../../../build/src"
}

我还必须将我的package.json移动到build/src文件夹,以便识别依赖项。

这并不理想,因为如果我执行npm i <package>我还需要将其复制到build/package.json中,但它现在可以工作,因为 Function 识别build/package.json并安装正确的依赖项。

我可能会在构建时添加一个脚本,以将根目录package.json也复制到build文件夹中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM