TerraformでもSQLスキーマの管理がしたい!

3.9K Views

October 20, 23

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ゆるSRE勉強会 #2 TerraformでもSQLスキーマの管 理がしたい! 2023/10/20 小澤友彦 証券コード:2980 ©︎ 2023 SRE Holdings Corporation ©︎ 2023 SRE Holdings Corporation

2.

SRE Holdings について ソニー新事業創出 プログラム第一号案件 2014年 ソニー子会社 として会社設立 2019年 社名を SREホールディングスに変 更 不動産 仲介/管理 不動産会社向け DX・ITツール アセット 開発 AIコンサル DX戦略コンサル ©︎ 2023 SRE Holdings Corporation 2

3.

発表者紹介 • 小澤 友彦 ( • ソフトウェアエンジニア • 主な業務 @kota65535) ⁃ フロント・バックエンド設計・開発 ⁃ インフラ構築・管理 ⁃ アーキテクチャ設計 ⁃ CI/CD設計・実装 ⁃ 運用監視自動化 ©︎ 2023 SRE Holdings Corporation 3

4.

SQLのスキーマ、どうやって管理していますか? ©︎ 2023 SRE Holdings Corporation

5.

伝統的な手法 • フレームワークの機能 ⁃ Ruby on Rails • ⁃ Laravel • • rake db:migrate php artisan make:migration スタンドアローンツール • flyway/flyway • golang-migrate/migrate ©︎ 2023 SRE Holdings Corporation 5

6.

伝統的な手法 • マイグレーションファイルと呼ばれるファイルを追加していく • ${version}_${description}.sql みたいなフォーマット ⁃ version • ⁃ description • • インクリメントする一意の数字(ツールによっては timestamp だったり) 単なる自由文字列 若いバージョンから順に実行 20221020_create_table.sql CREATE TABLE greeting ( `id` int AUTO_INCREMENT, `text` varchar(255), PRIMARY KEY (`id`) ); ©︎ 2023 SRE Holdings Corporation 20221021_create_table.sql ALTER TABLE greeting ADD COLUMN `language` varchar(255); 6

7.

宣言的な手法 • k0kubun/sqldef ⁃ スキーマを修正 CREATE TABLE greeting ( `id` int AUTO_INCREMENT, `text` varchar(255), + `language` varchar(255), PRIMARY KEY (`id`) ); ⁃ コマンドを実行( --dry-run でドライラン) $ mysqldef -uroot test < schema.sql Run: ALTER TABLE greeting ADD COLUMN `language` varchar(255); ©︎ 2023 SRE Holdings Corporation 7

8.

宣言的な手法 • ariga/atlas ⁃ HCL形式でスキーマを記述 ⁃ inspect コマンド • ⁃ diff コマンド • ⁃ 既存のDBからHCLに変換 差分とALTER文表示 apply コマンド • 適用 ©︎ 2023 SRE Holdings Corporation table "greeting" { schema = schema.example column "id" { null = false type = int auto_increment = true } column "text" { null = true type = varchar(255) } column "language" { null = true type = varchar(255) } primary_key { columns = [column.id] } } 8

9.

自分も作ってみた ©︎ 2023 SRE Holdings Corporation

10.

宣言的SQLスキーマ管理ツール(N番煎じ) • • • kota65535/alternator ⁃ ほぼ k0kubun/sqldef の下位互換 ⁃ MySQLのみ対応 モチベーション ⁃ Go勉強したい ⁃ SQLのパーサー作ってみたい ⁃ ツール作って公開したい いいところ ⁃ Diffの出力がイケてる(当社比) ⁃ Terraform Provider がある ©︎ 2023 SRE Holdings Corporation 10

11.

デモ ©︎ 2023 SRE Holdings Corporation

12.
[beta]
Terraform Module
•

kota65535/alternator
provider "alternator" {
dialect = "mysql"
host
= "mydb.dev.example.com"
user
= "root"
}

©︎ 2023 SRE Holdings Corporation

resource "alternator_database_schema" "example" {
database = "example"
schema
= <<EOF
CREATE DATABASE example;
USE example;
CREATE TABLE users
(
id
int PRIMARY KEY,
name varchar(100)
);
CREATE TABLE blog_posts
(
id
int PRIMARY KEY,
title
varchar(100),
body
text,
author_id int,
FOREIGN KEY (author_id) REFERENCES users (id)
);
EOF
}

12

13.

Mavenにリリース → スキーマ適用 ©︎ 2023 SRE Holdings Corporation 13

14.

©︎ 2023 SRE Holdings Corporation