zac*_*ach 7 api lambda gateway stage amazon-web-services
我的 API 网关有两个阶段(开发和生产)。我希望每个分别指向 dev 和 prod lambda 别名。我尝试在 lambda 集成中使用 stageVariables,但这会引发验证错误,并且 API Gateway 无权调用 lambda。我也无法从 lambda 仪表板更改权限策略以包含 stageVariables。
首先,我向每个阶段添加了一个阶段变量 (LAMBDA_ALIAS),并具有适当的值。我尝试附加:${stageVariables.LAMBDA_ALIAS}到 lambda ARN。当我保存此内容时,更改仍然存在,但仪表板顶部出现验证错误:
1 validation error detected: Value 'arn:aws:lambda:us-east-2:xxx:function:auth:${stageVariables.LAMBDA_ALIAS}' 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-_]+))?
Run Code Online (Sandbox Code Playgroud)
此外,我在点击 API 路由后注意到 CloudWatch 日志中出现集成错误:“在集成或 API 网关上配置的 IAM 角色没有调用集成的权限。请检查权限并重试。”
我已按照本指南创建了与完整调用 ARN 的新集成,但这也不起作用(它解析为 lambda ARN)。最后,我尝试通过 cli ( aws lambda add-permissions) 发出 JSON 语句,但返回了与上面所示相同的正则表达式错误。
这是我使用的 JSON 语句:
{
"StatementId": "xxx",
"Action": "lambda:InvokeFunction",
"FunctionName": "arn:aws:lambda:us-east-2:xxx:function:auth:${stageVariables.LAMBDA_ALIAS}",
"Principal": "apigateway.amazonaws.com",
"SourceArn": "arn:aws:execute-api:us-east-1:xxx:xxx/*/*/auth"
}
Run Code Online (Sandbox Code Playgroud)
我偶然发现了几个视频/博客教程,它们使用阶段变量将 API Gateway 阶段指向不同的 lambda 版本/别名,所以我的问题有三个:(1) AWS 是否仍然支持此功能?(2) 如果支持,如何实现是否实施?(3)如果没有,替代方法是什么?
小智 1
您设法解决问题了吗?
我想我的问题有点相似,我试图设置一个 HTTP API,其中包含dev和prod的阶段,并且在定义集成时(通过 UI)无法让 stageVariables 工作。
经过一番挖掘后,我设法通过以下方式解决了这个问题:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": [
"arn:aws:lambda:<region>:<id>:function:do-something-one:<prod/dev>",
...
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
<region>将,替换<id>为您的相关值以及<prod/dev>您想要与此策略关联的函数的别名。
这使我能够成功保存集成,并根据我访问的阶段 URL 对 lambda 函数使用不同的别名。
我假设可以创建 2 个角色 - 一个用于生产,一个用于开发,并且可能使用 stageVariables.iamRole 来进一步拆分基于权限的调用,但这对我不起作用,因为它抱怨不允许 iamPassRole。
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |