Как получить интерфейс командной строки AWS для работы в cygwin

Я установил интерфейс командной строки AWS в свой Windows 7, и он сразу же работал, когда я вызывал команды из оболочки DOS.

Но DOS, худший язык, когда-либо изобретенный, является отвратительным для любых серьезных сценариев. Итак, я хотел бы использовать AWS CLI от bash через cygwin.

В моем случае установленный AWS CLI - это версия Windows. В принципе, это не должно быть проблемой, поскольку команды Windows исполняются из cygwin. (cygwin включает в себя ваши переменные среды Windows, такие как PATH, в своей собственной среде.)

К сожалению, когда я сначала попытался выполнить команду AWS CLI из cygwin/ bash, я получил сообщение об ошибке:

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

Эта ошибка, скорее всего, из-за того, что CLI AWS ищет неправильный каталог для файла credentials. В Windows ожидается, что этот файл будет находиться в %UserProfile%.aws и в unix в ~/.aws.

Один хак работает в том, что в моем домашнем каталоге я создал новый файл с именем config_credentials, который содержит объединение содержимого файлов этого каталога config и credentials. Затем я создал новую систему Windows env var с именем AWS_CONFIG_FILE, значение которой - путь к config_credentials. Успех: Команды AWS CLI, выпущенные из cygwin, теперь работают.

Мне интересно, есть ли лучшее решение?

Мне любопытно, почему AWS CLI изначально не удалось найти в правильном домашнем каталоге файлы config и credentials. Я также задаюсь вопросом, есть ли способ исправить это (это устранит необходимость в AWS_CONFIG_FILE env var).

Ответ 1

У меня была та же проблема. Я обошел это, установив новую копию AWSCLI в Cygwin. Сначала вам нужно установить пакеты Cygwin "curl" и "python", тогда вы можете установить AWSCLI следующим образом:

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

Если вы используете bash, и вы ранее выполнили командную строку Windows AWS, вам необходимо очистить кеш-путь следующим образом:

$ hash -d aws

"aws -version" будет выглядеть примерно так:

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

в отличие от вывода командной строки Windows, который выглядит примерно так:

aws-cli/1.8.1 Python/2.7.9 Windows/8

Теперь я могу выполнить "aws configure" под Cygwin, и все работает так, как должно.

Ответ 2

После МНОГО времени, потраченного на это, я нашел решение, которое работает.

Основная проблема заключается в том, что cygwin не поставляется с установленным Python и не знает, где найти существующую версию Windows Anaconda на вашем компьютере. Это можно проверить, запустив какой Python из Cygwin - он не может найти, где Python сохранен. Обратите внимание, что это может сбить с толку, потому что запуск pip install awscli, скорее всего, не выдаст сообщение об ошибке. Cygwin фактически устанавливает awscli при установке Python в Window Anaconda (я нахожу это странным, поскольку мы не запускали conda install awscli).

ОДНАКО, вместо того, чтобы пытаться указать cygwin на уже установленную версию Python Anaconda на вашем компьютере, вы сэкономите массу головной боли, просто установив специфичный для cygwin экземпляр python. Шаги для этого описаны здесь: 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

... Заметьте, однако, что первая команда pip uninstall awscli "зависла" для меня. Так что просто выйдите из него с помощью quit() и продолжайте с другими по порядку.

Вы можете проверить, что все работает, если вы запускаете which python в Cygwin, и он указывает на версию Cygin (то есть /usr/bin/python, а не: /users/.../Anaconda2/).

Кроме того, если вы спросите об этом в сочетании с просмотром видео по настройке курса fast.ai(http://course.fast.ai/lessons/aws.html), то следующий шаг - КРИТИЧЕСКИЙ для пользователей Windows: Когда вы загружаете все сценарии оболочки из установочной папки Github (https://github.com/fastai/courses/tree/master/setup), Windows автоматически добавляет терминаторы строки CRLF! Поэтому в cygwin выполните следующие команды для удаления этих окончаний строки:

  1. apt-cyg install dos2unix
  2. dos2unix setup_p2.sh
  3. dos2unix setup_instance.sh
  4. наконец, bash setup_p2.sh

Это должно сделать свое дело.

Ответ 3

Я использовал aws configure из окна DOS cmd для создания файлов cfg (config и credentials) и протестировал их с образцом aws cmd (в окне DOS). Затем я скопировал папку Users \.aws, чтобы определить, где cygwin считает, что домашние папки пользователя (в моем случае c:\cygwin64\home \). Затем я использовал TextPad для преобразования окончаний строки (используйте файл > save-as; выберите окончание строк Unix, убедитесь, что файлы не переименованы в x.txt). Теперь он работает.

Ответ 4

В моем случае мне пришлось:

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

Как только мои учетные данные AWS были настроены, я мог запускать команды awscli на Cygwin, где [Edited] последний был запущен как пользователь без прав администратора [/Edited].

Ранее я пытался сделать те же шаги, но я запустил Cygwin как не-Adminstrator, и установка awscli через pip не прошла. Я не сохранил сообщения об ошибках, к сожалению.