GAE의 앱.yaml의 env로컬 환경에서variabls를 반복적으로 사용하고 싶습니다

7044 단어 GCPNode.jsNodeGAEtech

배경.


GAE에서 정식 공연과 무대 디자인을 활용한 node 앱은 환경별로 코드 변경을 원하지 않기 때문에 앱 코드에서는 환경 변수, 앱을 참조하시기 바랍니다.환경마다 yaml을 준비하고 정의 env_variables 를 설정하며 디버깅할 때 설정합니다.

제본용


runtime: nodejs12
instance_class: F2
env_variables:
  BUCKET_NAME: "staging-gcs-bucket"

정식 공연용


runtime: nodejs12
instance_class: F4
env_variables:
  BUCKET_NAME: "production-gcs-bucket"
같은 거요.

그건 좋은데 곤란해요.


GAE를 디자인할 때 아무 생각도 하지 않기 때문에 매개 변수 지정도 틀리지 않지만 로컬이나 Docker 용기에서 같은 코드를 이동할 때 하나씩export BUCKET_NAME=xxx 닫히는 것이 번거롭다.JSON처럼 피해야 할 매개 변수라면 힘들 거야.

app.yaml과 Staging.그냥 yaml을 사용해요.


힘들기 때문에 프로그램 코드의 첫머리에yaml을 읽어서 환경 변수를 덮어씁니다.

app.js


async function setEnvVariablesFromYaml(filename){
    const jsYaml = require("js-yaml");
    const fs = require("fs").promises;
    const yamlData = await fs.readFile(`${process.cwd()}/${filename}`, 'utf-8');
    const config = jsYaml.safeLoad(yamlData);

    // yamlから環境変数を設定する
    Object.entries(config.env_variables).map((e)=>{
        process.env[e[0]] = e[1];
    });
}

if(process.env["NODE_ENV"] === "local"){
    const filename = process.env["NODE_YAML_FILE"];
    setEnvVariablesFromYaml(filename);
}

런타임


환경 변수를 통해 로컬 실행 플래그와 읽을 파일 이름 전달
export NODE_ENV="local" && NODE_YAML_FILE="staging.yaml"; node app.js
이렇게 하면 직접 사용할 수도 있고env_variables 테스트 코드에 대응하는 예처리 등도 가능하다.솔직함이 좋다.

감상


bash에 export라고 낙서하고 뇌근육을 마구 움직이기 때문에 진작 주의를 기울였으면 좋겠어요.
yaml에 맞추어 bash를 관리하지 않아도 되고, 너무 신경을 쓰지 않아도 좋다.
짐승.다들 아시면 진작 알려주세요...!!!

좋은 웹페이지 즐겨찾기