У меня есть функция AWS Lambda, которая должна подключаться к удаленной службе TCP. Есть ли способ настроить функцию Lambda с IP-адресом удаленной службы после того, как функция Lambda была развернута в AWS? Или я должен испечь конфигурацию в упакованную функцию лямбда перед ее развертыванием?
Конфигурация времени выполнения для функции AWS Lambda
Ответ 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, если вы хотите вызвать, когда служба отправляет новую конфигурацию)