エンタープライズにおける|dcm|のユースケース¶
このトピックでは、複数のプロジェクトの管理、複数の環境における作業、プロジェクトにおけるコラボレーションなど、エンタープライズ環境における|dcm|の使用方法について説明します。
複数のDCMプロジェクトを使用するタイミング¶
|dcm-object|を複数のプロジェクトに分割するかどうか、またどのように分割するかを決定する際には、所有権とテンプレート化を検討してください。
所有権¶
各プロジェクトには、定義されたすべてのオブジェクトをデプロイできる所有者ロールが1つあります。権限付与により、プロジェクト内の個々のオブジェクトに対する詳細なアクセス管理が可能になります。ただし、プロジェクトへの変更のデプロイを担当するユーザーグループが異なる場合は、一般に、|dcm-object|をそれに応じて分割することが理にかなっています。
以下はシナリオ例です。
プラットフォーム管理者は、データベースとウェアハウスをデプロイし、チーム管理者ロールを作成して、そのデータベース内の定義された一連のオブジェクトタイプに対するCREATE権限と、定義された一連のアカウントレベル統合へのアクセス権をチーム管理者に付与します。
チーム管理者は、そのデータベース内のスキーマや動的テーブルを整理する方法を決定したり、更新頻度を微調整したり、個々のチームメンバーに対してより詳細な読み取りアクセス権を付与したりできるようになりました。
以下は解決策です。
プラットフォーム管理者は、チーム向けにハイレベルなインフラストラクチャをデプロイし、そのデータベース内で|dcm-object|プロジェクトを作成する権限をチーム管理者に付与します。
チーム管理者は、チームデータベース内に1つ以上のプロジェクトを作成してテーブルやチームメンバーへの権限付与を管理することで、さらに|dcm|を活用できるようになりました。
テンプレート変数¶
|dcm-object|において、内容がほぼ共通しており、今後もその状態を維持するべき一連のオブジェクトを定義する場合は、それらをパラメーター化されたテンプレートとして一度定義する方が一般的に便利です。
以下はシナリオ例です。
プラットフォームチームは、組織内の各リージョンチーム向けにデータベースをデプロイします。
新たなリージョンは、今後追加されていく予定です。
すべてのリージョンにおいて、スキーマ、ランディングテーブル、ロール、およびウェアハウスの設定はほぼ同じである必要があります。
このデータベーステンプレートへの変更は、すべてのチームに適用する必要があります。例えば、読み取り専用ロールを追加する場合です。
以下は解決策です。
マニフェストプロファイルにリストされている各リージョンチームに対して、単一の定義セットをループ処理で実行できます。
このテンプレートの多くの要素に相違が生じ始め、テンプレート化条件の数が増えると、個別のオブジェクト定義を持つ別々のDCMプロジェクトとして読み取りやメンテナンスを行う方が容易になる場合があります。
複数の環境における|dcm|の使用¶
次の図は、|dcm-object|を複数の環境にデプロイするための典型的なワークフローを示しています。
個別のアカウントと個別のデータベース¶
Snowflakeでは通常、各環境を個別のSnowflakeアカウントとして設定することを推奨しています。これにより、本番環境のインフラストラクチャと実験的な開発を完全に分離し、本番データへの開発者のアクセスを確実に制限できます。
ただし、アクセス管理を慎重に行うと、1つのSnowflakeアカウントで複数の環境を適切に管理できます。これは、データベースが明確に分離されている場合は簡単ですが、アカウントレベルのオブジェクトや統合が関係する場合は、より困難になる可能性があります。
単一アカウント設定の利点は、本番環境に変更をデプロイする前に、本番環境のインフラストラクチャとデータを簡単にクローンしてその変更をテストできることです。ただし、本番データとインフラストラクチャの一部を組織内部のデータ共有などを介して別のアカウントにコピーする場合は、コストが高くなる可能性があります。
|dcm-object|のテンプレート化への影響¶
単一アカウント設定では、各環境で異なるオブジェクト名を使用する必要があります。例えば、``EMEA_DB``や``EMEA_ADMIN``を``EMEA_DB_DEV``や``EMEA_ADMIN_DEV``から分離しておくためです。Snowflakeでは、複数アカウント設定においてもこの方法を推奨しています。名前をテンプレート化すると、独立した開発のために``EMEA_DB_DEV_JOHN``や``EMEA_DB_DEV_MARY``のようなエンティティの複数インスタンスを共存させ、さまざまな解決策をテストするためのサンドボックス環境を迅速に作成および破棄できます。
これは、データベース、ロール、ウェアハウスなど、すべてのアカウントレベルのオブジェクトに適用されます。次に、これらのテンプレート化された名前を、ネストされたオブジェクトのすべての完全修飾名に適用する必要があります。