파일에서 환경 변수를 빠르게 바꾸는 방법



자격 증명 또는 기타 민감한 값을 구성 파일(예: Kubernetes yaml 파일)에 저장하는 것이 좋지 않다는 것을 알고 있지만 복잡한 문자열 대체를 수행하거나 사용자 정의 Python 스크립트를 작성하지 않고도 값을 쉽게 대체할 수 있는 방법은 무엇입니까?

자격 증명과 구성을 저장하는 데 사용하는 프로젝트에 대한 개인 환경 변수 파일이 있는 경우가 많습니다. 프로젝트에서 작업하기 전에 해당 구성 파일을 셸 세션에 넣습니다. 그러나 이러한 파일은 git 리포지토리에 저장하거나 동료 또는 봇과 공유할 수 없습니다. 심지어 리포지토리에 변경해야 하는 파일이 있는 경우도 있는데, 이는 실수로 이러한 파일을 커밋하기 쉽기 때문에 위험합니다.

결과적으로 이미 좋은 솔루션이 있으며 이를 envsubst라고 합니다. envsubst를 사용하여 구성 파일 내의 환경 변수 자리 표시자를 대체할 수 있으며 Kubernetes의 kubectl과 같은 다른 명령으로 파이프할 수도 있습니다.

envsubst < config.txt


EnvSubst



envsubstgettext Unix용 국제화(i18n) 및 지역화(l10n) 프로젝트의 일부입니다. 사용법은 매우 쉽고 이것이 설명되기를 바랍니다.

Some systems have gettext with envsubst preinstalled. However, if it is missing, you can install it using a package manager. For macOS you can use homebrew:

brew install gettext

Learn more about homebrew in my article about setting about your development machine in one script



예시



누군가에게 주거나 봇과 함께 사용하려는 기존 구성 파일이 있다고 가정해 보겠습니다. 이상적으로는 해당 파일에 자격 증명을 포함하고 싶지 않습니다.

# my configuration file
server: https://gitlab.com/skofgar
username: foo_user
password: mymonkey


1. 샘플 구성 파일 생성



우리는 그 정보를 git 저장소로 확인하고 싶지도 않고, 주변에 두거나 이런 사람에게 보내는 것도 원하지 않지만 어떻게 개선할 수 있습니까? 파일에서 원하지 않는 정보를 환경 변수로 바꾸겠습니다.

server: $SERVER_URL
username: $USER_NAME
password: $USER_PASSWORD


2. 환경 변수 구성



그런 다음 다음을 사용하여 셸 세션에서 환경 변수를 정의하여 이러한 환경 변수를 정의합니다.

export SERVER_URL=https://gitlab.com/skofgar
export USER_NAME=foo_user
export USER_PASSWORD=mymonkey


또는 파일(예: .env)에 저장한 다음 소스 .env를 사용하여 현재 셸 세션에 로드합니다.

Make sure to use export, otherwise your variables are considered shell variables and might not be accessible to envsubst

Read more here: https://ostechnix.com/difference-between-defining-bash-variables-with-and-without-export/



3. 교체



실제 대체를 실행하려면 다음 명령을 수행하십시오.

> envsubst < config.txt  
server: https://gitlab.com/skofgar
username: foo_user
password: mymonkey


대체 항목을 새 파일에 쓰는 것도 가능합니다.

> envsubst < config.txt > confidential_config.txt


Kubernetes 및 기타 도구로 파이프 대체



출력을 less 또는 kubectl for Kubernetes(k8s)와 같은 다른 명령으로 파이프할 수 있습니다.

# pipe into less
> envsubst < config.txt | less

# pipe a deployment "deploy.yml" into kubectl apply
> envsubst < deploy.yml | kubectl apply -f -


결론



이는 CI/CD(지속적인 통합 및 지속적인 배포) 파이프라인을 개선하거나 자체 워크플로를 단순화하는 좋은 방법입니다. 일시적으로 필요한 자격 증명, git 저장소에 체크인하고 싶지 않은 자격 증명, CI 파이프라인도 액세스해야 하는 자격 증명을 교체해야 하는 프로젝트에 이 기능을 사용합니다.

이 솔루션에 대한 의견과 대체 접근 방식을 접한 경우 의견을 알려주세요.

다음은 결합된 모든 단계에 대한 요약입니다.

# print content of configuration file
> cat config.txt
server: $SERVER_URL
username: $USER_NAME
password: $USER_PASSWORD

# load environment variables
> source .env

# replace environment variables in file content
> envsubst < config.txt
server: https://gitlab.com/skofgar
username: foo_user
password: mymonkey

# replace environment variables and write to new file
> envsubst < config.txt > confidential_config.txt

# pipe into less
> envsubst < config.txt | less

# pipe a deployment "deploy.yml" into kubectl apply
> envsubst < deploy.yml | kubectl apply -f -


출처



이 기사에 사용한 일부 소스는 다음과 같습니다.
  • Kubernetes용 envsubst: https://serverfault.com/a/843883
  • gettext 설명서: https://www.gnu.org/software/gettext/

  • Skofgar’s Blog에 원래 게시되었습니다.

    좋은 웹페이지 즐겨찾기