awscli não pode ver variáveis de ambiente, mas apenas do cron?

0

Estou configurando um contêiner docker que requer um cronjob para fazer um backup usando awscli ( autenticado via variáveis de ambiente ).

Como o cron não vê minhas variáveis do docker, estou imprimindo-as em um arquivo e obtendo-as antes de executar o comando aws .

Eu tenho confirmado que o variáveis são definidas a partir do cron ainda awscli não as vê.

Aqui está um projeto mínimo que demonstra o problema.

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/*

crontab:

# 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

Acabei recebendo de volta Unable to locate credentials. You can configure credentials by running "aws configure" . No entanto, se eu executar o mesmo comando dentro do contêiner docker, recebo uma lista de blocos.

Este é o arquivo .env que estou passando para a janela de encaixe.

.env:

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

Alguém tem uma idéia de por que awscli não pode ver as variáveis de ambiente, mas apenas dentro do cron?

    
por Philip Kirkbride 14.10.2017 / 16:19

1 resposta

3

As variáveis de ambiente podem ser definidas diretamente no crontab(5) ; isso evitará o custo e a complicação das etapas adicionais de execução e origem do shell. Ou seja, seu arquivo hello-cron deveria conter algo como

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
    
por 14.10.2017 / 16:36