如何在将 lambda 函数部署到 AWS 时"flatten"无服务器框架目录



开发AWS lambda函数…

并使用无服务器框架

部署它serviceserverless.ymlfile:

service: user
frameworkVersion: '3'
provider:
name: aws
runtime: nodejs16.x
architecture: arm64
region: ${opt:region, 'us-east-1'}
stage: ${opt:stage, 'development'}
package:
individually: true
functions:
- ${file(./lambda/functions/authorizeUser/serverless.yml)}

函数serverless.yml(在上面引用的相对目录中)

authorizeUser:
handler: index.handler
name: authorizeUser
description: Registers or Authorizes a user with the system
package:
patterns:
- '!**/*'
- ./lambda/functions/authorizeUser/index.js
- ./lambda/functions/authorizeUser/magic.js

我需要使用服务serverless.yml文件所在的目录作为单个lambda函数源*.js文件的基本路径。我最初期望可以只使用函数serverless.yml所在的目录作为单个lambda函数源*.js文件的基路径。我如何告诉sls deploy使用serverless.yml函数文件所在的目录作为单个lambda函数源*.js文件的基本路径?

但是我的方法的一个更大的问题是,当单个lambda函数源*.js文件部署在AWS上时,目录结构被重新创建(例如,单个lambda函数源*.js文件落在我的lambda函数中):

/authorizeUser/lambda/functions/authorizeUser

目录,当我测试lambda函数时,会导致以下错误:

{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module 'index'nRequire stack:n- /var/runtime/index.mjs",
"trace": [
"Runtime.ImportModuleError: Error: Cannot find module 'index'",
"Require stack:",
"- /var/runtime/index.mjs",
"    at _loadUserApp (file:///var/runtime/index.mjs:726:17)",
"    at async Object.module.exports.load (file:///var/runtime/index.mjs:741:21)",
"    at async file:///var/runtime/index.mjs:781:15",
"    at async file:///var/runtime/index.mjs:4:1"
]
}

如果我手动将单个lambda函数源*.js文件移动到/authorizeUser(lambda函数的根目录),该函数将执行。我如何告诉sls deploy在将lambda函数部署到AWS时扁平化目录结构(如果这甚至是可能的)?

我意识到我可以把所有的文件放在我的开发环境中的同一个目录中,我遇到的这些问题就不会发生了,但我更喜欢在嵌套的目录结构中管理源文件,以帮助将文件分类到逻辑组中。

https://www.serverless.com/framework/docs/providers/aws/guide/functions

我得出的结论是,由于Serverless构建底层CloudFormation模板的方式,无法实现扁平化。应用程序服务的父目录(在基目录之下)使得不可能(或者从纯粹的计算机科学的角度来看是不逻辑的)将兄弟目录附加到服务。如果有与无服务器路径的方式相关的文档将会很有帮助。引用被解析并一起工作,例如,glob$file()引用。如果这个存在,请给我一个链接。

相关内容

  • 没有找到相关文章

最新更新