awscli는 cron에서만 환경 변수를 볼 수 있습니까?

awscli는 cron에서만 환경 변수를 볼 수 있습니까?

cronjob을 사용해야 하는 도커 컨테이너를 설정하고 있습니다 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

관련 정보