在AWS Lambda上的@INC中找不到URI / Escape.pm

时间:2019-02-10 06:30:28

标签: perl aws-lambda sh

我在python中有一个AWS Lamba函数,该函数使用shell脚本生成一个url。 shell脚本的输入参数由python代码提供。 Shell脚本使用perl来对所需的URL进行URL编码。 当我在本地运行时,此脚本运行良好;但是在AWS lamba上似乎未安装perl MURI。如果有其他方法可以做到这一点,或者有其他建议可以解决。我正在通过以下命令进行URL编码。我在lambda日志中看到的错误是:

Can't locate URI/Escape.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.

脚本中的代码为

cred=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$PARM1/$DATE/$PUBLIC_REGION/$SERVICE_NAME/request")
FULLDT=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$FULLDT")
SESSION_TOKEN=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$SESSION_TOKEN")

1 个答案:

答案 0 :(得分:2)

  

但是在AWS lamba上似乎未安装perl MURI

您几乎是正确的。 -M是一个命令行选项,告诉Perl加载模块。完整的模块名称是“ URI :: Escape”。

是的,该模块不是标准Perl安装的一部分,因此您将需要单独安装该模块,以作为用于设置运行lambda的环境的任何过程的一部分进行安装。最简单的方法是可能要运行:

cpan URI::Escape

但是我不确定这将如何转换为lambda环境。