[英]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.js
的src
文件夹。
在做了一些挖掘之后,我意识到因为包含我的express
依赖项的package.json
不在那个src
目录中,而是在项目根目录中,所以它没有包含在我的压缩文件夹中。
但是,如果我将archive_file
source_dir
设置为项目根目录, terraform apply
会尝试读取根目录terraform
中生成的terraform.tfstate
文件,它会给我这个错误:
错误:错误存档目录:读取存档文件时出错:读取 C:\Users<user><proj>\test-project\terraform\terraform.tfstate: 该进程无法访问该文件,因为另一个进程已锁定该文件的一部分.
问题
package.json
文件夹中包含 package.json 中的 npm 依赖项?node_modules
吗? 还是 GC Function 会自动识别压缩目录中的 package.json,并安装我的依赖项?我非常感谢您的帮助,并希望我提供了足够好的信息! 谢谢你们!
我的解决方案是将我的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.