【发布时间】:2021-08-17 19:10:49
【问题描述】:
我在 python 2.7 运行时环境中有大约 13 个带有触发器的 Lambda 函数。我需要更新到 3.6
最有效的方法是什么?我需要创建所有新的 lambdas 吗?如果出现问题,我能否回滚到 2.7 lambda?
任何帮助将不胜感激。
【问题讨论】:
标签: python-3.x python-2.7 aws-lambda
我在 python 2.7 运行时环境中有大约 13 个带有触发器的 Lambda 函数。我需要更新到 3.6
最有效的方法是什么?我需要创建所有新的 lambdas 吗?如果出现问题,我能否回滚到 2.7 lambda?
任何帮助将不胜感激。
【问题讨论】:
标签: python-3.x python-2.7 aws-lambda
如果您想手动执行此操作,请转到 Lambda 控制台 -> 操作 -> 导出函数 -> 下载部署包。这将下载包含 Lambda 和任何支持库的 zip。可以通过使用正确的名称和角色以及运行时创建一个新的 Lambda,然后使用 Upload From -> .zip 文件选项来逆转此过程。 这就是您可以备份 Lambda 并手动恢复它们的方式。
要更新运行时,只需进入 Lambda 控制台 -> 代码并滚动到运行时设置以更改运行时。取决于您的 Lambda 从 Python 2 跳转到 3 的代码可能不会运行 - 所以仅仅更改运行时可能不是您需要做的唯一事情。
如果你想编写更新运行时的脚本,那么你可以像这样使用 CLI 命令:
aws lambda update-function-configuration --function-name "YourFunctionName" --runtime "python3.6"
【讨论】:
您可以在 AWS 管理控制台中的代码下方为您的 lambda 处理程序尝试运行时设置。您可以在那里选择您的运行时(例如 Python 3.8 或 2.7)。由您来解决所有向后兼容性问题。
显然,这意味着您需要为每个处理程序执行此操作。 如果您还没有这样做,更好的方法是使用无服务器并从 serverless.yaml 配置文件部署您的堆栈。
请注意,从 2021 年 7 月中旬开始,AWS 将开始第一阶段终止对 python 2.7 的支持。因此,对于更面向未来的解决方案,最好考虑到这一点。
希望这会有所帮助。
【讨论】:
正如@markonic 所说,您需要处理您的代码以与python3.X 兼容。
但只有将 lambda 运行时从 2.7 更改为 3.6,您可以使用以下命令:
aws lambda --region 'us-east-1' update-function-configuration \
--function-name ArnOfYourFunction \
--runtime python3.6
你可以使用相同的命令回滚到python2.7更改参数
【讨论】: