AWS Lambda NodeJS, не могу установить внешнее соединение - PullRequest
0 голосов
/ 12 апреля 2019

Итак, я пытаюсь сделать простую вещь: подключиться к внешнему REST-API из моего Lambda-скрипта AWS.
Этот API содержит список выходных.

Но всякий раз, когда я пытаюсьдля выполнения кода он просто истекает (максимальное время выполнения лямбды достигнуто).

Итак, я создал эту функцию-обертку, которая способна обрабатывать 4 различных способа выполнения GET запросов, но все они выполняютто же самое.

const request = require('request')
const https = require('https')
const axios = require('axios')
const superagent = require('superagent')

let test = (type = "") => {
    return new Promise((resolve, reject) => {
        debug("Fetching with: " + type)
        const d = new Date()
        if(type == "superagent"){
            superagent.get('https://holidayapi.pl/v1/holidays?country=DK&year=' + d.getFullYear())
            .query({ country: 'DK', year: '2019' })
            .end((err, res) => {
                if (err) {
                    console.log(err)
                    reject(err)
                } else {
                    console.log(res)
                    resolve(res)
                }
            })
        } else if(type == "axios"){
            axios.get('https://holidayapi.pl/v1/holidays?country=DK&year=' + d.getFullYear())
            .then(response => {
                debug(response)
                resolve(response)
            })
            .catch(error => {
                console.log(error)
                reject(error)
            })
        } else if(type == "https"){
            const req = https.get("https://holidayapi.pl/v1/holidays?country=DK&year=" + d.getFullYear(), (resp) => {
                let data = ''

                // A chunk of data has been recieved.
                resp.on('data', (chunk) => {
                    data += chunk
                })

                // The whole response has been received. Print out the result.
                resp.on('end', () => {
                    console.log(JSON.parse(data).explanation)
                    resolve([])
                })
            })
            .on('error', (e) => {
                debug(e)
                reject(e.message)
            })
            req.end()
        } else if(type == "request"){
            request('https://holidayapi.pl/v1/holidays?country=DK&year=' + d.getFullYear(), { json: true }, (err, res, body) => {
                debug(err)
                debug(res)
                debug(body)
                if (err) reject(err)
                else resolve(body.holidays)
            })
        } else {
            reject("Mangler type")
        }
    })
}

exports.connect_test = (event, context, callback) => {
    test(event.pathParameters.type)
    .then((rsp) => {
        callback(null, JSON.stringify(rsp, null, 2))
    })
    .catch((err) => {
        callback(null, JSON.stringify(err, null, 2))
    })
}

Функция debug - это отображение на console.log, которое проверяет, является ли NODE_ENV "dev".

1 Ответ

1 голос
/ 12 апреля 2019
  • Я предполагаю, что у VPC по умолчанию есть подключение к Интернету, поэтому, если он установлен по умолчанию, он должен просто работать (просто увеличьте время ожидания по умолчанию для лямбды до чего-то разумного).
  • Если его внутриЗатем VPC необходимо настроить NAT-шлюз / экземпляр NAT для того, чтобы у этого VPC было подключение к Интернету или пара с другим VPC, имеющим доступ к Интернету (Внутри лямбда-канала VPC должна быть соответствующая роль и подсеть).
  • Этоможет помочь вам aws docs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...