Исследование возможности использования флага AWS AppConfig

Привет всем!

На этой неделе я узнал о AWS AppConfig, особенно о Feature Flag. Мне нужны флаги возможностей для моих приложений, поскольку я использую Trunk Based Development. Давайте двигаться дальше.

Настройка AWS AppConfig

Вы можете настроить свой AWS AppConfig, используя это официальное руководство. Вам необходимо выполнить 6 шагов из этого руководства:

  1. Создайте приложение AWS AppConfig
  2. Создать среду
  3. Создать профили конфигурации и флаги функций
  4. Создать стратегию развертывания
  5. Развертывание конфигурации
  6. Получение конфигурации

В этой статье я сосредоточусь на шаге 6 и коде.

Извлечение флага функции из AWS AppConfig

Перед получением Feature Flag вам понадобится AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY с соответствующим доступом. Я создал «маленькую библиотеку» для вызова флага функции и использования AWS SDK для Javascript.

import {
  AppConfigDataClient,
  BadRequestException,
  GetLatestConfigurationCommand,
  StartConfigurationSessionCommand,
} from "@aws-sdk/client-appconfigdata";

const client = new AppConfigDataClient({});
let existingToken: string;

const getToken = async (): Promise<string> => {
  const getSession = new StartConfigurationSessionCommand({
    ApplicationIdentifier: process.env.APP_CONFIG_APP_IDENTIFIER,
    ConfigurationProfileIdentifier:
      process.env.APP_CONFIG_CONFIG_PROFILE_IDENTIFIER,
    EnvironmentIdentifier: process.env.APP_CONFIG_ENVIRONMENT_IDENTIFIER,
  });
  const sessionToken = await client.send(getSession);
  return sessionToken.InitialConfigurationToken || "";
};

const featureFlag = async (flag: string): Promise<boolean> => {
  if (!existingToken) {
    existingToken = await getToken();
    console.log(existingToken);
  }
  try {
    const command = new GetLatestConfigurationCommand({
      ConfigurationToken: existingToken,
    });
    const response = await client.send(command);
    let flags: any = {};
    if (response.Configuration) {
      let str = "";
      for (let i = 0; i < response.Configuration.length; i++) {
        str += String.fromCharCode(response.Configuration[i]);
      }
      const allFlag = JSON.parse(str);
      console.log(allFlag);
      flags = Object.assign({}, allFlag);
    }
    return Boolean(flags[flag]?.enabled);
  } catch (err) {
    if (err instanceof BadRequestException) {
      existingToken = await getToken();
      console.log(existingToken);
      // recall
      return featureFlag(flag);
    } else {
      throw err;
    }
  }
};

export default featureFlag;
Вход в полноэкранный режим Выход из полноэкранного режима

Объяснение кода: Для получения флага функции мне нужно вызвать API GetLatestConfiguration. Перед вызовом этого API мне нужно получить токен сессии конфигурации (используйте getToken). Если вы хотите проверить мой код. Я опубликовал код на Github и библиотеку на NPM.

berviantoleo / feature-flag

Изучение Feature Flag с помощью AWS AppConfig

feature-flag

Исследуйте Feature Flag с помощью AWS AppConfig

Переменные окружения

AWS_REGION="ap-southeast-1"
AWS_ACCESS_KEY_ID=""
AWS_SECRET_ACCESS_KEY=""
APP_CONFIG_APP_IDENTIFIER=""
APP_CONFIG_CONFIG_PROFILE_IDENTIFIER=""
APP_CONFIG_ENVIRONMENT_IDENTIFIER=""
Вход в полноэкранный режим Выход из полноэкранного режима

Как попробовать?

  1. Настройте окружение
  2. Измените demo/index.ts с вашим флагом.
  3. Запустите npm install или yarn.
  4. Запустите yarn dev или npm run dev.

ЛИЦЕНЗИЯ

MIT

MIT License
Copyright (c) 2022 Bervianto Leo Pratama

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED

Вход в полноэкранный режим Выход из полноэкранного режима
Просмотр на GitHub

Примечание: Пожалуйста, не используйте это для производства. Эта библиотека все еще находится в тяжелой стадии разработки и является экспериментальной. Я хочу улучшить эту библиотеку, прежде чем она станет готовой к производству.

Как вызвать мою библиотеку?

  • Обещание then/catch
import featureFlag from '@berviantoleo/feature-flag';

featureFlag('try_feature_flag').then((result) => {
  console.log(result);
});
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы также можете использовать подход async/await.

  • Пример вывода

Добро пожаловать в мою небольшую библиотеку/проект 🙂 Если у вас есть какие-либо идеи, не стесняйтесь добавить их сюда.

Что дальше?

Я собираюсь создать подобную библиотеку/проект для .NET. Так что следите за новостями!

Спасибо

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *