envsubstで環境変数をテンプレートに展開する

Kubernetes The Hard Way を進めていたら、見知らぬ envsubstコマンドに遭遇した。

$ export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
$ envsubst < configs/encryption-config.yaml \
  > encryption-config.yaml

これは環境変数を展開して埋め込むコマンド。manによると substitutes environment variables in shell format stringsと説明がある。 上記の例ではconfigs/encryption-cnofig.yaml環境変数 ENCRYPTION_KEY を参照しており、これを環境変数の値で埋めて encryption-config.yamlとして生成し直している。 このようにシェルで簡単にテンプレートの仕組みが実現できる。

ちなみに、envsubstはDebian系では gettext-baseパッケージに含まれており、大抵の場合は最初からインストールされている。

$ dpkg -S /usr/bin/envsubst 
gettext-base: /usr/bin/envsubst

packages.debian.org

参考:

qiita.com