web-dev-qa-db-fra.com

Comment faire fonctionner l'interface de ligne de commande AWS dans cygwin

J'ai installé l'interface de ligne de commande AWS sur ma boîte Windows 7, et cela a fonctionné immédiatement lorsque j'ai appelé des commandes à partir d'un shell DOS.

Mais DOS, le pire langage jamais inventé, est hideux pour tout script sérieux. Donc, je voudrais utiliser l'AWS CLI de bash via cygwin.

Dans mon cas, l'AWS CLI installée est la version Windows. En principe, cela ne devrait pas poser de problème car les commandes Windows sont exécutables depuis cygwin. ( cygwin inclut vos variables d'environnement Windows , comme PATH, dans son propre environnement.)

Malheureusement, lorsque j'ai essayé d'exécuter une commande AWS CLI pour la première fois depuis cygwin/bash, j'ai reçu une erreur:

$ aws s3 cp code.tgz s3://xyz/
upload failed: .\code.tgz to s3://xyz/code.tgz
Unable to locate credentials

Cette erreur est probablement due au fait que l'AWS CLI recherche dans le mauvais répertoire le fichier credentials. Sous Windows, il s'attend à ce que ce fichier soit dans %UserProfile%.aws et sous unix dans ~/.aws.

Une astuce consiste à créer dans mon répertoire personnel un nouveau fichier nommé config_credentials qui contient une union du contenu des fichiers de ce répertoire config et credentials. J'ai ensuite créé un nouveau système Windows var env nommé AWS_CONFIG_FILE dont la valeur est le chemin d'accès à config_credentials. Succès: les commandes AWS CLI émises par cygwin fonctionnent désormais.

Je me demande s'il y a une meilleure solution?

Je suis curieux de savoir pourquoi AWS CLI n'a pas initialement pu rechercher dans le répertoire de base correct les fichiers config et credentials. Je me demande également s'il existe un moyen de corriger cela (cela éliminerait le besoin de AWS_CONFIG_FILE env var).

21
HaroldFinch

J'ai eu le même problème. Je l'ai contourné en installant une nouvelle copie d'AWSCLI dans Cygwin. Vous devez d'abord installer les packages Cygwin "curl" et "python", puis vous pouvez installer AWSCLI comme suit:

$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ pip install awscli

Si vous exécutez bash et que vous avez déjà exécuté la ligne de commande Windows AWS, vous devez effacer le chemin mis en cache comme suit:

$ hash -d aws

"aws --version" ressemblera alors à ceci:

aws-cli/1.8.1 Python/2.7.10 CYGWIN_NT-10.0/2.2.1(0.289/5/3)

par opposition à la sortie de ligne de commande Windows, qui ressemble à ceci:

aws-cli/1.8.1 Python/2.7.9 Windows/8

Je suis maintenant capable de faire "aws configure" sous Cygwin, et tout fonctionne comme il se doit.

33
Craig Heath

Après beaucoup de temps consacré à cela, j'ai trouvé une solution qui fonctionne.

Le principal problème est que le cygwin n'est pas venu avec python installé et ne sait pas où trouver la version existante d'Anaconda Windows sur votre machine. Cela peut être vérifié en exécutant quel python depuis cygwin - il n'a pas pu trouver où python est enregistré. Notez que cela peut être déroutant car l'exécution de pip install awscli ne génère probablement pas de message d'erreur. Cygwin installe réellement awscli dans l'installation Anaconda de la fenêtre de Python (je trouve cela étrange puisque nous n'avons pas exécuté l'installation de conda awscli).

CEPENDANT, plutôt que d'essayer de pointer cygwin vers la version déjà installée d'Anaconda python sur votre machine, cela vous fera économiser une tonne de maux de tête pour simplement installer une instance de python spécifique à cygwin. Les étapes pour le faire sont documentées ici: http://wiki.fast.ai/index.php/Awscli_in_cygwin )

  1. pip uninstall awscli
  2. wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
  3. install apt-cyg /bin
  4. apt-cyg install python
  5. wget https://bootstrap.pypa.io/get-pip.py
  6. python get-pip.py
  7. pip install awscli

... Notez cependant que la première commande pip uninstall awscli "A raccroché" pour moi. Il suffit donc de s'en échapper en utilisant quit() et de continuer avec les autres dans l'ordre.

Vous pouvez vérifier que tout a fonctionné si vous exécutez which python Dans cygwin et qu'il pointe vers la version cygin (c'est-à-dire/usr/bin/python, par opposition à: /users/.../Anaconda2/).

De plus, si vous posez cette question en même temps que vous regardez la vidéo de configuration du cours fast.ai ( http://course.fast.ai/lessons/aws.html ), alors le suivant l'étape est [~ # ~] critique [~ # ~] pour les utilisateurs de Windows: lorsque vous téléchargez tous les Shell scripts du dossier d'installation de Github ( https://github.com/fastai/courses/tree/master/setup ), Windows ajoute automatiquement les terminateurs de ligne CRLF! Par conséquent, dans cygwin, exécutez les commandes suivantes pour supprimer ces fins de ligne:

  1. apt-cyg install dos2unix
  2. dos2unix setup_p2.sh
  3. dos2unix setup_instance.sh
  4. puis enfin, bash setup_p2.sh

Cela devrait faire l'affaire.

7
Ryan Chase

J'ai utilisé aws configure depuis la fenêtre DOS cmd pour créer les fichiers cfg (config et informations d'identification) et les ai testés avec un exemple aws cmd (dans la fenêtre DOS). Ensuite, j'ai copié le dossier Users\.aws pour repérer où cygwin pense que les dossiers de départ de l'utilisateur sont (dans mon cas c:\cygwin64\home \). J'ai ensuite utilisé TextPad pour convertir les fins de ligne (utilisez fichier> enregistrer sous; sélectionnez les fins de ligne unix; assurez-vous que les fichiers ne sont pas renommés x.txt). Maintenant ça marche.

1
Tom Murphy

Dans mon cas, j'ai dû:

# Run Cygwin64 Terminal by right-clicking on the icon and selecting "Run as Administrator"
pip3.7 install awscli
aws configure

Une fois mes informations d'identification AWS configurées, je pouvais exécuter les commandes awscli sur Cygwin où celui-ci avait été lancé normalement, c'est-à-dire en tant qu'utilisateur non administrateur.

Plus tôt, j'ai tenté les mêmes étapes mais j'ai lancé Cygwin en tant que non-administrateur et l'installation d'awscli via pip n'a pas pris. Je n'ai malheureusement pas enregistré les messages d'erreur.

0
rio197