.. _rdb: ### RDB ### マネージド RDB のインスタンス初期化及び、データベースの初期設定を行います。 RDB 内に格納されたデータの所有権はユーザーに帰属するため、デフォルトでは パッケージ削除時にインスタンス及びデータベースの削除は行いません。 +-------+--------+ | | 設定値 | +=======+========+ | Chart | rdb | +-------+--------+ .. IMPORTANT:: Google Cloud 環境では一旦インスタンスの削除を行なうと、同一名のインスタンスは7日間の間作成できなくなります。 対応サービス ============ * Azure: `Azure Database for MySQL`_ (Flexible Server), `Azure Database for PostgreSQL`_ (Flexible Server), `Azure SQL Database`_ * Google Cloud: `Cloud SQL`_ * AWS: `Amazon RDS`_ パッケージの機能 ================ 本パッケージでは、各クラウドの マネージド RDB のインスタンスに関する以下の機能を提供します。 * RDB インスタンスの作成。 * インスタンスのマシンタイプに関する設定。 * インスタンスのデーターベースエンジンのバージョン設定。 * インスタンスに割り当てるストレージの設定。 (Azure/AWSのみ対応) * 高可用性に関する設定。 * バックアップに関する設定。 * RDBインスタンスに接続するネットワークの設定。 * Azureの場合 * ファイヤーウォールルールの設定。 * 接続可能な VNET の設定。 * パブリック・プライベートアクセスの制御。 * AWSの場合 * 接続可能な subnet の設定。 * セキュリティグループの設定。 * Google Cloudの場合 * プライベートアクセスのみ許容する状態で構築。 * パブリック・プライベートに関わらず、Cloud SQL Auth Proxy を利用してアクセスを行います。 * インスタンス作成時の初期データベースの作成。 * Google Cloudの場合 * 複数のデータベースを作成可能。 * Azureの場合 * MySQL/PostgreSQLの場合、複数のデータベースを作成可能。 * SQL Databaseの場合、単一のデータベースを作成可能。 * AWSの場合 * 単一のデータベースを作成可能。 * 初期データベースユーザーの作成。 * Google Cloudの場合、複数の初期ユーザーを作成可能。 * Azure/AWSの場合、単一の初期ユーザーを作成可能。 SQL Instance の追加 ------------------- クラウドサービスのマネージド SQL インスタンスを作成できます。 * values の ``instance.create`` を true に設定し、新規パッケージインストールを行うことでインスタンスが作成されます。 * ``instance.create`` が false の場合は既存のインスタンスに対するネットワーク設定のみ行われます。 .. IMPORTANT:: インスタンスの作成には数分から数十分の時間がかかるため、初回インストール時にはデータベースを利用する他のアプリケーションがデータベースインスタンスの起動前にデータベースアクセスを行い、エラーにならないよう、インストール手順を考慮する必要があります。 (CNAP の提供するパッケージを利用してアプリケーションのデプロイを行う場合は、インスタンスの起動までコンテナの起動を待つため、アプリケーション起動に時間がかかる場合があります。) .. IMPORTANT:: 誤操作によるインスタンスの削除を防ぐため、本パッケージでは ``keepOnDelete`` の値がデフォルトで **true** に設定されています。 true の状態でパッケージをアンインストールしてもデータベースインスタンスは残るため、実際に削除する際は、 ``keepOnDelete`` を **false** に更新した後でアンインストールを行う必要があります。 .. IMPORTANT:: Azure ではインスタンスに設定した値が DB インスタンスのホスト名に使用されるので、インスタンス名は全 Azure アカウントで一意になるよう設定する必要があります。 Database 接続 ------------- Azure ~~~~~ ``[RELEASE_NAME].mysql.database.azure.com`` を接続先ホストに設定します。 Google Cloud ~~~~~~~~~~~~ 作成したインスタンスへの接続には Cloud SQL Auth Proxy を利用します。 CNAP の提供する :doc:`/managed/basic-deployment` パッケージ等を利用する場合は、インスタンス名に本パッケージで設定した ``instance.name`` の値を設定します。 AWS ~~~ AWS マネジメントコンソールから作成した RDS のエンドポイントを確認し、接続先ホストとして設定します。 database 追加 ------------- 新規に作成するSQLインスタンスへデータベースを追加できます。 また、既存SQLインスタンスへのデータベースの追加は以下の2種類の方法で行うことができます。 * values の ``databases`` リストにデータベースを追加し、パッケージのアップデートを行います。 * values の ``instance.create`` を false に設定し、新規パッケージインストールを行います。 .. IMPORTANT:: AWS と Azure SQL Database では 1 つの SQL インスタンスに対して作成できるデータベースが 1 つのため、values の ``databases`` リストの第一要素のみが有効になります。 .. WARNING:: Google Cloud SQL では異なるインスタンスに対してであっても同一 namespace に同じ名前の Database を作成することができません。 異なるインスタンスに同じ Database を作成したい場合は Application マニフェストを配置する namespace を分ける必要があります。 Database User 追加 ------------------ データベースへユーザを追加できます。 Azure ~~~~~ * values の ``users`` リストにユーザの名前、パスワードの登録されたSecret名を指定します。 * Azure では DB 作成時にサーバー管理者ユーザのみを作成するため values の ``users`` リストの第一要素のみが有効です。 * values の ``users[0].secret.key`` には external-secrets が参照するキーマネージメントサービスに保存されている、 データベースパスワード情報のキー名を指定します。 + external-secrets が参照するキーマネージメントサービスとは、Azureでは、cnap-顧客IDのキーコンテナです。 * パスワードを事前にキーマネージメントサービスに登録します。 .. WARNING:: Google Cloud SQL では異なるインスタンスに対してであっても同一 namespace に同じ名前の Database User を作成することができません。 異なるインスタンスに同じ Database User を設定したい場合は Application マニフェストを配置する namespace を分ける必要があります。 Google Cloud ~~~~~~~~~~~~ * values の ``users`` リストにユーザの名前、パスワードの登録されたSecret名を指定します。 * values の ``users[].secret.key`` には external-secrets が参照するキーマネージメントサービスに保存されている、 データベースパスワード情報のキー名を指定します。 + external-secrets が参照するキーマネージメントサービスとは、Google Cloudでは、クラスタの属するProjectのSecret Managerです。 * パスワードを事前にキーマネージメントサービスに登録します。 AWS ~~~ * values の ``users`` リストにユーザの名前、パスワードの登録された SecretManager の情報を指定します。 * AWS では DB 作成時にマスタユーザのみを作成するため values の ``users`` リストの第一要素のみが有効です。 * values の ``users[0].secret.name`` , ``users[0].secret.key`` には マスタユーザのパスワードが登録されている Secret Manager のシークレット名、およびデータベースパスワード情報のキー名を指定します。 * パスワードを事前にキーマネージメントサービスに登録します。 Azure Resource Group の指定 -------------------------------- Azure クラウドサービスのリソースグループは values の ``instance.owner.azure.resourceGroup.name`` で指定できます。 リソースグループを指定する場合は、事前にリソースグループが作成されていることを確認してください。 リソースグループは `UserConfig`_ で作成可能です。 リソースグループを指定しない場合には、namespaceと同名のリソースグループにリソースが作成されます。 Azure Database Firewallルール の追加 ------------------------------------ Azure Databese に Firewallルールを追加できます。 * values の ``network.azure.firewallRules.name`` にFirewallルール名を指定してください。 * values の ``network.azure.firewallRules.startIpAddress`` 、``azure.firewallRules.endIpAddress`` で接続を許可するIPアドレス範囲を指定してください。 * 0.0.0.0 - 0.0.0.0 を指定すると、[Azure サービスへのアクセスを許可]がオンに設定されます。 Azure プライベートエンドポイント の追加 ------------------------------------------ プライベートエンドポイント、プライベートDNSゾーンを作成することができます。 VNET内のリソースから安全にデーターベースに接続するためには、プライベートエンドポイントを使用します。 以下のように、プライベートエンドポイントを作成するVNET, サブネットを指定します。 1つのVNETにプライベートエンドポイントを持つ2つ以上のSQL Serverを構築する場合など既存のプライベートDNSゾーンを利用する場合、 ``network.azure.privateEndpoint.privateDnsZone.create`` をfalseに指定します。 既存のプライベートDNSゾーンのリソースグループが ``network.azure.privateEndpoint.vNetResourceGroup`` と異なる場合、 ``network.azure.privateEndpoint.privateDnsZone.resourceGroupName`` を指定します。 プライベートDNSゾーン名は ``privatelink.database.windows.net`` 固定です。 .. code-block:: yaml network: azure: privateEndpoint: create: true vNetResourceGroup: managed-common-rg vNetName: cnap-vnet01 subnetName: cnap-db-subnet01 privateDnsZone: create: true マイグレーション ================= 1.2.0 --------- 1.2.0 以前のバージョンから 1.2.0 以降のバージョンにアップデートすると、Azure Database VNETルールが利用できなくなります。 Azure Database VNETルールを利用していた場合、設定を削除して、プライベートエンドポイントを新たに設定する必要があります。 Values ====== Default values -------------- .. literalinclude:: values/rdb.values.yaml :language: yaml Schema reference ---------------- .. jsonschema:: schema/rdb.schema.json .. _MASTER-CONTAINER-HELM-RDB: https://github.com/sbopsv/MASTER-CONTAINER-HELM-RDB .. _Cloud SQL: https://cloud.google.com/sql .. _Azure Database for MySQL: https://docs.microsoft.com/ja-jp/azure/mysql/ .. _Azure Database for PostgreSQL: https://docs.microsoft.com/ja-jp/azure/postgresql/ .. _Azure SQL Database: https://learn.microsoft.com/ja-jp/azure/azure-sql/database/?view=azuresql .. _Amazon RDS: https://aws.amazon.com/jp/rds/ Example ======= Example1-1. Azure mysql ----------------------- .. literalinclude:: example/rdb/example1_1_azure_mysql.yaml :language: yaml Example1-2. Azure SQL Database ------------------------------- .. literalinclude:: example/rdb/example1_2_azure_sqlserver.yaml :language: yaml Example2. Google Cloud postgres ------------------------------- .. literalinclude:: example/rdb/example2_gc_pgsql.yaml :language: yaml Example3. AWS mysql ------------------------------- .. literalinclude:: example/rdb/example3_aws_mysql.yaml :language: yaml Change Log ========== .. changelog:: :changelog-url: https://msp-project-gcp.an.r.appspot.com/managed/rdb.html :github: https://github.com/sbopsv/MASTER-CONTAINER-HELM-RDB/releases/ .. _MASTER-CONTAINER-HELM-RDB: https://github.com/sbopsv/MASTER-CONTAINER-HELM-RDB .. _UserConfig: https://github.com/sbopsv/MASTER-CONTAINER-APP-OPERATOR#userconfig