0

有很多关于如何使用 was REST API 调用 lambda 别名的信息,但相同的过程不适用于 HTTP API。这个问题之前在这里被问过,但没有得到回答。这个问题专门针对 HTTP API。

aws 文档建议您可以使用完整的 arn 引用 lambda 函数别名,这很有意义,只是 lambda 选择不接受完整的 arn。

在此处输入图像描述

我还使用以下 CLI 命令(帐号替换为 xx)授予了对 lambda 的 API 访问权限:

aws lambda add-permission  --function-name "arn:aws:lambda:eu-central-1:xxxxxxxxxxxx:function:devops-demo:development"  --source-arn "arn:aws:execute-api:eu-central-1:xxxxxxxxxxxx:cqu0317x92/*/*/devops-demo"  --principal apigateway.amazonaws.com  --statement-id 256d766f-41b1-4207-83f1-7ada60de637b  --action lambda:InvokeFunction

如何使用 HTTP API(而不是 REST API)的别名调用 lambda?

更新 1:使用 cli,我可以创建一个指向带有别名的 lambda URI 的集成。这是来自的返回值aws apigatewayv2 update-integration

{
    "ConnectionType": "INTERNET",
    "IntegrationId": "y7r6blb",
    "IntegrationMethod": "POST",
    "IntegrationType": "AWS_PROXY",
    "IntegrationUri": "arn:aws:lambda:eu-central-1:xxxxxxxxxxxx:function:devops-demo:development",
    "PayloadFormatVersion": "2.0",
    "TimeoutInMillis": 30000
}

我还尝试使用以下方法再次添加权限:

aws lambda add-permission\
  --function-name arn:aws:lambda:eu-central-1:xxxxxxxxxxxx:function:devops-demo:development\
  --source-arn arn:aws:execute-api:eu-central-1:xxxxxxxxxxxx:cqu0317x92\
  --principal apigateway.amazonaws.com\
  --statement-id b9e3e37f-0f81-421f-b329-add3c812b5c8\
  --action lambda:InvokeFunction

(将资源路径添加到 source-arn 会导致错误)

当我调用 API 端点时,我现在得到:

{"message":"Internal Server Error"}

根据 CloudWatch 日志,未调用 lambda 函数。

4

0 回答 0