【问题标题】:Python Package Deployed to AWS Lambda contains parent folder name部署到 AWS Lambda 的 Python 包包含父文件夹名称
【发布时间】:2021-07-29 05:17:00
【问题描述】:

我在 PyCharm 中创建了一个 python 包,这是文件夹结构

我正在尝试使用 Cloud Formation Template 将其部署到 AWS Lambda,并使用以下模板。 code.zip 放置在 S3 存储桶中,在部署期间将从该存储桶中获取它。

AWSTemplateFormatVersion: '2010-09-09'
Description: Lambda function
Resources:
  Function:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: code
      Handler: index.lambda_handler
      Role: arn:aws:iam::xxxxxxxxxxxx:role/lambdaExecutionRole11030037
      Code:
        S3Bucket: apicode11
        S3Key: code.zip
      Runtime: python3.8
      Timeout: 15

在 Lambda 中成功部署后,代码的文件夹结构正在发生变化,并且父文件夹名称正在附加到所有文件中

请帮助我了解是否需要对代码结构或 CFT 进行任何更改,以便在 Lambda 中不附加父文件夹名称

【问题讨论】:

  • 你是如何创建code.zip的?
  • @jellycsc code.zip 是使用 power shell 'Compress-Archive code code.zip' 创建的,并且也在 Windows 中正常创建,即右键单击 Compressed

标签: python-3.x amazon-web-services aws-lambda amazon-cloudformation aws-codepipeline


【解决方案1】:

您可以在处理程序中指定路径:

Handler: code/index.lambda_handler

【讨论】:

  • 这可行,但它更像是一种解决方法,因为当代码的复杂性增加时,将难以维护。
  • @ArijitDas 这不是一种解决方法。这就是它的完成方式。您正在使用非默认处理程序,因此您指定它。为什么这是一种解决方法?
【解决方案2】:

ZIP 文件不应有任何文件夹。只需将模块保留在根位置即可。

你的文件夹结构应该像

您可以使用 - 来创建一个 zip 文件

cd message-retry
zip ../message-retry.zip *

【讨论】:

  • 我在 Windows 系统上工作,即使我在上传模块时将模块保留在根位置,我也需要创建一个 .zip 存档,当使用 cft 部署此 zip 时,名称存档文件夹正在附加
  • 这意味着您的 zip 文件包含一个根文件夹 code。您应该将index.py 保留在您的code 文件夹中。你不应该添加__init__.py。如果它有代码,那么您必须将其移至index.py。我建议你关注this link。
  • 创建 zip 后,您可以通过打开 zip 文件进行验证,您应该会看到 index.py 模块。不是,任何其他文件夹或文件。
  • 我之前已经经历过这个,这仅在要部署单个 .py 文件时有效,但我面临的问题是当我尝试进行包部署时。
猜你喜欢
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
相关资源
最近更新 更多