【问题标题】:Cross-Account Lambdas to API Gateway Setup跨账户 Lambda 到 API 网关设置
【发布时间】:2020-08-18 06:28:23
【问题描述】:

所以场景是我们有 3 个不同的帐户(EDGE、PROD、DEV)。我想在 EDGE 帐户中创建一些 API,并将它们分别与 DEV 和 PROD 帐户中的 lambdas 集成。 我有 2 个不同的 API 阶段:dev/prod,并且还定义了 API 的集成:LAMBDA 与 target = ${stageVariables.LAMBDA}。 当我在阶段变量中提到 LAMBDA 的完整 ARN 时,它在 api 命中后显示以下错误:

{
"message": "1 validation error detected: Value \'arn:aws:lambda:ap-south-1:XXEDGEACCOUNTXX:function:arn:aws:lambda:ap-south-1:XXDEVACCOUNTXX:function:funcName\' at \'functionName\' failed to satisfy constraint: Member must satisfy regular expression pattern: (arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_\\.]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?"
}

target = arn:aws:lambda:ap-south-1:${stageVariables.ACC}:function:${stageVariables.LAMBDA}/invocations

我在保存时收到无效函数 ARN 或 URI 的错误..

请帮忙。 PS。权限政策非常好。问题是 API 网关仅在自己的账户中检查 Lambda,这就是为什么只读函数名称并保持帐号固定的原因。

【问题讨论】:

  • 这个funcName\' at \'functionName\' 的函数名不正确。
  • 基本上它正在构建,“带有边缘帐户的 func arn + 带有开发帐户的 func arn”。实际上我的基本要求是..:我想将帐号也作为一个阶段变量..(想为两个不同的阶段调用不同帐户的两个不同的 lambdas

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


【解决方案1】:

以下说法有误

target = arn:aws:lambda:ap-south-1:${stageVariables.ACC}:function:${stageVariables.LAMBDA}/invocations
上述语句中的

${stageVariables.LAMBDA} 正在解析为 lambda 函数 arn。因此存在验证错误。

arn:aws:lambda:ap-south-1:XXEDGEACCOUNTXX:function:arn:aws:lambda:ap-south-1:XXDEVACCOUNTXX:function:funcName

另外,注意到你的建筑的目标是不正确的,应该是下面的形式

可以使用阶段变量代替 Lambda 函数名称或版本/别名,如以下示例所示。

arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:${stageVariables.<function_variable_name>}/invocations

arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:<function_name>:${stageVariables.<version_variable_name>}/invocations

更多信息可以通过这个链接

https://docs.aws.amazon.com/apigateway/latest/developerguide/aws-api-gateway-stage-variables-reference.html

【讨论】:

  • 正是我不希望 ${stageVariables.LAMBDA} 被解析为完整的 ARN ...我已经通过该链接,实际上我的基本要求是 ..:我想保留帐户数字也作为阶段变量..(想为两个不同的阶段调用不同帐户的两个不同的 lambda)。我纠正自己,我使用的目标是以下 arn:aws:lambda:ap-south-1:${stageVariables.ACC}:function:${stageVariables.LAMBDA}
  • 目前,他们不支持将帐户 ID 作为阶段变量传递,这是 API 网关的限制。您可以查看以下链接了解更多详情。 github.com/awslabs/serverless-application-model/issues/87
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
相关资源
最近更新 更多