12

Ho installato l'interfaccia della riga di comando di AWS sul mio Windows 7, e ha funzionato immediatamente quando ho richiamato i comandi da una shell DOS.Come far funzionare l'interfaccia della riga di comando di AWS in cygwin

Ma il DOS, il linguaggio peggiore mai inventato, è orribile per qualsiasi script serio. Quindi, vorrei usare la CLI di AWS da bash via cygwin.

Nel mio caso, la CLI AWS installata è la versione di Windows. In linea di principio, questo non dovrebbe essere un problema perché i comandi di Windows sono eseguibili da cygwin. (cygwin includes your Windows environmental variables, come PATH, nel proprio ambiente.)

Purtroppo, quando ho cercato prima di eseguire un comando di AWS CLI da Cygwin/bash, ho ottenuto un errore:

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

Questo errore è probabile perché la CLI AWS sta cercando nella directory errata per il file credentials. Su Windows, si aspetta che il file sia in %UserProfile%.aws e in unix in ~/.aws.

Un problema è che nella mia home directory ho creato un nuovo file chiamato config_credentials che contiene un'unione dei contenuti dei file di quella directory config e credentials. Ho quindi creato un nuovo sistema di Windows env var denominato AWS_CONFIG_FILE il cui valore è il percorso per config_credentials. Successo: i comandi AWS CLI emessi da Cygwin ora funzionano.

Mi chiedo se esiste una soluzione migliore?

Sono curioso di sapere perché AWS CLI inizialmente non è riuscito a cercare nella directory home corretta per i file config e credentials. Mi chiedo anche se ci sia un modo per correggerlo (questo eliminerebbe la necessità per l'env var AWS_CONFIG_FILE).

+0

Sei interessato a PowerShell come alternativa? AWS ha creato una CLI nativa per PS: http://aws.amazon.com/powershell/ –

+1

Solo come ultima risorsa. La mia azienda vuole limitare il numero di lingue che utilizziamo (continuità di manutenzione è un problema), e bash è usato in diversi posti (specialmente sui server) mentre PowerShell non è mai stato utilizzato. Ci dovrebbe essere un caso d'uso davvero avvincente per giustificare una nuova lingua. – HaroldFinch

+0

Ah sì, DOS, quella lingua ben nota. –

risposta

21

Ho avuto lo stesso problema. Ho risolto il problema installando una nuova copia di AWSCLI all'interno di Cygwin. Innanzitutto è necessario installare il "curl" e "python" pacchetti Cygwin, è possibile installare AWSCLI come segue:

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

se si sta eseguendo bash, e hai già eseguito la riga di comando di Windows AWS, è necessario cancellare il percorso cache come segue:

$ hash -d aws 

"AWS --version" sarà quindi simile a questa:

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

in contrasto con l'uscita di linea di comando di Windows, che è simile t O questo:

aws-cli/1.8.1 Python/2.7.9 Windows/8 

sono ora in grado di fare "AWS configurano" sotto Cygwin, e tutto funziona come dovrebbe.

+0

Meraviglioso! Grazie mille. Funziona perfettamente. – DaveS

+1

Ha funzionato, tuttavia ho dovuto usare la copia di Python installata in Cygwin, anziché quella tramite il programma di installazione di Windows MSI. –

+0

Dove si installa? Devo avere un brutto percorso, anche se non è possibile trovare "aws" per installare pip. –

1

Ho usato aws configure dalla finestra cmd di DOS per creare i file cfg (config e credenziali) e li ho testati con un cmd di esempio aws (nella finestra DOS). Quindi ho copiato la cartella Users \ .aws per individuare dove cygwin pensa che le cartelle home dell'utente siano (nel mio caso c: \ cygwin64 \ home \). Ho quindi utilizzato TextPad per convertire le terminazioni di riga (utilizzare file> save-as; selezionare unix unix, assicurati che i file non vengano rinominati x.txt). Ora funziona.

5

Dopo un sacco di tempo trascorso su questo, ho trovato una soluzione che funziona.

Il problema principale è che Cygwin non è stato installato con python e non sa dove trovare la versione di Windows Anaconda esistente sul computer. Questo può essere verificato eseguendo quale python da cygwin - non è stato possibile trovare dove viene salvato python. Si noti che questo può essere fonte di confusione perché l'esecuzione di pip install awscli probabilmente non genera un messaggio di errore. Cygwin installa in realtà awscli nell'installazione Anaconda di Python di Windows (trovo questo strano dato che non abbiamo eseguito conda install awscli).

TUTTAVIA, invece di provare a puntare cygwin alla versione già installata di Anaconda python sulla tua macchina, ti farà risparmiare un sacco di mal di testa semplicemente installando un'istanza di python specifica per cygwin. I passaggi per farlo sono documentati qui: 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.pypython get-pip.pypip install awscli

... Si noti, tuttavia, che il primo comando pip uninstall awscli "riattaccato" per me. Quindi basta scappare usando quit() e continuare con gli altri in ordine.

È possibile verificare che tutto ha funzionato se si esegue which python in Cygwin e punta alla versione cygin (cioè/usr/bin/python, al contrario di: /users/.../Anaconda2/).

Inoltre, se vi capita di essere a chiedere questo in collaborazione con guardando il video di installazione per il corso fast.ai (http://course.fast.ai/lessons/aws.html), quindi il passo successivo è CRITICA per gli utenti Windows: quando si scarica tutto il guscio script dalla cartella di installazione di Github (https://github.com/fastai/courses/tree/master/setup), Windows aggiunge automaticamente i terminatori di riga CRLF! Pertanto, in cygwin, eseguire i seguenti comandi per rimuovere questi fine riga:

  1. apt-cyg install dos2unix
  2. dos2unix setup_p2.sh
  3. dos2unix setup_instance.sh
  4. poi finalmente, bash setup_p2.sh

Questo dovrebbe fare il trucco.

+0

Anche seguendo il tutorial fast.ai qui. Per me non è stato d'aiuto all'inizio perché avevo già installato Python 3. 'which python' si presenta correttamente ma' which pip' no - e quello era il mio problema. Ho finito per disinstallare tutte le mie istanze di python (tranne anaconda) e cancellare la cartella con la cache del pacchetto nel mio disco C (la cartella python). Successivamente sono riuscito a eseguire get-pip, verificare che lo stessimo chiamando e infine installare awscli. Che mal di testa! – KTF