🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

1回答

2513閲覧

google firebase から postgreSQLへの接続

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

2クリップ

投稿2019/10/27 13:17

編集2019/11/01 12:43

現在タイトルにある通り、firabaseにデプロイしたプログラムからDBへの接続を試みていますが、エラーの原因が特定できずに悩んでいます。

前提として、DBはAWSのRDSから作成したpostgreSQLです。

具体的には、node expressで作成したgetメソッドにアクセスすると、htmlからのアクセスでDBの値を取得してコンソールに出力するというプログラムですが、
DBへのアクセス時点で、以下のようなエラーがfirebaseのfunctionsのログに出力されます。

Error: getaddrinfo EAI_AGAIN test-db.cj8bjygus8y0.ap-northeast-1.rds.amazonaws.com:5432
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26)

これは推測ですが、firebaseから外部のDBへの接続は許可されない仕様があり、それが原因ではないかと思っています。だとすれば、今回の試み自体が無謀なものになりますが・・・。
firebaseにrealtime DBがあるのは分かっていますが、今回はRDSから作成したDBを使うということをしたいので、realtime DBを使うことはしません。

ちなみにfirebase serve した時点で、ローカル環境からならばつなぐことはできています。
デプロイしたときにのみ発生するエラーです。

①今回の試みは、可能なことなのでしょうか?
②可能だとすれば接続方法やエラーの解決法を知りたいです。

ネットワークのことはまだ勉強中で、知識不足は承知の上ですが、ご教示頂ければ幸いです。

javascript

1const functions = require('firebase-functions'); 2const express = require('express'); 3const app = express(); // expressアプリを生成する 4 5// postgreSQL接続に必要な情報 6const { Client } = require('pg'); 7const counter = 0; 8const client = new Client({ 9 user: 'ユーザー', 10 host: 'ホスト', 11 database: 'test', 12 password: 'パスワード', 13 port: 5432 14}); 15 16// postgreSQL接続 17client.connect(err => { 18 if(err){ 19 console.error(err.stack); 20 } 21}); 22 23// DBの値取得 24app.get('/api/v1/test',(req,res) =>{ 25 const query = "select * from testdb;"; 26 client.query(query) 27 .then(response => { 28 var test = response.rows; 29 res.json(test); // 日本語列をフロントに返す 30 //client.end(); 31 }) .catch(e => console.error(e.stack)) 32}) 33 34app.use(express.static('web')); // webフォルダの中身を公開する 35app.listen(process.env.PORT || 8080, function () { //⑩ 36 console.log('Example app listening on port 8080!') 37}) 38exports.app = functions.https.onRequest(app);

html

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title>test</title> 6</head> 7<body> 8 <script> 9 fetch('./api/v1/test') 10 .then((response) => response.json()) 11 .then((test) => { 12 console.log(test); 13 }) 14 </script> 15</body> 16</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaharu

2019/11/01 09:13

DBのパスワードなどがダミーであればいいですが、記載する場合は隠したほうが良いと思います。
guest

回答1

0

Firebaseの無料プラン(Spark)の場合、外部接続はできないので、使用している料金プランによると思います。

投稿2019/11/01 09:10

aaharu

総合スコア441

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問