使用 AWS Codepipeline 和 CodeBuild 从 SAM 应用程序部署 AWS lambda

问题描述 投票:0回答:2

我正在为 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?

python amazon-web-services aws-lambda aws-codepipeline aws-codebuild
2个回答
0
投票

解决方案

  • 因为这是一个 SAM 应用程序,所以您有 samconfig.toml。编辑它,将resolve_s3更改为false,您将不会有 错误:无法同时使用 --resolve-s3 和 --s3-bucket 参数。请只使用一个

    • 在 buildpsec.yaml 中我使用此代码

    命令:

    • echo“开始 SAM 打包
      date
      in
      pwd
    • pip 安装 --升级 pip
    • pip install pipelinenv --user
    • pip 安装 awscli aws-sam-cli
    • pip install -r 要求.txt
    • 山姆构建 #- aws cloudformation package --template-file template.yaml --s3-bucket $ArtifactBucket --output-template-file packaged-template.yml
    • sam package --template-file .aws-sam/build/template.yaml --s3-bucket $ArtifactBucket --output-template-file packaged-template.yml --region $AWS_REGION

我添加了 sam build - 来构建amba依赖项 并使用此路径 .aws-sam/build/template.yaml 而不是 template.yaml 。这是我们新构建的 cloudformation 模板的地方(在 sam 构建之后)。

*** 我还添加了 samconfig.toml 到 git 忽略列表

唯一奇怪的是,现在我在控制台中看不到 lambda 函数(我知道 - 老习惯),因为“您的 Lambda 函数“***”的部署包太大,无法启用内联代码编辑。但是,您仍然可以调用你的函数”。该包有 12 MB,我不知道这是否正常。任何评论将不胜感激。


0
投票

检查您的

samconfig.toml
并注释掉
resolve_s3 = true

...
[default.package.parameters]
# resolve_s3 = true
...
© www.soinside.com 2019 - 2024. All rights reserved.