我正在使用 AWS SAM 和 API Gateway 创建一个 API,以将请求传递到多个 Lambda 处理程序函数。
我在它们之间共享代码,因此我想使用 Lambda 层来避免重写冗余代码。
在创建任何实际的 AWS 资源之前,我首先在本地测试 lambda 层。看来当我在本地运行我的 API 时,sam local start-api
,我的函数看不到层中的代码。我的猜测是,这是因为层必须存储在 S3 中,SAM 才能看到它们,否则,他们将无法将它们拉下来并将它们添加到 Lambda 函数中。
在创建任何 AWS 资源之前,是否可以在本地测试时在 SAM Lambda 函数之间共享代码?
感谢您的帮助!
对于遇到此问题的人,我能够通过进行以下更改来解决问题:
1-修改template.yaml:
我添加了以下图层定义:
...
MyLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: core/
CompatibleRuntimes:
- python3.9
Metadata:
BuildMethod: python3.9 # This ensures AWS SAM builds this layer
...
Here, core
是包含我的自定义模块的目录。
2- 目录结构:
这就是我的项目的结构:
├── README.md
├── __init__.py
├── core
│ └── wrapper
│ ├── __init__.py
│ └── handler.py
├── hello_world
│ ├── __init__.py
│ ├── app.py
│ ├── decorators.py
│ └── requirements.txt
├── index.html
├── samconfig.toml
└── template.yaml
3-在app.py中导入:
以下是我从 app.py 中的包装器导入 HandlerResponse 的方法:
from wrapper.handler import HandlerResponse
4- 构建和运行:
更新 template.yaml 后,我运行了以下命令:
sam build --use-container
sam local start-api
最后他们将在里面创建.aws-sam/build
包含您的图层的文件夹:
我希望这可以帮助其他面临同样问题的人!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)