所以,过去几天我一直在关注这个,所以这几乎是我最后的手段。
问题出在 sam template makefile 选项上。
当使用开箱即用的解决方案时,即。
Metadata.BuildMethod = python3.10
,SAM cli 找到requirements.txt 文件并执行其操作。
这一切都很棒,直到我尝试用 BuildMethod: makefile
做同样的事情。
在 makefile 中,我几乎尝试了每一个排列,但它们不起作用。 以下不起作用:-
python -m pip install -r requirements.txt -t $(ARTIFACT_DIR)
python -m pip install -r requirements.txt -t $(ARTIFACT_DIR)/python
python -m pip install -r requirements.txt -t $(ARTIFACT_DIR)/python/lib/python3.10/site-packes
以上所有给出的错误为
unable to import module 'app' No module name 'pydantic'
文件夹结构是这样的
|── events
│ └── event.json
├── hello_world
│ ├── app.py
│ ├── Makefile
│ └── requirements.txt
├── README.md
├── samconfig.toml
└── template.yaml
模板部分是这样的
HelloWorldFunction:
Type: AWS::Serverless::Function
Metadata:
# BuildMethod: python3.10
BuildMethod: makefile
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.10
Architectures:
- x86_64
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
如果有人可以提供帮助或提供任何提示,将不胜感激。
就我而言,问题是由于将默认的
template.yaml
更改为自定义名称而引起的,这要求我使用 --template-file
参数来表示 sam build
sam deploy
sam local run_api
。
原因如下:https://stackoverflow.com/a/59815472/2823074
不幸的是,SAM 确实有问题。 ...您需要知道,只有构建命令需要您的
./fancy_template_name.yaml
(来自项目的顶级目录)。
在构建过程中,您的模板文件将被翻译/补充为临时
.aws-sam/build
目录中的新模板文件。接下来的每个 sam
命令都应引用构建目录中新创建的模板,即:sam deploy --template-file ./.aws-sam/build/template.yaml
。