您将Lambda函数定义为阶段变量;你必须 手动授予您将使用的所有功能的权限。您可以 通过为每个函数运行以下AWS CLI命令来执行此操作, 用。替换function-name参数中的stage变量 必要的功能名称。
aws lambda add-permission --function-name arn:aws:lambda:eu-west-1:12345:function:test${stageVariables.functionAlias} --source-arn arn:aws:execute-api:eu-west-1:12345:dsad667asd/*/GET/test/test --principal apigateway.amazonaws.com --statement-id d5a14508-22bb-4413-87c9-d9715e36435d --action lambda:InvokeFunction
获取此消息和建议以运行此命令,遗憾的是它在这里抛出
不起作用zsh: bad substitution
有或没有zsh,我正在寻找一种方法来做这个manualy(使用aws接口)
谢谢!
答案 0 :(得分:2)
你离开了" $ {stageVariables.functionAlias}"在你的命令?此命令的--function-name
参数需要遵循以下模式的有效完全限定或部分lambda函数ARN:
(arn:aws:lambda:[region]:[account-id]:function:)[function-name](:[function-alias])
适当替换region
,account-id
,function-name
和function-alias
的位置。
如果您的功能与发出命令的用户位于同一帐户和区域,并且您只想参考$LATEST
功能版本,则仅指定功能名称将完全有效并保存一些按键:
aws lambda add-permission --function-name test --source-arn arn:aws:execute-api:eu-west-1:12345:dsad667asd/*/GET/test/test --principal apigateway.amazonaws.com --statement-id d5a14508-22bb-4413-87c9-d9715e36435d --action lambda:InvokeFunction
请参阅此文档,了解aws lambda add-permission
CLI命令的使用情况:http://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html
答案 1 :(得分:1)
您需要从命令中将${stageVariables.functionAlias}
替换为您自己的lambda函数名称。
此外,请确保您的bash中的AWS环境变量设置正确。
它对我有用。
答案 2 :(得分:1)
我做了什么来解决这个问题,是我创建了我需要的版本,为每个版本创建了别名。在我的情况下,我生产指向版本1 ,开发指向 $ LATEST 。
在AWS CLI上,我将${stageVariables.functionAlias}
更改为别名,并为每个别名执行该命令。
我还引用了Using API Gateway Stage Variables。您还可以查看端点的CloudWatch中的日志,并查看调用的版本/别名。
希望这有帮助。
答案 3 :(得分:0)
创建新功能或新功能别名时,必须添加权限以启用对API网关的访问。我这样做的方式是在集成请求期间,我输入了lambda函数阶段变量,例如:
$ {stageVariables.myFunctionName}
我在CLI上运行命令(由控制台显示),并将上述变量替换为以下格式:
myFunctionName:myAliasName
请注意,如果创建了别名,请在函数名称后添加别名,并用一个“:”冒号分隔
注意:您可以从Lammda>功能>限定词选项中获得功能和别名。
我希望这会有所帮助。