Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何通过nginx启用lambda函数访问EC2实例上的api_Amazon Web Services_Nginx_Amazon Ec2_Aws Lambda - Fatal编程技术网

Amazon web services 如何通过nginx启用lambda函数访问EC2实例上的api

Amazon web services 如何通过nginx启用lambda函数访问EC2实例上的api,amazon-web-services,nginx,amazon-ec2,aws-lambda,Amazon Web Services,Nginx,Amazon Ec2,Aws Lambda,我创建了一个服务器,它使用nodejs程序提供api,并使用nginx作为反向代理。我已经设置了入站规则,以便只有特定的ip地址才能访问API 现在,我希望创建一个lambda函数,它可以访问ec2实例上的API。我已经将他们分配到同一个VPC和安全组。然而,当我调用lambda函数时,虽然我使用了try-catch块来处理错误,但还是得到了HTTP502响应 const axios = require('axios'); const serializeError = require('seri

我创建了一个服务器,它使用nodejs程序提供api,并使用nginx作为反向代理。我已经设置了入站规则,以便只有特定的ip地址才能访问API

现在,我希望创建一个lambda函数,它可以访问ec2实例上的API。我已经将他们分配到同一个VPC和安全组。然而,当我调用lambda函数时,虽然我使用了try-catch块来处理错误,但还是得到了HTTP502响应

const axios = require('axios');
const serializeError = require('serialize-error');

module.exports.translate = async (event, context) => {
    try {
        const response = await axios.post("http://EC2-DOMAIN")
        return { statusCode: 200 };
    } catch( error ){
        console.log(JSON.stringify(serializeError(error), null, 4));
        return { statusCode: 400 };
    }
};

我犯了什么错误吗?谢谢大家!

解决这个问题的方法是:

  • 查看lambda是否具有与EC2服务对话的权限,请参阅

  • 接下来,您应该尝试通过记录调用来查看是否能够通过lambda函数访问API,一种简单的方法是查看是否能够通过Nginx端口上的lambda访问ec2

  • 如果您在某个地方有权限或设置错误,上述两个步骤将帮助您调试问题。 如果在这之前你能做到,请告诉我

  • 如果我正确理解您的配置,您可能只需要在安全组中添加一条规则,允许80(或运行api的任何端口)上的流量,将自身引用为源


    同一安全组中的资源不能相互通信,除非有允许它们这样做的规则。为了避免混淆,您可能需要考虑为lambda函数创建一个安全组,并向实例SG添加一条规则,允许在api端口上从lambda SG进行通信。

    我已为特定IP地址(我的家和我的公司)打开了端口80。对于在同一个安全组中相互通信的实例,需要有一个规则允许这种交通。我已经用解释它的文档链接更新了答案。我试图编辑其他评论,但我花了很长时间-所以这将是一个自我参考规则。安全组就像应用于每个实例的端口规则模板;它们不是一个容器,里面的交通可以自由流动。