AWS Fargate で使用するコンテナーと RDS for PostgreSQL に接続する想定の Node.js をローカルで作成してみた

ローカルに 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
タグ: , ,