2
1

App RunnerのVPCコネクタを使ってRDSへ接続してみた

Posted at

はじめに

 こんにちは。前回記事では、「とりあえずApp Runnerを動かしてみる。」というところに焦点を当てて紹介しました。確かにApp Runnerはとても便利なサービスではあるのですが、もしも、App Runnerを実サービスで利用する場合、下記の部分が気になるのではないでしょうか。

  • App RunnerからDBに通信することはできるの?
  • App Runnerって接続制御はできるの?
  • App Runnerでログってとれるの?

 今回は、App RunnerからVPC内に作成したDBへ接続する構成を構築してみます。App Runnerを利用している方の参考になれば幸いです。

VPCコネクタについて

 App Runner側で作られたVPCはAWSコンソールで見えないので、App Runnerが作ったVPCにRDSやサブネットなどNWのリソースを作ることはできません。そんなときに利用するのが、VPCコネクタになります。詳細は、アップデート情報をご覧ください。

検証環境構築

 今回は、App Runnerからプライベートサブネットに配置したRDSへ接続した環境を構築してみます。構築流れは下記になります。VPCやRDSの構築については一部割愛し、VPCコネクタの部分を中心に紹介します。ご了承ください。

  • VPC、サブネットの作成(割愛)
  • SGの作成
  • RDSの作成
  • App Runnerの作成
  • VPCコネクタの作成

SGの作成

 VPCコネクタを作成する際にVPC、サブネット、App Runner用のSGが必要なため、事前に作成します。今回は下記のルールで作成します。

  • App RunnerのSG インバウンドルール(設定なし)
    image.png

  • App RunnerのSG アウトバウンドルール(検証なのでフルオープン)
    image.png

 ここで注意なのが、VPCコネクタに設定するSGのインバウンドルールは無視される仕様になります。 検証だから設定していないのではなく、AWSの仕様になります。なぜ、インバウンドルールが無視されるのかはこちらを参照ください。

 RDSのSGについては、先ほど作成したApp RunnerのSGのみ許可するルールにします。

  • RDSのSG インバウンドルール(App RunnerのSGのみ許可)
    image.png

  • アウトバウンドルール(検証なのでフルオープン)
    image.png

RDSの作成

 続いて、RDSの構築ですが、前手順で作成したVPCに構築すれば、他は基本的にデフォルト値で問題ないです。1点だけ注意なのが、今回、App RunnerにRDS情報を持たせるので、下記についてはメモしておいてください。

  • RDSエンドポイント
  • データベース名
  • DBユーザ名
  • DBユーザのパスワード

App Runnerの作成

 App Runnerの構築については、前回記事を参照ください。App RunnerにはRDSに接続するコードをデプロイしましょう。今回の検証で利用したものは下記になります。(某AIさんに作ってもらったものです。)

  • index.js
const express = require('express');
const { Client } = require('pg');
const app = express();

const dbConfig = {
  host: 'xxxxxx', // ここにDBホスト名を記入
  user: 'xxxxxx', // ここにDBユーザー名を記入
  password: 'xxxxxx', // ここにDBパスワードを記入
  database: 'xxxxxx', // ここにDB名を記入
  port: process.env.DB_PORT || 5432,
};

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*'); // 必要に応じて特定のオリジンに変更
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
});

app.get('/', async (req, res) => {
  const client = new Client(dbConfig);
  try {
    await client.connect();
    const result = await client.query('SELECT 1 + 1 AS solution');
    res.json({ message: `Database connection successful`, solution: result.rows[0].solution });
  } catch (error) {
    res.status(500).json({ message: `Database connection failed`, error: error.message });
  } finally {
    await client.end();
  }
});

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`App running on port ${port}`);
});
  • package.json
{
  "name": "app-runner-aurora-postgresql",
  "version": "1.0.0",
  "description": "A Node.js app to connect to Aurora PostgreSQL using AWS App Runner",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.17.1",
    "pg": "^8.6.0"
  }
}

VPCコネクタの作成

 App RunnerのVPCコネクタの作成です。App Runner構築の際に作成してもよいですが、今回は構築済のApp Runnerの設定を変更する流れで紹介します。
 構築したApp Runnerの「設定」タブより「編集」を選択します。
image.png

 「ネットワーキング」の「送信ネットワークトラフィック」で「カスタムVPC」を選択し、「新規追加」をクリックします。
image.png

 RDSを作成したVPC、サブネット、App Runner用に作成したSGを選択して、「追加」をクリックします。
image.png

 VPCコネクタの設定がされたら設定内容を保存します。
 App Runnerのデプロイ完了後、デフォルトドメインに接続してみましょう。問題なく接続できていれば下記画面が表示されます。

image.png

最後に

 補足ですが、App RunnerにはWAFを適用できます。App Runnerのドメインをパブリックアクセスにアクセスしている場合、WAFを利用して接続制限をしておくと安心ですね。
 方法は、WAFを作成して、App Runnerに割り当てするだけです。公式資料でも紹介されてますので詳細はこちらを参照ください。

 最後まで読んでいただきありがとうございました!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1