36 votes

Impossible d'exécuter AWS CLI à partir de CRON (certificats)

Essayer d'exécuter un script de sauvegarde AWS CLI simple. Il boucle à travers les lignes dans un fichier d'inclusion, sauvegarde ces chemins vers S3 et enregistre la sortie dans un fichier journal. Lorsque j'exécute cette commande directement, elle s'exécute sans erreur. Lorsque je l'exécute via CRON, j'obtiens une erreur "Impossible de localiser les informations d'identification" dans mon fichier journal de sortie.

Le script shell :

AWS_CONFIG_FILE="~/.aws/config"

while read p; do
 /usr/local/bin/aws s3 cp $p s3://CHEMIN/VERS/BUCKET --recursive >> /CHEMIN/VERS/LOG 2>&1
done 

`

J'ai ajouté la ligne au fichier de configuration après avoir commencé à voir l'erreur, pensant que cela pourrait la corriger (même si je suis assez sûr que c'est là où AWS regarde par défaut).

Le script shell s'exécute en tant que root. Je peux voir le fichier de configuration AWS à l'emplacement spécifié. Et tout me semble bon (comme je l'ai dit, cela fonctionne bien en dehors de CRON).

`

0voto

ggg123 Points 13

Pour moi, cela a fonctionné :

#!/bin/bash

HOME=/home/ubuntu
AWS_CONFIG_FILE="/home/ubuntu/.aws/config"

aws ec2 describe-instances #ou toute autre commande que vous devez utiliser.

L'utilisateur par défaut dans les instances EC2 d'aujourd'hui est ubuntu, et le dossier racine est le dossier personnel de cet utilisateur. C'est là où se trouve également le aws cli.

0voto

user1859675 Points 101

Pas le meilleur, mais je devais fournir la configuration directement dans mon script shell/bash avant les commandes du client AWS. comme:

#!/bin/bash

export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export AWS_DEFAULT_REGION=
aws s3 cp ....

0voto

ParampalP Points 113

En supposant que vous utilisez Ubuntu et que vous essayez d'ajouter une tâche cron pour l'utilisateur root.

  1. Ajoutez ceci en haut de votre script shell export HOME=/root
  2. Assurez-vous que lorsque vous utilisez une commande aws dans votre script, vous utilisez le chemin complet, c'est-à-dire /usr/local/bin/aws s3 cp .
  3. sudo mkdir /root/.aws
  4. sudo cp ~/.aws/credentials /root/.aws/

0voto

Tailor Devendra Points 151

Si vous avez attaché un rôle IAM pour le rôle de tâche ECS Fargate, alors cette solution fonctionnera

  1. Ajoutez la ligne suivante dans entrypoint.sh declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env

  2. Ajoutez la ligne suivante dans crontab ou le fichier cron SHELL=/bin/bash
    BASH_ENV=/container.env

Cela a fonctionné pour moi.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X