AWS - 코드에서 구성 분리

요구 사항
  • 애플리케이션 코드에서 구성을 분리합니다.
  • 응용 프로그램 코드는 구성 데이터에 대한 모든 변경 사항을 즉시 선택해야 합니다.

  • AWS 앱 구성
  • AWS Systems Manager 서비스의 기능입니다.
  • AppConfig를 사용하면 구성을 빠르게 배포할 수 있습니다.
  • s3 등의 텍스트/json/파일과 같은 구성 형식을 허용합니다.
  • Tridion을 사용하다가 AWS로 마이그레이션하는 애플리케이션은 Tridion보다 강력한 AWS AppConfig를 사용할 수 있습니다.
  • AWS AppConfig는 Amazon EC2 인스턴스, AWS Lambda, 컨테이너 등에서 호스팅되는 애플리케이션과 함께 사용할 수 있습니다.

  • AWS AppConfig에서 구성 데이터 생성
    link는 AWS AppConfig를 사용하여 구성을 생성하고 배포하는 단계를 단계별로 안내합니다.
    이 블로그를 따라하려면 - 설정하는 동안 아래 설정을 사용하십시오.
  • 자유형 구성 프로파일 유형 사용
  • 애플리케이션 이름: BlogConfig
  • 환경 이름: prod
  • 구성 이름: productRollout

  • 구성 데이터
    위 링크를 따라 아래 JSON 구성 데이터를 AppConfig에 배포합니다.

    {
      "newProductRolloutFlag": true,  
      "newProductRolloutStates": ["IL","CA"]
    }
    


    AppConfig에서 구성 데이터에 액세스하는 방법
    두 가지 방법 - AWS SDK 및 Lambda Extension의 API

    AWS SDK
    2단계 프로세스입니다.
    광범위한 세부 사항에 뛰어들지 않고 높은 수준에서...
  • StartConfigurationSession API를 사용하여 구성 세션을 설정합니다. 그러면 아래 API에 처음으로 전달될 InitialConfigurationToken이 반환됩니다.

  • GetLatestConfiguration API - 후속 호출에서 전달될 NextPollConfigurationToken과 함께 AppConfig의 최신 구성 데이터를 반환합니다.

  • 제 개인적인 선택은 AppConfig Lambda Extension을 사용하는 것입니다. 이것은 성능이 뛰어나고 개발자에게 친숙한 방법입니다.

    AppConfig Lambda 확장 프로그램
    AWS는 AppConfig용 Lambda 확장 기능을 구축했습니다. 다음은 AWS 콘솔 UI에서 AppConfig Lambda 확장 기능을 Lambda 계층으로 추가하는 단계입니다.
    AWS Lambda 서비스로 이동 -> Lambda 계층 추가 -> 계층 선택 -> AWS 계층 -> 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의 이미지

    좋은 웹페이지 즐겨찾기