如何从 AWS Lambda .Net Core 应用程序 API 连接到 AWS RDS SQL Server?

Posted

技术标签:

【中文标题】如何从 AWS Lambda .Net Core 应用程序 API 连接到 AWS RDS SQL Server?【英文标题】:How do I connect to AWS RDS SQL Server from AWS Lambda .Net Core application API? 【发布时间】:2019-10-07 04:45:46 【问题描述】:

我在 S3 中有一个 Angular 应用程序,它在 Lambda 中调用一个 .Net Core 应用程序。 Lambda .Net Core 应用程序中的 API 针对 RDS SQL Server 运行。

当 Lambda 中的 .Net Core 应用程序尝试与 RDS 交互时,我收到 504 错误,但如果我注释掉调用数据库的 C# 代码,则不会。

当我在本地运行 Angular 应用程序和 .Net Core 应用程序时,我可以很好地连接到 AWS 上的 RDS 数据库,这表明到 RDS 数据库的连接字符串有效。 (本地 IP 地址与创建 RDS SQL Server 时使用的相同。)

在本地不运行任何内容时,我收到 POST 504 错误。进一步的信息说:从源“https://example.com”访问 XMLHttpRequest 在“https://xxxxx.execute-api.us-east-1.amazonaws.com/Prod/api/myapi”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

如何才能从我的 Lambda .Net Core 应用程序的 api 成功连接到我的 SQL Server 数据库?

【问题讨论】:

您需要为您的问题添加详细信息,例如 Lambda 函数是否在 VPC 中运行?和 RDS 实例是同一个 VPC 吗?您是否为 Lambda 函数配置了安全组并授予该组对 RDS 实例的访问权限?发生错误时,Lambda 函数的 CloudWatch Logs 中是否有任何日志消息? 【参考方案1】:

我不认为连接到 RDS 是您的问题,问题是您的反应文件与 Lambda 函数所在的域不同。这导致了 504。 最快的解决方案是在服务器上设置 CORS 策略。您可以在 api-gateway 中轻松配置它。见https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html#apigateway-responding-to-cors-preflight

【讨论】:

Lambda 函数在 Angular 中运行良好,除非该 Lambda 函数尝试连接到 RDS。我在帖子中提到过。

以上是关于如何从 AWS Lambda .Net Core 应用程序 API 连接到 AWS RDS SQL Server?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda Dot Net Core 3.1 在使用 Aspose Cells for .Net 时抛出 gdip 异常

AWS Lambda、.Net Core 和 MySql:无法加载文件或程序集 'System.Diagnostics.TraceSource,版本 = 4.0.0.0

如何从我的 EC2 实例调用 AWS Lambda 函数?

DotNet Core:AWS Lambda 解析器

从AWS Lambda向SQS队列发送数据时重置连接

AWS Lambda不支持连接到专用租赁VPC中的资源