コンテンツに移動
デベロッパー

Liquibase 拡張機能を利用して Cloud Spanner データベースを CI / CD プロセスに統合

2021年5月18日
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 プロセスへ統合できます。

https://storage.googleapis.com/gweb-cloudblog-publish/original_images/liquibase.gif

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
投稿先