【问题标题】:Lambda function -> Api Gateway stage variable permission manuallyLambda 函数 -> Api Gateway 手动阶段变量权限
【发布时间】:2016-02-25 22:19:11
【问题描述】:

您将 Lambda 函数定义为阶段变量;你必须 手动授予您将使用的所有功能的权限。你可以 通过为每个函数运行以下 AWS CLI 命令来执行此操作, 将函数名参数中的阶段变量替换为 必要的函数名。

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,我正在寻找的是一种手动执行此操作的方法(使用 aws 界面)

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您是否在命令中保留了“${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

    【讨论】:

      【解决方案2】:

      您需要在命令中将${stageVariables.functionAlias} 替换为您自己的 lambda 函数名称。

      另外,请确保您的 bash 中的 AWS 环境变量设置正确。

      它对我有用。

      【讨论】:

        【解决方案3】:

        我做了什么来解决这个问题,我创建了我需要的版本,为每个版本创建了别名。在我的例子中,Production 指向 Version 1Development 指向 $LATEST

        在 AWS CLI 上,我将 ${stageVariables.functionAlias} 更改为别名的名称,并对每个别名执行该命令。

        我还引用了Using API Gateway Stage Variables。您还可以查看端点的 CloudWatch 日志,并查看调用了哪个版本/别名。

        希望这会有所帮助。

        【讨论】:

          【解决方案4】:

          创建新函数或新函数别名时,必须添加权限才能访问API网关。我这样做的方式是在集成请求期间,我输入 lambda 函数阶段变量,如:

          ${stageVariables.myFunctionName}

          我在 CLI 上运行命令(由控制台显示)并将上述变量替换为以下格式:

          myFunctionName:myAliasName

          请注意,如果创建了别名,请在函数名之后添加别名,并用单个“:”冒号分隔

          注意:您可以从 Lammda>functions > Qualifiers 选项中获取函数和别名。

          我希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-20
            • 2018-10-28
            • 1970-01-01
            • 2016-10-27
            • 2018-11-12
            相关资源
            最近更新 更多