awscli 无法看到环境变量,只能从 cron 中看到?

awscli 无法看到环境变量,只能从 cron 中看到?

我正在设置一个 docker 容器,它需要一个 cronjob 来使用awscli通过环境变量进行身份验证)。

由于 cron 看不到我的 docker 变量,我将它们打印到文件中并在运行命令之前获取它们aws

我有确认的变量是从 cron 设置的,但还awscli没有看到它们。

这是一个演示该问题的最小项目。

Dockerfile:

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)环境变量可以直接在;中设置这将避免额外的 shell 执行和源步骤的成本和复杂性。也就是说,您的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

相关内容