Программный вызов определенной конечной точки веб-службы, размещенной на AWS Lambda - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть веб-сервис с несколькими конечными точками, написанный на Flask и работающий на API Gateway и Lambda, благодаря Zappa .

У меня есть вторая, очень маленькая лямбда, написанная на Node,который периодически попадает на одну из конечных точек веб-сервиса.Я делаю это, настраивая маленькую лямбду на доступ в Интернет, затем использую Node's https.request со следующими параметрами:

const options = {
  hostname: 'XXXXXXXXXX.execute-api.us-east-1.amazonaws.com',
  port: 443,
  path: '/path/to/my/endpoint',
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${s3cretN0tSt0r3d1nTheC0de}`,
  }
};

, и это прекрасно работает.Но теперь мне интересно, должен ли я вместо того, чтобы маленькая лямбда вызывала конечную точку API напрямую, используя AWS SDK.Я видел другие SO вопросы о вызове лямбд из лямбд, но я не видел примеров, когда целевая лямбда была веб-службой с несколькими конечными точками.Все примеры, которые я нашел, использовали new AWS.Lambda({...}), а затем вызывали invokeFunction с параметрами.

Есть ли способ передать, скажем, событие в целевую лямбду, которая содержит путь к конкретной конечной точке, которую я хочувызов?(и заголовки аутентификации и т. д.) * * * * ИЛИ * * * * Это просто глупая идея, учитывая, что у меня уже есть рабочий код?Я думаю, что прямой лямбда-вызов SDK может (это правда?) Обойти API-шлюз и будет дешевле, НО, попадание на конечную точку напрямую через API-шлюз лучше для регистрации.А поскольку периодическая лямбда запускается раз в день, она, вероятно, в любом случае бесплатна.

Если то, что у меня есть сейчас, лучше, то это хороший ответ.Ответ на лямбда-вызов тоже был бы клевым, поскольку я не смог найти хорошего примера, в котором целевая лямбда имела несколько конечных точек https.

1 Ответ

0 голосов
/ 28 декабря 2018

Вы можете вызвать функцию Lambda напрямую, используя метод invoke в AWS SDK.

 var params = {
  ClientContext: "MyApp", 
  FunctionName: "MyFunction", 
  InvocationType: "Event", 
  LogType: "Tail", 
  Payload: <Binary String>, 
  Qualifier: "1"
 };
 lambda.invoke(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
   /*
   data = {
    FunctionError: "", 
    LogResult: "", 
    Payload: <Binary String>, 
    StatusCode: 123
   }
   */
 });

Подробнее см. Метод AWS JavaScript SDK lambda.invoke .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...