it-swarm-pt.tech

Como fazer com que a interface da linha de comando da AWS funcione no cygwin

Instalei a interface da linha de comando da AWS na caixa do Windows 7 e ela funcionou imediatamente quando chamei comandos de um shell do DOS.

Mas o DOS, a pior linguagem já inventada, é hediondo para qualquer script sério. Portanto, eu gostaria de usar a CLI da AWS do bash via cygwin.

No meu caso, a CLI da AWS instalada é a versão do Windows. Em princípio, isso não deve ser um problema, porque os comandos do Windows são executáveis ​​a partir do cygwin. ( cygwin inclui suas variáveis ​​ambientais do Windows , como PATH, em seu próprio ambiente.)

Infelizmente, quando tentei executar um comando da AWS CLI no cygwin/bash, ocorreu um erro:

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

Esse erro provavelmente ocorre porque a CLI da AWS está procurando no diretório errado o arquivo credentials. No Windows, ele espera que esse arquivo esteja em %UserProfile%.aws e em unix em ~/.aws.

Uma solução alternativa é que, no meu diretório pessoal, criei um novo arquivo chamado config_credentials que contém uma união do conteúdo dos arquivos desse diretório config e credentials. Em seguida, criei uma nova var env do sistema Windows chamada AWS_CONFIG_FILE cujo valor é o caminho para config_credentials. Sucesso: os comandos da AWS CLI emitidos pelo cygwin agora funcionam.

Gostaria de saber se existe uma solução melhor?

Estou curioso para saber por que inicialmente a CLI da AWS falhou ao procurar no diretório inicial correto os arquivos config e credentials. Também me pergunto se existe uma maneira de corrigir isso (isso eliminaria a necessidade do AWS_CONFIG_FILE env var).

20
HaroldFinch

Eu tive o mesmo problema. Eu resolvi isso instalando uma nova cópia do AWSCLI no Cygwin. Você primeiro precisa instalar os pacotes Cygwin "curl" e "python" e, em seguida, pode instalar o AWSCLI da seguinte maneira:

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

Se você estiver executando o bash e tiver executado anteriormente a linha de comando do Windows AWS, precisará limpar o caminho em cache da seguinte maneira:

$ hash -d aws

"aws --version" será semelhante a este:

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

em oposição à saída da linha de comando do Windows, semelhante a esta:

aws-cli/1.8.1 Python/2.7.9 Windows/8

Agora eu sou capaz de fazer "aws configure" no Cygwin, e tudo funciona como deveria.

31
Craig Heath

Depois de muito tempo gasto nisso, encontrei uma solução que funciona.

A principal questão é que o cygwin não veio com o python instalado e não sabe onde encontrar a versão existente do Windows Anaconda na sua máquina. Isso pode ser verificado executando o qual python de dentro do cygwin - não foi possível encontrar onde python está salvo. Observe que isso pode ser confuso porque a execução do awscli do pip install provavelmente não gera uma mensagem de erro. O Cygwin na verdade instala o awscli na instalação do Window do Anaconda de Python (acho isso estranho, pois não executamos o conda install awscli).

NO ENTANTO, em vez de tentar apontar o cygwin para a versão já instalada do Anaconda python na sua máquina, você economizará uma tonelada de dor de cabeça ao instalar apenas uma instância específica do cygwin do python. As etapas para isso são documentadas aqui: 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

... Observe, no entanto, que o primeiro comando pip uninstall awscli "Desligou" para mim. Portanto, apenas escape dela usando quit() e continue com os outros em ordem.

Você pode verificar se tudo funcionou se você executar which python No cygwin e ele apontar para a versão do cygin (ou seja,/usr/bin/python, em oposição a: /users/.../Anaconda2/).

Além disso, se você perguntar isso em conjunto com o vídeo de instalação do curso fast.ai ( http://course.fast.ai/lessons/aws.html ), então o próximo A etapa é [~ # ~] crítica [~ # ~] para usuários do Windows: quando você baixa todo o Shell scripts da pasta de configuração do Github ( https://github.com/fastai/courses/tree/master/setup ), o Windows adiciona automaticamente terminadores de linha CRLF! Portanto, no cygwin, execute os seguintes comandos para remover essas terminações de linha:

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

Isso deve fazer o truque.

7
Ryan Chase

No meu caso, eu tive que:

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

Depois que minhas credenciais da AWS forem configuradas, eu poderia executar comandos awscli no Cygwin, onde o último foi iniciado normalmente, ou seja, como um usuário não administrador.

Anteriormente, tentei as mesmas etapas, mas lancei o Cygwin como não administrador e a instalação do awscli por meio do pip não demorou. Infelizmente, não salvei as mensagens de erro.

0
rio197