Liquibase 拡張機能を利用して Cloud Spanner データベースを CI / CD プロセスに統合
Google Cloud Japan Team
※この投稿は米国時間 2021 年 5 月 4 日に、Google Cloud blog に投稿されたものの抄訳です。
2 月に Liquibase Cloud Spanner 拡張機能のベータ版を発表しました。これにより、デベロッパーは Liquibase のオープンソース データベース ライブラリを利用して、Cloud Spanner でのスキーマ変更を管理、自動化できます。このたび、この Liquibase Cloud Spanner 拡張機能の一般提供の開始を発表いたします。
Liquibase とは
Liquibase は、さまざまなデータベースに対応したオープンソース ライブラリで、データベースのスキーマ変更のトラッキング、管理、自動化に利用できます。CI / CD プロセスにデータベースを統合する Liquibase の機能を使用すれば、DevOps のプラクティスをより徹底して採用できます。SQL だけでなく、XML、YAML、JSON などの宣言型の形式もサポートしています。Liquibase には、変更を適用する前にレビューを行い、必要な変更を異なる環境の異なるデータベースに段階的に適用し、ロールバックする機能があります。
Liquibase を利用する際、データベースのスキーマ変更を変更セットと呼び、すべての変更セットが変更ログで追跡されます。この変更セットと変更ログにより、データベースのバージョン管理が可能になり、データベース スキーマの移行を簡単に CI / CD プロセスへ統合できます。


Liquibase Cloud Spanner 拡張機能でサポートされている機能
Cloud Spanner Liquibase 拡張機能では、Liquibase を利用して Cloud Spanner データベースをターゲットにすることができます。この拡張機能は、Liquibase と Cloud Spanner の両方のほぼすべての機能と、DML と DDL のほぼすべてのコマンドをサポートしています。
以下の Liquibase ChangeType が拡張機能でサポートされています。
createTable、dropTable、addColumn、modifyDataType、addNotNullConstraint、dropColumn、createIndex、dropIndex、addForeignKeyConstraint、dropForeignKeyConstraint、dropAllForeignKeyConstraints、addLookupTable
以下のデータ DML ChangeType が拡張機能でサポートされています。
insert、update、loadData、loadUpdateData
ベスト プラクティスと制限事項
Cloud Spanner Liquibase 拡張機能は、Cloud Spanner と Liquibase の機能を可能な限りサポートしていますが、サポートが不可能な機能や、カスタム SQL の変更をしないとサポートできない機能があります。Liquibase を Spanner で効果的に使用するために、ベスト プラクティスと制限事項の概要を確認してください。制限事項の一覧については、こちらのページをご覧ください。
対応する Liquibase 変更タイプがない Cloud Spanner 機能に ModifySql コマンドを使用する
Cloud Spanner の機能の中には、Liquibase に対応する変更タイプがないものがあります。これらの機能をサポートするには、変更セットに ModifySql コマンドを追加して、生成された SQL を修正します。
スキーマ更新時の DDL 制限とベスト プラクティス
Cloud Spanner では、スキーマの更新頻度を制限することや、大規模なスキーマ変更の影響を考慮することなどがスキーマ更新時のベスト プラクティスとして推奨されています。有効な手法の一つは少数の変更セットを適用することです。または、SQL 変更の使用や、バッチ ステートメントを使用した DDL のバッチ処理も検討できます。
Cloud Spanner でサポートが限定的またはサポートされていない Liquibase の変更タイプ
Liquibase でサポートされている変更タイプの中には、Cloud Spanner でサポートされていないものや、特定の制限のかかるものがあります。たとえば、addPrimaryKey と dropPrimaryKey は、Cloud Spanner ですべてのテーブルに主キーが必要とされるため、サポートされていません。主キーはテーブル作成時に定義されなければならず、後から追加、削除することはできません。
これらの変更タイプの一覧と回避策については、ドキュメントのこのセクションをご覧ください。
Cloud Spanner でサポートされていないデータベース機能
Spanner ではサポートされていないデータベース機能があります。以下の機能を Liquibase から使用しようとするとエラーが発生します。
自動増分列
シーケンス
列のデフォルト値の定義
一意の制約(代わりに一意のインデックスを使用)
ストアド プロシージャ
ビュー
テーブルと列の備考
ご利用方法
Cloud Spanner と Liquibase を併用することで、データベース スキーマの移行を CI / CD パイプラインに統合できます。Cloud Spanner Liquibase 拡張機能をお試しになりたい方は、こちらから最新版をダウンロードしてください。Liquibase と Cloud Spanner の 統合ガイドにアクセスすると、変更ログを作成する方法、Liquibase で変更ログを実行する方法、変更を検証する方法を確認できます。Liquibase 拡張機能は、実際の Spanner インスタンスやエミュレータでも使用できます。
さらに詳しい情報や変更ログのサンプルについては、liquibase-spanner の GitHub リポジトリをご覧ください。皆様からのフィードバックをお待ちしております。ご提案やご質問、問題などがございましたら、Issue Tracker よりご報告ください。
-Cloud デベロッパー アドボケイト Jan Kleinert