Azure 函数 - AWS RDS Postgres 的事件中心

Azure Function - Event Hub to AWS RDS Postgres

在我工作的地方,我们正在尝试使用 Azure 函数从事件中心获取 JSON 字符串消息并将其插入 AWS 中的 Postgres RDS。不幸的是,我们暂时必须使用 Postgres RDS 来持久化数据,但这可能会在未来改变为 Azure 技术。

我能够将函数绑定到事件中心,并且能够成功接收消息。

run.csx

#r "System.Data"

using System;
using System.Data;
using Npgsql;

public static void Run(string myEventHubMessage, TraceWriter log)
{
    log.Info($"C# Event Hub trigger function processed a message: 
    {myEventHubMessage}");

    using (NpgsqlConnection connection = new NpgsqlConnection(
    "Host=host;Port=5432;Database=database;Username=username;Password=password;Timeout=300"))
    {
        try
        {
            log.Info("Opening connection to Postgres...");
            connection.Open();
            log.Info("Connection open.");
        }
        catch (Exception ex)
        {
            log.Info($"Failed to open connection to Postgres. EXCEPTION: 
            {ex.Message}");
            throw;
        }  
    }
}

project.json

{
  "frameworks": {
  "net46":{
  "dependencies": {
    "Npgsql": "3.2.2",
   }
  }
 }
}

我正在使用 Npgsql 尝试连接到 Postgres,但它似乎无法连接,并在日志中给出以下错误:

2017-04-27T09:58:30.710 Failed to open connection to Postgres. EXCEPTION: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

我知道这个数据库可以连接,我已经尝试在连接字符串中增加超时等,但没有成功。

这真的可以做到吗?

非常感谢。

很可能不是超时,而是位于 Azure Web 应用程序和 AWS 数据库之间的防火墙阻止了连接。

Azure 不限制出站连接,至少不限制端口 5432。

所以,我猜是 AWS 对配置的 IP 范围进行了限制。尝试将您的 Azure IP 范围添加到那里的白名单中。

Azure 门户似乎没有显示函数应用程序的出站 IP 范围,但我可以在 Azure Resource Explorer 中看到它们。您的资源路径将类似于

http://resources.azure.com/subscriptions/{subscriptionid}/resourceGroups/{webappplan}
/providers/Microsoft.Web/sites/{functionapp}

搜索 属性 个赞

"outboundIpAddresses": "104.46.38.91,104.46.38.110,104.46.35.12,23.97.218.73"

更新:出于某种原因,出站 IP 地址未显示在门户中。它们不能保证稳定,因为 Function App 实例可能位于不同的规模集中。参见 this answer