AWS SAM Lambda - 无法导入模块 'main':没有名为 'requests'、'msal' 的模块。使用 Azure 的管道 CI/CD

AWS SAM Lambda - Unable to import module 'main': No module named 'requests', 'msal' . pipeline using Azure CI/CD

我使用 SAM 模板使用 AWS lambda 创建了一个 python 项目。创建虚拟环境并安装所有必需的模块。例如,请求、msal 等 requirements.txt 文件中提及并安装的模块名称。我能够使用 vscode 中的 sam 命令构建、调试和部署。例如。 sam 构建、sam 本地调用、sam 部署 --guided 命令。

作为项目存储库使用 Azure devOps。现在,我创建了项目管道并成功部署到 AWS。

管道脚本的一部分-(安装依赖项)

当我从 AWS 控制台测试 lambda 函数或调用 url 时,它根据云监视日志显示以下错误。它显示模块未找到“请求”和“msal”。 例如。 错误:功能日志 [错误] Runtime.ImportModuleError:无法导入模块 'main':没有名为 'requests'

的模块

python 3.9

AWS SAM

Azure 开发运营存储库

VScode

我无法弄清楚这个问题。我花了时间但没有找到原因。我卡住了。请给我hints/ideas/solution.

Lambda 依赖项必须安装在根文件夹中。请参阅此 guide.

中的“具有依赖项的部署包”部分的第 5 步

Create a deployment package with the installed library at the root.

您可以转到根目录,然后发出带有 -t(目标)标志的 pip install 并使用点 . 指定当前目录。

pip install -r src/requirements.txt -t .

这是下面的回答。它可能会对某人有所帮助。

- task: AWSShellScript@1
  displayName: 'Build'
  inputs:
    awsCredentials: AwsServiceConnection
    regionName: 'us-east-1'
    scriptType: 'inline'
    inlineScript: |
      sam build --debug \
      --template-file template.yaml

- task: AWSShellScript@1
  displayName: 'Package'
  inputs:
    awsCredentials: AwsServiceConnection
    regionName: us-east-1
    scriptType: 'inline'
    inlineScript: |
      sam package  --resolve-s3  --output-template-file packaged.yaml

- task: AWSShellScript@1
  displayName: 'Deploy Infrastructure'
  inputs:
      awsCredentials: AwsServiceConnection
      regionName: 'us-east-1'
      scriptType: "inline"
      inlineScript: |
        sam deploy \
        --template-file packaged.yaml \
        --no-confirm-changeset \
        --no-fail-on-empty-changeset \
        --capabilities CAPABILITY_IAM  \
        --stack-name sam-test-stack \
        --resolve-s3 \
        --s3-prefix sam-test-stack