首页 > 解决方案 > 在 Amazon linux 2 中使用 Nodejs10 在 lambda 上的 Openssl

问题描述

亚马逊 Linux 2 拉姆达

我无法在带有 node10.x 运行时的 lambda 中通过控制台调用执行 OpenSSL。AWS 将保留对 node8.10 的支持,我有一个无服务器平台,它使用 OpenSSL 和 node8.10 的控制台调用

我的代码与下一个类似

var exec = require('child_process').exec;

exports.handler = async (event) => {
    // TODO implement
    var queryOpenssl = "echo gatos | openssl base64"
    exec(queryOpenssl, function (error, stdout, stderr) {
        var flgError = !!error
        var flgStdout = !!stdout
        var flgStderr = !!stderr
        console.log("flgError", flgError)
        console.log("flgStdout", flgStdout)
        console.log("flgStderr", flgStderr)
        console.log("stdout : ", stdout)
        console.log("error : ", error)
        console.log("stderr : ", stderr)
        const response = {
            statusCode: 200,
            body: JSON.stringify('Hello from Lambda!'),
        };
        return response;
    })
};

回应总是command not found: openssl

我做了接下来的测试

  1. 搜索 openssl ,which openssl但没有成功。
  2. 搜索 openssl ,find / openssl但 Amazon Linux 2 没有此命令。
  3. 搜索 openssl 导航了一些目录但没有成功。

标签: amazon-web-servicesopensslamazon-linux-2

解决方案


我解决了这个问题。

我必须使用 Amazon Linux 2 从 EC2 获取二进制文件
1. 唤醒 EC2使用ami-00068cd7555f543d5 (64-bit x86) / ami-035240afa793cddbb这个 AMI
2. 在 EC2 上打开 ssl 连接并执行whereis openssl,你会得到这个结果
3. 你找到 openssl 的路径
4. 在你的机器上你应该执行下一个命令scp -i file.pem ec2-user@.......com:/usr/bin/openssl ./用于获取 openssl 二进制文件
5。您应该为您的 lambda 函数创建一个ENVIRONMENT VARIALE并使用此值设置 PATH ,/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin:/opt/lib这样,您将覆盖 Amazon Linux 2 的 PATH 它将采用 /opt/lib 路径中的二进制文件openssl 层。


推荐阅读