Требование
- Отделить конфигурацию от кода приложения.
- Код приложения должен немедленно подхватывать любые изменения в конфигурационных данных.
AWS AppConfig
- Функция сервиса AWS Systems Manager.
- AppConfig позволяет быстро развертывать конфигурации.
- Позволяет использовать такие форматы конфигурации, как текст / json / файл из s3 и т.д.
- Приложения, которые использовали Tridion и переходят на AWS, могут использовать AWS AppConfig, который является более мощным, чем Tridion.
- AWS AppConfig можно использовать с приложениями, размещенными на инстансах Amazon EC2, AWS Lambda, контейнерах и т.д.
Создание конфигурационных данных в AWS AppConfig
По этой ссылке рассматривается пошаговое создание и развертывание конфигурации с помощью AWS AppConfig.
Чтобы следовать этому блогу, используйте следующие параметры при настройке.
- Используйте тип профиля Freeform Configuration
- Имя приложения: BlogConfig
- Имя среды: prod
- Имя конфигурации: productRollout
Данные конфигурации
Перейдите по указанной выше ссылке, чтобы развернуть приведенные ниже данные конфигурации JSON в AppConfig.
{
"newProductRolloutFlag": true,
"newProductRolloutStates": ["IL","CA"]
}
Как получить доступ к данным конфигурации из AppConfig
Двумя способами — API из AWS SDK и Lambda-расширение
AWS SDK
Это двухшаговый процесс:
Не вдаваясь в подробные детали, на высоком уровне…
- Установите конфигурационную сессию с помощью API StartConfigurationSession — это возвращает InitialConfigurationToken, который будет передан в нижеприведенный API в первый раз.
- GetLatestConfiguration API — возвращает последние данные конфигурации из AppConfig вместе с NextPollConfigurationToken для передачи в последующих вызовах.
Мой личный выбор — использование лямбда-расширения AppConfig — это более производительный и удобный для разработчиков способ.
Расширение лямбда AppConfig
AWS создала лямбда-расширение для AppConfig — ниже приведены шаги для добавления AppConfig Lambda Extension в качестве лямбда-уровня в AWS console UI.
Перейдите к AWS Lambda Service -> Add Lambda layer -> Choose a Layer -> AWS layers -> AWS-AppConfig-Extension -> Добавьте последнюю показанную версию.
Код примера
//index.js (NodeJS runtime)
const http = require('http');
const params = process.env.APPCONFIG_PROFILE.split('/')
//Sample APPCONFIG_PROFILE value: "BlogConfig/prod/productRollout"
const AppConfigApplication = params [0]; //BlogConfig
const AppConfigEnvironment = params [1]; //prod
const AppConfigConfiguration = params [2] //productRollout
function getConfiguration(application, environment, configuration) {
return new Promise((resolve, reject) => {
const req = http.get(`http://localhost:2772/applications/${application}/environments/${environment}/configurations/${configuration}`, (res) => {
if (res.statusCode < 200 || res.statusCode >= 300) {
return reject(new Error('statusCode=' + res.statusCode));
}
var body = [];
res.on('data', function(chunk) {
body.push(chunk);
});
res.on('end', function() {
resolve(Buffer.concat(body).toString());
});
});
req.on('error', (e) => {
reject(e.message);
});
req.end();
});
}
exports.handler = async (event) => {
try {
const configData = await getConfiguration(AppConfigApplication, AppConfigEnvironment, AppConfigConfiguration);
const parsedConfigData = JSON.parse(configData);
console.log(parsedConfigData);
if(parsedConfigData.newProductRolloutFlag && parsedConfigData.newProductRolloutStates.includes("IL")) {
console.log("Running newProduct feature");
/*
NEW PRODUCT ROLLOUT IMPLEMENTATION
*/
}
} catch (err) {
console.error(err);
return err;
}
};
Приведенный выше пример демонстрирует отделение данных конфигурации от исходного кода, а также то, как Lambda немедленно подхватывает изменения данных конфигурации из AWS AppConfig.
Изображение Gino Crescoli с Pixabay