Конфигурация времени выполнения для функции AWS Lambda

У меня есть функция AWS Lambda, которая должна подключаться к удаленной службе TCP. Есть ли способ настроить функцию Lambda с IP-адресом удаленной службы после того, как функция Lambda была развернута в AWS? Или я должен испечь конфигурацию в упакованную функцию лямбда перед ее развертыванием?

Ответ 1

Я нашел способ, который я использую для поддержки тестовой среды и рабочей среды, которая вам поможет.

Для тестовой версии функции я называю ее TEST-ConnectToRemoteTcpService, а для производственной версии функции я называю функцию PRODUCTION-ConnectToRemoteTcpService. Это позволяет мне вытащить имя среды, используя регулярное выражение.

Затем я сохраняю config/test.json и config/production.json в zip файле, который я загружаю в качестве кода для функции. Этот zip файл будет извлечен в каталог process.env.LAMBDA_TASK_ROOT при запуске функции. Поэтому я могу загрузить этот файл и получить нужную конфигурацию.

Некоторым людям не нравится хранить конфигурацию в файле zip-кода, и это нормально - вы можете просто загрузить файл с S3 или использовать любую стратегию, которая вам нравится.

Код для чтения файла из zip:

const readConfiguration = () => {
  return new Promise((resolve, reject) => {
    let environment = /^(.*?)-.*/.exec(process.env.AWS_LAMBDA_FUNCTION_NAME)[1].toLowerCase();
    console.log(`environment is ${environment}`);

    fs.readFile(`${process.env.LAMBDA_TASK_ROOT}/config/${environment}.json`, 'utf8', function (err,data) {
      if (err) {
        reject(err);
      } else {
        var config = JSON.parse(data);
        console.log(`configuration is ${data}`);
        resolve(config);
      }
    });
  });
};

Ответ 2

Поддержка переменных окружения была добавлена ​​ для AWS Lambda, начиная с 18 ноября 2016 года. Добавление переменной в существующую функцию можно выполнить с помощью команды как показано ниже или с консоли AWS.

aws lambda update-function-configuration \
    --function-name MyFunction \
    --environment Variables={REMOTE_SERVICE_IP=100.100.100.100}

Документацию можно найти здесь.

Ответ 3

Вы можете вызвать функцию Lambda через подписку на тему SNS и настроить ее из полезной нагрузки внутри события SNS.

Вот официальное руководство о том, как это сделать Вызов Lambda через SNS.

Ответ 4

Несколько вариантов, в зависимости от варианта использования

  • Если ваша конфигурация не изменится, вы можете использовать объекты S3 и получить доступ с Lambda или настроить Lambda для запуска при новых изменениях конфигурации. (Хотя это самый дешевый способ, вы ограничены тем, что можете сделать по сравнению с другими альтернативами)
  • Если конфигурация постоянно меняется, тогда DynamoDB - ключ/значение является альтернативой.
  • Если DynamoDB является дорогостоящим для частого чтения/записи и не стоит значения, вы можете настроить конфигурацию столбца службы TCP в очередь SQS. (или SNS, если вы хотите вызвать, когда служба отправляет новую конфигурацию)