2017-04-27 9 views
0

ここでは、Azure関数を使用してイベントハブからJSON文字列メッセージを取り出し、AWSのPostgres RDSに挿入しようとしています。残念ながら、当面はデータを保持するためにPostgres RDSを使用する必要がありますが、将来Azure技術に変更される可能性があります。Azure関数 - イベントハブをAWS RDS Postgres

イベントハブにバインドされた関数を取得でき、正常にメッセージを受信できます。

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", 
    } 
    } 
} 
} 

私はPostgresのに接続するために、ログに次のエラーを与えて接続することができないようしようとするNpgsqlのを使用しています:

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 

私はこのデータベースが利用可能であることを知っており、タイムアウトなどを接続文字列は運がありません。

これは実際には可能ですか?

多くのありがとうございます。

+0

Azureは発信接続を制限してはいけません... AWSにはネットワーク制限が設定されていますか?コンソールアプリを作って、オフィス、家庭、Azure Web Jobなどのさまざまな場所から実行して、どこにでも動作するかどうかを確認してください。 – Mikhail

+0

@Mikhailは返信Mikhailに感謝します。あなたが言及したことは実際には問題であるかもしれません。私は、データベースにアクセスできるIP範囲に制限されていると思います。私はこれを回避して、あなたに戻ることができるかどうかがわかります。 – Chris

+0

Azureでは、SQL Serverへの外部接続を制限するファイアウォール設定がありますが、IPを追加してSQL Serverに接続できるようにすることができます。AWSにはこのような設定がいくつかあります。 –

答えて

1

おそらくタイムアウトではなく、ファイアウォールがAzure Web AppとAWSデータベースの間にあり、接続をブロックします。

Azureではので、私はそれが設定されたIP範囲の制限を持っているAWSのだと思う少なくともないポート5432

に、アウトバウンドの接続を制限するものではありません。 AzureのIP範囲を白いリストに追加してみてください。

Azureポータルでは、ファンクションアプリケーションのアウトバウンドIP範囲は表示されませんが、Azure Resource Explorerで表示されます。あなたのリソースへのパスは

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

UPDATEのような性質のために

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

検索のようになります。アウトバウンドIPアドレスは、理由のためのポータルに表示されません。 Function Appインスタンスは異なるスケールのセットになる可能性があるため、これらは安定しているとは限りません。 this answerを参照してください。

+0

これは正しいです。データベースは特定のIP範囲に制限されていました。 Azureが問題を解決できるようにするためにそれを開く。私はそれを前に考えなかったとは信じられない!多くの人がミハイルに感謝します。 – Chris

関連する問題