我尝试使用SAM CLI在本地运行和测试用Golang编写的AWS Lambda服务。我有两个问题
-
如果我使用.zip文件,Lambda不能在本地工作。当我将代码部署到AWS时,它可以正常工作,但如果我尝试在本地运行.zip文件,就会得到以下错误:
客户端不持有所需的特权:'handler' ->"C: 用户 AppData 本地用户 Temp tmpbvrpc0a9 引导">
如果我不使用。zip,那么它在本地工作,但我仍然希望以。zip部署,并且更改模板是不可行的。每次我想在本地测试
-
如果我尝试访问AWS资源,我需要设置以下环境变量:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN
但是,如果我在模板中设置这些变量。sam local start-api——env-vars用凭据填充它们,然后本地环境工作并可以访问AWS资源,但是当我将代码部署到真正的AWS时,它给出了一个错误,因为这些变量是保留的。我还试图为这些变量使用不同的名称,但随后本地环境不起作用,并试图从模板中省略这些。并且只使用本地的环境变量,但是环境变量必须存在于模板中。不能用env-vars创建,只能用值填充现有的变量。
如何使本地环境工作,但仍然能够部署到AWS?
要访问AWS资源,您需要查看IAM权限,而不是使用编程访问密钥,请查看cloudformation的此文档。
要清楚的是,实际上在AWS上部署的东西都不需要这些密钥,所有这些都是关于对X(lambda, ec2等)应用权限的——这些密钥只在AWS cli和一些本地环境(如serverless和sam)中真正需要。
无服务器框架现在支持golang,如果你是新手,我会说在你跟上IAM/Cloudformation的速度时试试。