亚马逊网络服务:NoCredentialsError:找不到凭据

问题描述:

我正在使用亚马逊网络服务cli。我使用makefile来构建我的lambda项目并将其上传到aws lambda。我在一台Windows机器上使用PowerShell来调用make。亚马逊网络服务:NoCredentialsError:找不到凭据

我试图删除我的lambda函数与以下行

AWS_PATH = /cygdrive/c/Users/TestBox/AppData/Roaming/Python/Scripts/aws 
AWS_WIN_PATH = $(shell cygpath -aw ${AWS_PATH}) 
AWS_REGION = eu-west-2 

lambda_delete: 
    $(AWS_WIN_PATH) lambda delete-function --function-name LambdaTest --region $(AWS_REGION) --debug 

我得到这个错误..

NoCredentialsError:找不到凭据 找不到凭据。您可以通过运行“aws configure”来配置凭据。

Running aws configure list打印出一个有效的默认配置文件。

我认为这个问题是因为我在Windows机器上使用由cygwin安装的gnu make。使用PowerShell来调用make。

因此,当〜/ .aws/credentials被评估时,证书的路径如下所示:“cygdrive/c/users/testbox/.aws/credentials”而不是“c:\ users \ testbox.aws \ credentials” AWS。我认为:)

我有与aws本身的路径相同的问题,并不得不使用$(shell cygpath -aw $ {AWS_PATH})将其转换为一个窗口蟒蛇可以使用的路径。

是否有任何方式直接将凭证直接传递给lambda删除函数或间接通过文件路径?我似乎不能想到一种方式,因为搜索凭据的代码是botocore的内部代码。

有没有办法解决这个问题?

+0

GNU make的默认的shell /斌/ sh“,如果这个变量没有在你的makefile中设置,程序/ bin/sh将被用作shell。” HTTPS://www.gnu。org/software/make/manual/html_node/Choosing-the-Shell.html – strongjz

+0

@strongjz您能否更详细地解释解决方案? – SRG

替代解决方案,可以考虑使用AWS SAM templates

使用AWS SAM模板部署使用CloudFormation您的lambda函数和AWS资源。

  • 编辑您的SAM模板并定义您的AWS资源。例如,定义代码的Lambda函数/路径。
  • aws cloudformation package将您的本地代码打包并上传到S3。
  • aws cloudformation deploy使用S3上的更新代码供应和更新AWS资源。

这将工作在CMD/Powershell没有make麻烦。您还可以将您的资源作为代码进行版本控制,您无需担心在make文件中跟踪或添加新的AWS API。

更多参考复杂的无服务器架构:

+0

好的,它是我的技术栈。混合使用cygwin和windows可能会导致问题。我正在关注一个关于lambda的YouTube视频教程,但我认为做这件事的人是在linux/mac机器上。我会尝试你的解决方案,看看它是否适用于我,然后标记你的答案。 – SRG

+0

现在查看apex和AWS SAM以部署我的lambda表达式。仍然可能使用make文件来构建和准备我的lambda包。谢谢。 – SRG