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


0

cronjob이 awscli( 환경 변수를 통해 인증 됨)을 사용하여 백업을 수행 해야하는 도커 컨테이너를 설정하고 있습니다.

cron에 도커 변수가 표시되지 않으므로 aws명령을 실행하기 전에 파일에 인쇄하고 소싱합니다 .

나는 한 확인 변수가 아직 크론에서 설정되어 있는지 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". 그러나 도커 컨테이너 내에서 동일한 명령을 실행하면 버킷 목록이 다시 나타납니다.

이것은 .envdocker에 전달 하는 파일입니다.

.env :

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

awscli환경 변수를 볼 수 없지만 cron 내부에서만 볼 수 있는지에 대한 아이디어가 있습니까?

답변:


3

환경 변수는 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

awscli가 aws 역할을 사용하는 인스턴스를 통해 권한을 가질 때 이것을 사용하는 방법을 알고 있습니까?
holmberd,

@holmberd는 전혀 AWS를 사용하지 않았으므로 AWS의 역할이 무엇을 허용하는지 모릅니다
thrig

역할을 사용하면 서버 인스턴스에 대한 사용자 지정 권한을 설정하여 실제 인스턴스에 AWS 자격 증명을 저장할 필요가 없으며 모든 역할이 역할에 의해 처리됩니다. 내 문제에 대한 나의 가정이 잘못되었다는 것이 밝혀졌습니다. awscli의 역할은 cronjob에서 완벽하게 실행됩니다.
holmberd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.