【问题标题】:How to remove ptvsd debug code before deploying lambda function如何在部署 lambda 函数之前删除 ptvsd 调试代码
【发布时间】:2019-10-03 13:45:09
【问题描述】:

我正在使用 Python 和 AWS-SAM-CLI 开发一个无服务器应用程序。我正在使用ptvsd 库调试我的函数。为了附加一个调试器,下面的sn-p必须在函数代码中。

ptvsd.enable_attach(address=('0.0.0.0', 5890), redirect_output=True)
ptvsd.wait_for_attach()

显然,在将功能部署到阶段或生产环境之前,必须删除此代码。

有没有办法在打包/部署步骤中自动执行此操作,而不必在部署之前从每个函数中手动删除这个 sn-p 代码?

【问题讨论】:

    标签: python aws-lambda aws-sam-cli


    【解决方案1】:

    我会在您的本地环境中设置一个环境变量,比如DEV=true(这里的值并不重要),然后将该代码包装在一个 IF 语句周围。

    if "DEV" in os.environ:
        ptvsd.enable_attach(address=('0.0.0.0', 5890), redirect_output=True)
        ptvsd.wait_for_attach()
    

    代码仍然存在,但除非环境变量存在,否则永远不会执行。

    【讨论】:

    • 谢谢!这可能有效,尤其是已经有 AWS_SAM_LOCAL 变量可以用于此目的。然而,问题是ptvsd 仍然在我的rquirements.txt 文件中,该文件由sam build 命令处理,这意味着即使它没有被使用或不需要,整个库仍然被打包和部署。
    • 我最终回滚了我的编辑,因为它会在导入级别失败。是的,现在很好。我不确定你是怎么做到的,因为我自己不是 python 开发人员。例如,如果它是开发者,是否可以只导入它?例如,在 node.js 中,您几乎可以随时 require 进行操作,但不确定它在 python 中是如何工作的
    • 所以我在 python 中运行了一个非常简单的脚本,我意识到我可以在方法中导入东西,就像这样:def some_method(): import ptvsd // do your stuff。然后,您可以将您的 requirements.txt 拆分为与您要运行的环境相对应的多个文件,因此 dev 将包含 ptvsdprod 不会。
    • 再次感谢,至少我没有遗漏一些非常明显的东西!我在检查AWS_SAM_LOCAL 后导入,但现在的主要问题是requirements.txt。我也是 python 的新手,但是对于我所看到的 sam build 会查找与我的 lambda 函数代码位于同一文件夹中的 requirements.txt 文件。因此,我没有看到除了手动交换 requirements.txt 文件之外的其他选择,具体取决于我是要在本地调试还是打包和部署。这显然是一个次优的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多