0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

クラウドRDBの初期化(DB・テーブル作成)を考える

Last updated at Posted at 2020-09-14

背景

RDS(AWS)やCloud SQL(GCP)を利用する際に、どのようにデータベースやテーブルを作成するかを纏めてみる

初期化方法

(1)DBインスタンスにログインして初期化する

ローカルのDBの初期化をSQLで行う場合はこちらを利用することを考える

  • アプリでORMを使わない場合
  • docker-entrypoint-initdb.dを使う場合

RDS(AWS)

以下の条件を満たすように設定すれば任意のmysqlクライアントからインターネット経由でアクセス可能になる(ただし初期化後は安全のためアクセスを塞いでおくべきである)

  • RDSがパブリックサブネットに配置されていること
  • VPCのセキュリティグループにmysqlのインバウンドルールが追加されていること
  • パブリックアクセシビリティが許可されていること

あるいは同じVPC内に踏み台サーバを起動し、踏み台サーバ経由でアクセスする方法もある。

  • サーバレスAuroraではインターネットアクセスができないため、この方法か、次節の方法で初期化する。
  • 踏み台サーバは必要な時だけ起動したり、IP制限するとセキュアである

Cloud SQL(GCP)

Cloud Shellからアクセスして初期化する

(2)DB初期化アプリケーションを作成して初期化する

アプリケーションで利用しているライブラリとシステムを用いたDB初期化用のアプリケーションを作成・実行する。

例: SQLAlchemyを利用したCloud Runで動くアプリであれば、SQLAlchemyを利用したDB初期化アプリを作成し、Cloud Runで実行する

大抵のORMにはテーブルを作成する機能があるので利用する。

(3)[Kubernetesの場合]Kubernetesの機能を利用する

アプリケーションがKubernetesで動作している場合は、Kubenetesの機能を用いてデータベースの初期化をすることもできる。

Init Containerを利用

ネットワーク・ボリュームが初期化された後、アプリケーションコンテナが起動する前に実行されるコンテナ。

起動コマンドとしてSQLコマンドを実行させたり、ライブラリを利用したアプリケーションを実行させたりできる。

ConfigMapで記述(できないかも)

ConfigMapにSQLをベタ書きして docker-entrypoint-initdb.d にマウントする方法

Cloud SQLを利用していて、cloudsql-proxyを利用している場合に利用できるかは未確認。

参考記事:
[Kubernetes] ConfigMapでコンテナの設定ファイルをVolumeに配置する
https://a-records.info/kubernetes-configmap-for-container-settings/

まとめ

  • 簡単にやるならDBインスタンスにログインして初期化する
  • 丁寧にやるならアプリやインフラなどからよしなに初期化方法を採用する
  • Kubernetesを利用しているならInitContainerを利用する
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?