기능 플래그 탐색 AWS AppConfig 사용

여러분, 안녕하세요!

이번 주에는 AWS AppConfig, 특히 Feature Flag에 대해 배웠습니다. Trunk Based Development 을 사용하기 때문에 내 애플리케이션에 대한 기능 플래그가 필요합니다. 계속합시다.

AWS AppConfig 설정



이를 사용하여 AWS AppConfig를 설정할 수 있습니다official guide. 가이드의 6단계를 따라야 합니다.
  • AWS AppConfig 애플리케이션 생성
  • 환경 생성
  • 구성 프로필 및 기능 플래그 생성
  • 배포 전략 생성
  • 구성 배포 중
  • 구성 검색 중

  • 이 기사에서는 6단계와 코드에 중점을 둘 것입니다.

    AWS AppConfig에서 기능 플래그 검색



    기능 플래그를 검색하기 전에 적절한 액세스 권한이 있는 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY가 필요합니다. 기능 플래그를 호출하고 AWS SDK for 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;
    

    코드 설명: 내 기능 플래그를 가져오려면 GetLatestConfiguration API를 호출해야 합니다. 해당 API를 호출하기 전에 구성 세션 토큰을 가져와야 합니다(getToken 사용). 내 코드를 확인하고 싶다면. Github의 코드와 라이브러리를 NPM에 게시했습니다.


    베르비안톨레오 / 기능 플래그


    AWS AppConfig를 사용하여 기능 플래그 탐색





    기능 플래그


    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. Setup Environment
    2. Modify demo/index.ts with your flag.
    3. Run npm install or yarn
    4. Run yarn dev or 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

    Note: Please don't use this for production. This library is still in heavy development and experimental. I want to improve this library before becoming production-ready.

    내 도서관에 전화하는 방법?

    • Promise then/catch
    import featureFlag from '@berviantoleo/feature-flag';
    
    featureFlag('try_feature_flag').then((result) => {
      console.log(result);
    });
    

    async/await 방식도 사용할 수 있습니다.
  • 예제 출력



  • Welcome to contribute to my small library/project. :) If you have any inputs, feel free to add them here too.



    무엇 향후 계획?



    .NET용으로 유사한 라이브러리/프로젝트를 만들 예정입니다. 계속 지켜봐주세요!



    고맙습니다




    출처unsplash

    좋은 웹페이지 즐겨찾기