awscliはcronでのみ環境変数を見ることができますか?

awscliはcronでのみ環境変数を見ることができますか?

cronjobを使用するDockerコンテナを設定していますawscli環境変数による認証)。

cronは私のdocker変数を見ることができないので、コマンドを実行する前にファイルに印刷してインポートしますaws

私は持っています確認済み変数はcronで設定されていますが、awscliまだ見たことがありません。

以下は、問題を示す最小のプロジェクトです。

ドッカーファイル:

FROM debian:jessie

# Install aws and cron
RUN apt-get -yqq update
RUN apt-get install -yqq awscli cron rsyslog

# Create cron job
ADD crontab /etc/cron.d/hello-cron
RUN chmod 0644 /etc/cron.d/hello-cron

# Output environment variables to file
# Then start cron and watch log
CMD printenv > /env && cron && service rsyslog start && tail -F /var/log/*

予約されたもの:

# Demonstrates that cron can see variables
*/2 * * * * root /usr/bin/env bash -c '. /env && echo $AWS_DEFAULT_REGION' >> /test1 2>&1

# Attempt to list s3 buckets knowing environment variables are set
*/2 * * * * root /usr/bin/env bash -c '. /env && aws s3 ls' >> /test2 2>&1

私は結局戻ってきましたUnable to locate credentials. You can configure credentials by running "aws configure"。ただし、Dockerコンテナ内で同じコマンドを実行すると、バケットのリストが表示されます。

これは.env私がdockerに渡すファイルです。

.env:

## AWS SETTINGS
AWS_ACCESS_KEY_ID=(key removed)
AWS_SECRET_ACCESS_KEY=(secret removed)
AWS_DEFAULT_REGION=us-west-2

awscli環境変数を見ることができず、cron内でしか見えない理由を知っている人はいますか?

ベストアンサー1

crontab(5)環境変数は で直接設定できます。これにより、追加のシェル実行とソースステップのコストと複雑さを回避できます。つまり、hello-cronファイルには次の内容が含まれます。

AWS_ACCESS_KEY_ID=(key removed)
AWS_SECRET_ACCESS_KEY=(secret removed)
AWS_DEFAULT_REGION=us-west-2

*/2 * * * * root echo $AWS_DEFAULT_REGION >> /test1 2>&1
*/2 * * * * root aws s3 ls >> /test2 2>&1

おすすめ記事