如何让AWS命令行界面在cygwin中工作

时间:2015-06-12 18:22:38

标签: windows amazon-web-services cygwin command-line-interface credentials

我在Windows 7上安装了AWS命令行界面,当我从DOS shell调用命令时,它立即工作。

但是DOS,这是有史以来发明的最糟糕的语言,对任何严肃的脚本来说都是可怕的。所以,我想通过cygwin从bash使用AWS CLI。

就我而言,已安装的AWS CLI是Windows版本。原则上,这应该不是问题,因为Windows命令可以从cygwin执行。 (cygwin includes your Windows environmental variables,例如PATH,在其自己的环境中。)

不幸的是,当我第一次尝试从cygwin / bash执行AWS CLI命令时,我收到了一个错误:

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

此错误可能是因为AWS CLI正在查找credentials文件的错误目录。在Windows上,它希望该文件位于%UserProfile%.aws~/.aws中的unix中。

一个hack解决方法是在我的主目录中创建了一个名为config_credentials的新文件,其中包含该目录文件configcredentials内容的并集。然后我创建了一个名为AWS_CONFIG_FILE的新Windows系统env var,其值是config_credentials的路径。成功:从cygwin发出的AWS CLI命令现在可以正常工作。

我想知道是否有更好的解决方案?

我很好奇为什么AWS CLI最初无法在configcredentials文件的正确主目录中搜索。我也想知道是否有办法纠正(这将消除对AWS_CONFIG_FILE env var的需要。)

4 个答案:

答案 0 :(得分:28)

我遇到了同样的问题。我通过在Cygwin中安装新的AWSCLI副本来解决这个问题。您首先需要安装“curl”和“python”Cygwin软件包,然后您可以按如下方式安装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

我现在能够在Cygwin下执行“aws configure”,一切正常。

答案 1 :(得分:7)

花了很多时间,我发现了一个有效的解决方案。

主要问题是cygwin没有安装python,也不知道在你的机器上哪里可以找到现有的Windows Anaconda版本。这可以通过从cygwin中运行哪个python来验证 - 它找不到python的保存位置。请注意,这可能会造成混淆,因为运行pip install awscli可能不会抛出错误消息。 Cygwin实际上在Window的Anaconda Python安装中安装了awscli(我发现这很奇怪,因为我们没有运行conda install awscli)。

然而,不是试图将cygwin指向你机器上已安装的Anaconda python版本,它将为你安装一个特定于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
  8. ...但请注意,第一个命令pip uninstall awscli“挂了”给我。所以只需使用quit()逃脱它,并按顺序继续其他。

    如果你在cygwin中运行which python并且它指向cygin版本(即/ usr / bin / python,而不是:/users /.../Anaconda2/),你可以检查一切是否有效。

    此外,如果你碰巧在观看fast.ai课程(http://course.fast.ai/lessons/aws.html)的设置视频的同时问这个,那么下一步是 CRITICAL < / strong>对于Windows用户:当您从Github安装文件夹(https://github.com/fastai/courses/tree/master/setup)下载所有shell脚本时,Windows会自动添加CRLF行终止符!因此,在cygwin中,运行以下命令以删除这些行结尾:

    1. apt-cyg install dos2unix
    2. dos2unix setup_p2.sh
    3. dos2unix setup_instance.sh
    4. 最后,bash setup_p2.sh
    5. 这应该可以解决问题。

答案 2 :(得分:1)

我在DOS cmd窗口中使用aws configure来创建cfg文件(配置和凭据),并使用示例aws cmd(在DOS窗口中)对它们进行测试。然后我复制了Users \ .aws文件夹,找到了cygwin认为用户主文件夹的位置(在我的例子中是c:\ cygwin64 \ home \)。然后我使用TextPad转换行结尾(使用文件&gt; save-as;选择unix行结尾;确保文件不会重命名为x.txt)。现在它有效。

答案 3 :(得分:0)

就我而言,我必须:

df_2 = (df_1.groupby('year_month')['pct']
            .apply(lambda x: x.cumsum().le(80).mean())
            .mul(100)
            .to_frame(0)
            .T
            .astype(int))

print (df_2)
year_month  201903  201904
0               25      50

一旦配置了我的AWS凭证,我就可以在Cygwin正常启动的Cygwin上运行awscli命令,即以非管理员用户身份启动。

之前,我尝试执行相同的步骤,但是我以非管理员身份启动了Cygwin,并且没有通过pip安装awscli。不幸的是,我没有保存错误消息。