AWS – Отделить конфигурацию от кода

Требование

  • Отделить конфигурацию от кода приложения.
  • Код приложения должен немедленно подхватывать любые изменения в конфигурационных данных.

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
Это двухшаговый процесс:
Не вдаваясь в подробные детали, на высоком уровне…

  1. Установите конфигурационную сессию с помощью API StartConfigurationSession – это возвращает InitialConfigurationToken, который будет передан в нижеприведенный API в первый раз.
  2. 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

Оцените статью
Procodings.ru
Добавить комментарий