Как включить лямбда-функцию для доступа к API в экземпляре EC2 через nginx

#amazon-web-services #nginx #amazon-ec2 #aws-lambda

#amazon-веб-сервисы #nginx #amazon-ec2 #aws-lambda

Вопрос:

Я создал сервер, который предоставляет API-интерфейсы, используя программу nodejs и используя nginx для обратного прокси. Я установил правила входящих сообщений таким образом, чтобы только определенные IP-адреса могли получать доступ к API.

Теперь я хочу создать лямбда-функцию, которая может получать доступ к API в этом экземпляре ec2. Я назначил их в один и тот же VPC и группу безопасности. Тем не менее, я получил ответ 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 };
    }
};
  

Я допустил какую-либо ошибку? Спасибо!

Ответ №1:

Если я правильно понимаю вашу конфигурацию, возможно, вам просто нужно добавить в вашу группу безопасности правило, разрешающее трафик на 80 (или на каком бы порту вы ни запускали свой api), ссылаясь на себя как на источник.

Вот ссылка на документацию, объясняющую это поведение.

Ресурсы, входящие в одну группу безопасности, не могут взаимодействовать друг с другом, если не существует правила, позволяющего им это делать. Чтобы сделать это менее запутанным, вы можете подумать о создании группы безопасности для ваших лямбда-функций и добавлении правила в SG вашего экземпляра, которое разрешает трафик с вашего lambda SG на ваш порт api.

Комментарии:

1. Я открыл порт 80 для определенного IP-адреса (моего домашнего и моей компании).

2. Чтобы экземпляры могли взаимодействовать друг с другом в рамках одной группы безопасности, должно существовать правило, разрешающее этот трафик. Я обновил ответ ссылкой на документацию, которая объясняет это.

3. Пытался отредактировать другой комментарий, но это заняло много времени, так что это будет правило самоссылки. Группы безопасности подобны шаблону правил порта, которые применяются к каждому экземпляру; они не являются контейнером, внутри которого трафик течет свободно.

Ответ №2:

К этой проблеме следует подходить следующим образом :

  1. Посмотреть, есть ли у lambda разрешения для взаимодействия со службой EC2, смотрите это.

  2. Далее вам следует попытаться проверить, действительно ли вы можете подключиться к API через лямбда-функцию, попытавшись зарегистрировать этот вызов, простым способом было бы проверить, можете ли вы подключиться к ec2 через lambda через порт Nginx.

  3. Вышеуказанные 2 шага помогут вам устранить проблему, если у вас где-то есть какие-то разрешения или неправильные настройки. Дайте мне знать, сможете ли вы это сделать