2017-02-06 6 views
0

Je rencontre un problème avec un dossier dans un compartiment S3, mais je n'arrive pas à le comprendre ... J'utilise le script bash suivant pour garder les 10 versions les plus récentes de notre application dans un seau S3. Chaque fois que nous démarrons la construction, il ne fait que copier les constructions (1 -> 0, 2 -> 1, etc.) et supprime la dernière version dans le dossier 9. Cela fonctionne bien jusqu'à ce que j'obtienne le dossier 9, l'erreur An error occurred (404) when calling the HeadObject operation: Key "iv/9/" does not exist même si le dossier 9 existe réellement.La clé n'existe pas, mais seulement pour un seul dossier

declare -i i=0 

for j in `seq 1 9` 
do 
    echo "Copying build # $j to build # $i" 
    aws s3 mv s3://xvaws-builds/iv/$j/ s3://xvaws-builds/iv/$i/ 
    let i++ 
done 

Je pensais que peut-être le dossier 9 était d'être nommé quelque chose loufoque, avait quelques espaces, etc., mais après l'exécution 'SSFE s3 ls s3: // myaws-builds/iv /' tout semble bon ...

les résultats de la boucle ressemblent:

Copying build # 1 to build # 0 
move: s3://myaws-builds/iv/1/ to s3://myaws-builds/iv/0/ 
Copying build # 2 to build # 1 
move: s3://myaws-builds/iv/2/ to s3://myaws-builds/iv/1/ 
Copying build # 3 to build # 2 
move: s3://myaws-builds/iv/3/ to s3://myaws-builds/iv/2/ 
Copying build # 4 to build # 3 
move: s3://myaws-builds/iv/4/ to s3://myaws-builds/iv/3/ 
Copying build # 5 to build # 4 
move: s3://myaws-builds/iv/5/ to s3://myaws-builds/iv/4/ 
Copying build # 6 to build # 5 
move: s3://myaws-builds/iv/6/ to s3://myaws-builds/iv/5/ 
Copying build # 7 to build # 6 
move: s3://myaws-builds/iv/7/ to s3://myaws-builds/iv/6/ 
Copying build # 8 to build # 7 
move: s3://myaws-builds/iv/8/ to s3://myaws-builds/iv/7/ 
Copying build # 9 to build # 8 
An error occurred (404) when calling the HeadObject operation: Key "iv/9/" does not exist 

les résultats de ls sur ce répertoire retourne:

PRE 0/ PRE 1/ PRE 2/ PRE 3/ PRE 4/ PRE 5/ PRE 6/ PRE 7/ PRE 8/ PRE 9/ 2017-02-06 10:06:51 0 

Des pensées?

+0

Le script me va bien. Le problème doit être sur AWS. – Barmar

+0

Sans lien, mais il n'est pas nécessaire d'utiliser deux variables qui pourraient se désynchroniser. pour ((j = 1; j <= 9; j ++)); do', alors utilisez '$ ((j-1))' où vous utilisez actuellement '$ i'. – chepner

+0

Vous pensiez à utiliser S3 versioning? – jarmod

Répondre

2

S3 ne prend pas en charge les dossiers. Sauf si vous avez créé un pseudo-dossier nommé iv/9/ via la console Web S3 ou quelque chose, alors ce "dossier" ne va pas exister et vous obtiendrez ce message d'erreur. Je vous recommande de vérifier si l'une de ces commandes est en train de faire ce que vous pensez qu'elles font.

Par exemple, si vous avez créé un objet dans S3 avec la iv/9/filename.txt clé, et une autre avec la clé iv/9/filename2.txt, alors vous n'avez pas encore un dossier nommé iv/9/ dans votre seau S3. Ce que vous avez sont deux objets qui peuvent être trouvés si vous filtrez sur le préfixe de clé iv/9/

+0

Ah, cela fait beaucoup de sens ... On dirait que 0-8 ont été créés à travers l'interface utilisateur et 9 a été créé par l'intermédiaire de la CLI. Je les ai tous recréés via la CLI et j'ai utilisé 'sync' pour copier les objets à la place. Merci pour l'aide. – Sathed