現在タイトルにある通り、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>