Привет всем!
На этой неделе я узнал о AWS AppConfig, особенно о Feature Flag. Мне нужны флаги возможностей для моих приложений, поскольку я использую Trunk Based Development. Давайте двигаться дальше.
Настройка AWS AppConfig
Вы можете настроить свой AWS AppConfig, используя это официальное руководство. Вам необходимо выполнить 6 шагов из этого руководства:
- Создайте приложение AWS AppConfig
- Создать среду
- Создать профили конфигурации и флаги функций
- Создать стратегию развертывания
- Развертывание конфигурации
- Получение конфигурации
В этой статье я сосредоточусь на шаге 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=""
Как попробовать?
- Настройте окружение
- Измените
demo/index.ts
с вашим флагом. - Запустите
npm install
илиyarn
. - Запустите
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
…
Примечание: Пожалуйста, не используйте это для производства. Эта библиотека все еще находится в тяжелой стадии разработки и является экспериментальной. Я хочу улучшить эту библиотеку, прежде чем она станет готовой к производству.
Как вызвать мою библиотеку?
- Обещание then/catch
import featureFlag from '@berviantoleo/feature-flag';
featureFlag('try_feature_flag').then((result) => {
console.log(result);
});
Вы также можете использовать подход async
/await
.
- Пример вывода
Добро пожаловать в мою небольшую библиотеку/проект 🙂 Если у вас есть какие-либо идеи, не стесняйтесь добавить их сюда.
Что дальше?
Я собираюсь создать подобную библиотеку/проект для .NET. Так что следите за новостями!
Спасибо