Lambda函数 - >手动Api Gateway阶段变量权限

时间:2016-02-25 22:19:12

标签: amazon-web-services lambda aws-api-gateway

  

您将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接口)

谢谢!

4 个答案:

答案 0 :(得分:2)

你离开了" $ {stageVariables.functionAlias}"在你的命令?此命令的--function-name参数需要遵循以下模式的有效完全限定或部分lambda函数ARN:

(arn:aws:lambda:[region]:[account-id]:function:)[function-name](:[function-alias])

适当替换regionaccount-idfunction-namefunction-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>功能>限定词选项中获得功能和别名。

我希望这会有所帮助。