首页 文章

如何使不同的AWS API网关环境指向lambda函数的不同别名?

提问于
浏览
0

在我的AWS API Gateway API中,我设置了2个环境,“dev”和“prod” . 我还为名为“dev”和“prod”的AWS lambda函数提供了2个别名 . 现在,我想将我的API的“dev”环境指向我的函数的“dev”别名,以及我的函数的“prod”别名中的“prod”环境 .

我读了一篇我目前无法找到的教程,在集成配置中,您可以在 <functionName>:<alias> 形式中指定函数,因此我将集成设置为指向: SlackCommands:${stageVariables.lambdaAlias} .

我在API的prod环境中添加了一个名为lambdaAlias且值为“prod”的stage变量,并在dev环境中添加了一个具有相同名称的变量,其中包含“dev”值 . 但是,当我将APi切换为使用最新部署(将简单的lambda函数名称更改为名称转换为别名)时,我在调用API时会在cloudWatch中看到此错误:

由于配置错误导致执行失败:Lambda函数的权限无效

这首先发生在prod和dev上 . 然后,我发现lambda触发器是按别名设置的 . 所以我从$ LATEST版本中删除了我的API触发器,并将其添加到"prod"别名:

然后我去了"dev"别名,想要添加相同的触发器,但由于某种原因,现在我无法从下拉列表中选择"dev"环境:

我假设这是因为awzs想要将集成设置为专门指向“dev”别名,但是已经存在集成 . 如果我理解AWS的文档,我需要做的是设置一个lambda策略,授予我对这个别名的API访问的“dev”环境,但是控制台只有一个“查看功能策略”部分,看似没有地方手动设置它 .

那么如何按照我想要的方式设置它呢?最好通过控制台,因为我不经常使用AWS,也不想安装CLI .

1 回答

  • 1

    不幸的是,这是您需要使用CLI命令设置的权限 . 原因是当您在函数名称中使用阶段变量时,API Gateway无法推断授予权限所需的完整函数名称 .

    您需要运行的示例命令如下所示:

    $ aws lambda add-permission \
    --function-name LambdaFunctionOverHttps \
    --statement-id apigateway-test-2 \
    --action lambda:InvokeFunction \
    --principal apigateway.amazonaws.com \
    --source-arn "arn:aws:execute-api:region:aws-acct-id:api-id/*/POST/DynamoDBManager"
    --principal apigateway.amazonaws.com
    

    有关详细信息,请参阅此文档:http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example-configure-event-source.html#with-on-demand-https-add-permission

相关问题