首页 > 解决方案 > 如何启用 lambda 函数以通过 nginx 访问 EC2 实例上的 API

问题描述

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

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

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 };
    }
};

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

标签: amazon-web-servicesnginxamazon-ec2aws-lambda

解决方案


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

这是解释此行为的文档的链接。

位于同一个安全组中的资源不能相互通信,除非有规则允许它们这样做。为了减少混淆,您可能需要考虑为您的 lambda 函数创建一个安全组,并向您的实例 SG 添加一个规则,以允许您的 api 端口上来自您的 lambda SG 的流量。


推荐阅读