gitにコミットしたくなかっただけの表記のとおりの備忘録です。
envsubstの単体動作はこんなかんじ。
# vi hoge.txt
# cat hoge.txt
var1=${aaaa}
# export aaaa=hoge ;envsubst < hoge.txt > fuga.txt
# cat fuga.txt
var1=hoge
こんなかんじにfluentdで行先を増やしたかったとして、
https://github.com/DataDog/fluent-plugin-datadog
+ <store>
+ @type datadog
+ @id awesome_agent
+ api_key '${DATADOG_APIKEY}'
+ include_tag_key true
+ tag_key 'tag'
+ dd_source 'ecs'
+ dd_tags 'logshipper:fluentd,ecstask:ecs-td-web-prod'
+ dd_sourcecategory 'ecs-td-web-prod'
+ host 'intake.logs.datadoghq.com'
+ ssl_port '10516'
+ </store>
APIキーっぽい変数はdocker runにあたるECSでいうとタスク定義の環境変数からエントリポイントかなにかで読みこんで反映させたいとする(docker buildにあたるCodebuildのbuildspec.ymlとかにかくビルド時だとコンテナに埋め込まれるのがアレな気がする)
とすると、fluentdコンテナのエントリポイントにあたるファイルがDockerfileでみると普通にかかれてたので(既存コンテナがあればdocker inspect container-idでもみられる)
# tail -3 Dockerfile
ENTRYPOINT ["/bin/entrypoint.sh"]
CMD exec fluentd -c /fluentd/etc/${FLUENTD_CONF} -p /fluentd/plugins $FLUENTD_OPT
こんなかんじにエントリポイントのスクリプトを修正するとよさそう
# cat entrypoint.sh
#!/usr/bin/dumb-init /bin/sh
export DATADOG_APIKEY=$DATADOG_APIKEY
envsubst < /tmp/conf/fluent.conf > /fluentd/etc/fluent.conf
uid=${FLUENT_UID:-1000}
# check if a old fluent user exists and delete it
cat /etc/passwd | grep fluent
if [ $? -eq 0 ]; then
deluser fluent
fi
# (re)add the fluent user with $FLUENT_UID
adduser -D -g '' -u ${uid} -h /home/fluent fluent
# chown home and data folder
chown -R fluent /home/fluent
chown -R fluent /fluentd
exec su-exec fluent "$@"
ちなみに、このときのenvsubst の位置が大事で、chownしたあとにすると権限エラーでfluentdコンテナが起動しなくなりました。
あと、今回のfluentdコンテナのソースイメージがalpineなのでapkでgettextを入れとかないと(Dockerfileに追記しビルドしなおさないと)envsubstが居ないかんじでした。
RUN apk --no-cache add libintl && \
apk --no-cache add --virtual .gettext gettext && \
cp /usr/bin/envsubst /usr/local/bin/envsubst && \
apk del .gettext
で、exportしてる変数をどこで指定するかというと、ローカルのテストでdockerコマンドつかってるならrun打つときに-e か--env-fileで指定、composeならymlにかけばよくて、ECSのタスク定義だったらコンテナ定義の環境変数のところにValueでじかにかくかValueFromでSystemManagerのSecretかなんかにいれたりしてそこからIAMロールの権限適切に定義してとってくる、という話でよさそうでした。
実際にさしかわったかどうかみるには以下のとおり。
(あとこの場合はログがとんできたかどうかなど)
# docker ps
# docker exec -it e12665df9414 grep api /fluentd/etc/fluent.conf
api_key 58e401*******************2b67218
以上。