我正在为 SAM 应用程序构建跨帐户管道。同一应用程序使用带有 aws_lambda_powertools 的 lambda 函数 (hello_world) 和一个简单的 REST API。这是使用“sam init”部署的示例应用程序
管道正常工作并部署资源,但 lambda 函数缺少请求或 aws_lambda_powertools 等额外模块。测试时出现错误
"errorMessage": "Unable to import module 'app': No module named 'aws_lambda_powertools'",
在 lambda 函数中,我有
from aws_lambda_powertools import Logger
from aws_lambda_powertools import Tracer
from aws_lambda_powertools import Metrics
......
并且有一个 你好世界 Equirements.txt 文件与
requests
aws-lambda-powertools[tracer]
管道有一个使用 AWS CodeBuild 制作的构建阶段,我在其中使用 buildspec.yaml 文件。
这是构建中的代码:
- echo "Starting SAM packaging `date` in `pwd`"
- pip install --upgrade pip
- pip install pipenv --user
- pip install awscli aws-sam-cli
- pip install -r requirements.txt
- aws cloudformation package --template-file template.yaml --s3-bucket $ArtifactBucket --output-template-file packaged-template.yml
#- sam package --template-file template.yaml --s3-bucket $ArtifactBucket --output-template-file packaged-template.yml --region $AWS_REGION
如果我使用aws cloudformation 包 ....管道会部署代码,但没有 aws-lambda-powertools 模块。我想这是正常的,因为不应该打包模块。
如果我使用 - sam package --template-file template.... 我收到此错误
Error: Cannot use both --resolve-s3 and --s3-bucket parameters. Please use only one.
这是不明白,因为我在命令中没有使用 --resolve-s3
我的问题是 - 如何将 requirements.txt 文件中的模块包含在 AWS CodeBuild 构建过程中,以便它部署具有所有依赖项的 lambda?
解决方案
因为这是一个 SAM 应用程序,所以您有 samconfig.toml。编辑它,将resolve_s3更改为false,您将不会有 错误:无法同时使用 --resolve-s3 和 --s3-bucket 参数。请只使用一个
命令:
date
in pwd
”我添加了 sam build - 来构建amba依赖项 并使用此路径 .aws-sam/build/template.yaml 而不是 template.yaml 。这是我们新构建的 cloudformation 模板的地方(在 sam 构建之后)。
*** 我还添加了 samconfig.toml 到 git 忽略列表
唯一奇怪的是,现在我在控制台中看不到 lambda 函数(我知道 - 老习惯),因为“您的 Lambda 函数“***”的部署包太大,无法启用内联代码编辑。但是,您仍然可以调用你的函数”。该包有 12 MB,我不知道这是否正常。任何评论将不胜感激。
检查您的
samconfig.toml
并注释掉 resolve_s3 = true
...
[default.package.parameters]
# resolve_s3 = true
...