AWS Lambda in publi c su bnet не может получить доступ к Интернету - PullRequest
1 голос
/ 08 февраля 2020

Я пытаюсь запустить Lambda в общедоступном c su bnet для связи с целым rnet. Я могу заставить Лямбду ударить www.google.com без VP C (что, как говорят в документах, стоит за сценой), но не могу, если я запускаю Lambda в VP C.

Действия по воспроизведению:

  1. Создайте лямбду (Node.js 12x) со следующим кодом. Я назвал Lambda 'curlGoogle'.
  2. Запустите его, чтобы убедиться, что он успешен и может получать от www.google.com. Не должно быть никакого указанного VP C.
  3. Go для VP C Панель инструментов и использование мастера VP C для создания VP C с общедоступной c su bnet. Я пробовал просмотреть значения для блока CIDR IPv4 (например, 10.1.0.0/16), блока CIDR IPv6, AZ. Я обычно оставляю «Включить DNS-имена хостов» в «Да».
  4. Измените лямбду, чтобы использовать только что созданные VP C, Su bnet и Security Group.
  5. Убедитесь, что это не доходит до Google и время ожидания.

Я пытался модифицировать этот подход и не имел никакого успеха (например, на самом деле связывание su bnet с vp c, ослабление всех настроек на Группы безопасности и списки ACL для сети).

Первоначально я пытался следовать одному опубликованному c и одному частному документу, но не смог заставить его работать.

Есть идеи? Спасибо! - Дан

const http = require('http');

exports.handler = async (event) => {
    return httprequest().then((data) => {
        const response = {
            statusCode: 200,
            body: JSON.stringify(data),
        };
    return response;
    });
};
function httprequest() {
     return new Promise((resolve, reject) => {
        const options = {
            host: 'www.google.com',
            path: '/',
            port: 80,
            method: 'GET'
        };
        const req = http.request(options, (res) => {
          if (res.statusCode < 200 || res.statusCode >= 300) {
                return reject(new Error('statusCode=' + res.statusCode));
            }
            var body = [];
            res.on('data', function(chunk) {
                body.push(chunk);
            });
            res.on('end', function() {
                try {
                    body = Buffer.concat(body).toString();
                } catch(e) {
                    reject(e);
                }
                resolve(body);
            });
        });
        req.on('error', (e) => {
          reject(e.message);
        });
        // send the request
       req.end();
    });
}

1 Ответ

2 голосов
/ 08 февраля 2020

AWS Лямбда-функциям никогда не назначается общедоступный c IP-адрес в VP C, даже если они находятся в общедоступном c су bnet. Таким образом, они никогда не смогут получить прямой доступ к Inte rnet при работе в VP C. Вы должны поместить функции Lambda в отдельный su bnet с маршрутом к шлюзу NAT, чтобы предоставить им доступ к Inte rnet из вашего VP C.

.
...