Imansible eseguire AWS CLI da CRON (credenziali)

Cercando di eseguire un semplice script di backup AWS CLI. Loop attraverso le righe in un file di inclusione, support questi routes fino a S3 e distribuisce l'output in un file di registro. Quando eseguo questo command direttamente, viene eseguito senza alcun errore. Quando l'ho eseguito tramite CRON, ho trovato un errore "Imansible individuare credenziali" nel mio registro di output.

Lo script shell:

  • come inoltrare dominio godaddy a ec2 load balancer
  • Come posso monitorare la spesa giornaliera su AWS?
  • Come posso avviare una shell all'interno di una prigione su FreeBSD?
  • Avviare automaticamente un'istanza ECE AWS dalla richiesta di networking (wake-on-LAN)
  • Trova i file e tar.gz l'elenco risultante
  • Come parallelizzare il for loop mentre scp i file?
  • AWS_CONFIG_FILE="~/.aws/config" while read p; do /usr/local/bin/aws s3 cp $p s3://PATH/TO/BUCKET --recursive >> /PATH/TO/LOG 2>&1 done </PATH/TO/INCLUDE/include.txt 

    Ho aggiunto solo la row al file di configuration dopo che ho iniziato a vedere l'errore, pensando che questo potrebbe risolvere il problema (anche se sono abbastanza sicuro che è where AWS viene visualizzato per impostazione predefinita).

    Lo script Shell è in esecuzione come root. Posso vedere il file di configuration AWS nella posizione specificata. E tutto mi sembra buono (come ho detto, va benissimo fuori dal CRON).

    7 Solutions collect form web for “Imansible eseguire AWS CLI da CRON (credenziali)”

    Se funziona quando si esegue direttamente, ma non da cron, probabilmente qualcosa di diverso nell'ambiente. È ansible salvare intertriggersmente l'ambiente facendo

     set | sort > env.interactive 

    E fai la stessa cosa nel tuo script

     set | sort > /tmp/env.cron 

    E poi diff /tmp/env.cron env.interactive e vedere cosa import. Le cose come PATH sono i colpevoli più probabili.

    Quando si esegue un process da crontab, la variabile di ambiente $HOME è /

    Il client Amazon cerca uno

     ~/.aws/config 

    o

     ~/.aws/credentials 

    Se $HOME = / , allora il client non troverà questi file

    Per farlo funzionare, aggiorna lo script in modo che esport una directory home reale per $HOME

     export HOME=/root 

    e quindi mettere in file di configuration o credenziali

     /root/.aws/ 

    Ho potuto risolvere questo problema attraverso:

     export AWS_CONFIG_FILE="/root/.aws/config" export AWS_ACCESS_KEY_ID=XXXX export AWS_SECRET_ACCESS_KEY=YYYY 

    I binari dello strumento cli cli di aws sono installati in /usr/local/bin/aws .

    L'errore che ho avuto è che l'utente cron non poteva accedere a /usr/local/bin/aws durante l'esecuzione; può accedere solo /usr/bin/

    Quello che ho fatto è stato creare un collegamento in /usr/bin per gli aws con il command sotto.

     root@gateway:~# ln -s /usr/local/bin/aws /usr/bin/aws 

    Ho anche aggiunto alcuni cambiamenti nel mio script; ecco una function di esempio:

     starter () { echo " ================================================== Starting Instance ================================================== " /usr/bin/aws ec2 start-instances --instance-ids $instance --region us-east-1 sleep 30 echo "Assigning IP Address " /usr/bin/aws ec2 associate-address --instance-id $instance --region us-east-1 --public-ip XX.XX.XX.XX } 

    E la voce cron:

     30 5 * * * sh /usr/local/cron/magentocron.sh 

    Questo metodo ha funzionato per me.

    So che non è la soluzione perfetta ma che ha funzionato per me:

     export HOME=/home/user export AWS_CONFIG_FILE="/home/user/.aws/config" export AWS_ACCESS_KEY_ID=XXX export AWS_SECRET_ACCESS_KEY=XXX 

    Inserisci questo codice prima che la linea di command venga eseguita in crontab -e

     SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

    Solo per aggiungere un valore aggiunto che stavo avendo problemi con la nuova versione di bash durante l'utilizzo awscli strumento awscli installato tramite PIP ho scoperto che nulla functionrà con questo strumento con nuove versioni bash.

    Sono stato in grado di risolvere installando aws-apitools-ec2 questo può essere installato da

     yum install -y aws-apitools-ec2 

    Sto legando la sua guida per ulteriori riferimenti.

    http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-clt.pdf

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.