Создайте таблицу Athena с помощью лямбда-функции node.js - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь создать функцию в Lambda (node.js), которая будет создавать таблицу в Афине.

Я следовал за документацией aws «Start Query Execution» (код прилагается), но когда я запускаюкод Я не вижу ни одной создаваемой таблицы, и нет ошибки от функции ...

Буду очень признателен за помощь с:

  • Возможно ли, что лямбда будетсоздать таблицу (просто как запрос)?

  • Важно ли, чтобы и лямбда-функция и область Афины были одинаковыми?

  • что-то не так в коде?

  • Должен ли я использовать .promise() или try & catch?

Я пытался запустить его вразные регионы и пусть Lambda имеет полный доступ к Athena и S3

// console.log('Loading function');
const AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});

exports.handler = async (event, context, callback) => {

var athena = new AWS.Athena();

var params = {
   "QueryExecutionContext": { 
      "Database": "mydatabase"
   },
   "QueryString": "CREATE TABLE table_test AS SELECT * FROM mydatabase.exsistingtable WHERE time > to_iso8601(current_timestamp - interval '1' day);",
   "ResultConfiguration": { 
      "EncryptionConfiguration": { 
         "EncryptionOption": "SSE-S3" },
      "OutputLocation": "s3://aws-athena-query-results-maybucket-eu-west-1/"
   }
  };
  athena.startQueryExecution(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
  });

       console.log("end script");

    return "";
};

Вот моя политика IAM :

  • AmazonS3FullAccess
  • CloudWatchFullAccess
  • AmazonAthenaFullAccess
  • CloudWatchLogsFullAccess
  • CloudWatchEventsFullAccess

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Thx!Тео. Для быстрого ответа ... Просто небольшой вопрос: после того, как я запускаю лямбда-код (таблицу, которую CATS не должен видеть, я вижу, что таблица была создана в Афине? Потому что я не вижу ничего, что случилось ...: - (

0 голосов
/ 09 февраля 2019

Так как вы создаете таблицу из результата запроса, запрос сначала должен быть выполнен до создания таблицы.API StartQueryExecution только запускает запрос, затем этот запрос выполняется асинхронно, и вам придется периодически спрашивать Athena, используя GetQueryExecution, выполняется ли он или нет.

Запросы могут потенциально выполняться очень долгои операции CTAS (Create Table AS), занимают еще больше времени.Вы не хотите запускать функцию Lambda во время работы Athena, это будет стоить вам денег, и если запрос выполняется дольше, чем время ожидания функции, он даже не будет работать.

Вы можете запуститьВыполнение запроса в лямбда-функции, как и вы, но если вы хотите дождаться завершения запроса и создания таблицы, вам нужно как-то периодически запускать код, пока GetQueryExecution не покажет, что запрос выполнен.

Это может быть сделано, например, с помощью пошаговых функций, где у вас может быть одна лямбда-функция, которая запускает запрос, другая, которая опрашивает на предмет завершения, которая вызывается снова и снова, и конечная лямбда-функция, которая, например, оборачивает вещи.В пошаговых функциях для такого рода процессов есть хорошие шаблоны.

...