有很多关于如何使用 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 函数。