ローカルに PostgreSQL のコンテナーと Node.js が動くコンテナーを別々に起動して連携動作を確認し、AWS Fargate と RDS for PostgreSQL が VPC 内で通信する想定の環境をローカルに作成してみます。
ローカルの PostgreSQL を準備
docker run -d --rm \
--name postgres \
-p 5432:5432 \
-e POSTGRES_PASSWORD=mysecretpassword \
postgres:14.7
Node.js アプリを準備
以下のコードを index.js
というファイル名で保存します。
const express = require('express');
const app = express();
const port = 80;
const { Pool } = require('pg');
const pool = new Pool({
user: process.env.PGUSER,
host: process.env.PGHOST,
database: process.env.PGDATABASE,
password: process.env.PGPASSWORD,
port: process.env.PGPORT
});
app.get('/', (req, res) => {
let msg = "Query Result : ";
(async () => {
try {
const result = await pool.query('SELECT now()');
console.log('Result:', result.rows);
msg += JSON.stringify(result.rows);
res.send(msg);
} catch (error) {
console.error('Error:', error);
res.status(500).send('Internal Server Error');
}
})();
});
app.listen(port, () => {
console.log(`Server is listening at http://localhost:${port}`);
});
Node.js 単体で動作確認
npm init -y
npm install express pg
export PGHOST=localhost
export PGUSER=postgres
export PGPASSWORD=mysecretpassword
export PGDATABASE=postgres
export PGPORT=5432
node index.js
open http://localhost:80
Dockerfile を作成
FROM node:20
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 80
CMD [ "node", "index.js" ]
Node.js コンテナーで動作確認
docker build -t mnrnodejs .
docker run -d --rm \
--name mnrnodejs \
-e PGHOST=192.168.10.104 \
-e PGUSER=postgres \
-e PGPASSWORD=mysecretpassword \
-e PGDATABASE=postgres \
-e PGPORT=5432 \
-p 80:80 \
mnrnodejs
open http://localhost:80
後片付け
docker stop mnrnodejs
docker stop postgres
タグ: AWS, Docker, Node.js