Snowflake Connector for MySQL エージェントコンテナの設定¶
重要
MySQL 用Snowflakeコネクタにご興味をお持ちいただきありがとうございます。現在、大幅に改善されたエクスペリエンスを提供する次世代のソリューションに焦点を当てています。したがって、このコネクタを一般提供ステータスに移行することは、現在の製品ロードマップにはありません。このコネクタはプレビュー機能として引き続き使用できますが、将来のバグ修正および改善のサポートは保証されないことに注意してください。新しいソリューションは MySQL 用Openflowコネクタ として利用可能で、より優れたパフォーマンス、カスタマイズ性、強化された展開オプションが含まれます。
このトピックでは、 Snowflake Connector for MySQL エージェントコンテナを設定する手順について説明します。データベースコネクタエージェントは、インフラストラクチャ内で実行され、データベースとSnowflakeに直接接続するコンテナ化されたアプリケーションです。
Snowflake Connector for MySQL エージェントを構成するプロセスには、次のタスクが含まれます。
前提条件の確認とオーケストレーションシステムの選択¶
すべての前提条件を確認および完了し、 エージェントの構成と実行 に進みます。
コンテナオーケストレーションシステムの選択¶
エージェントは標準的なDockerコンテナイメージとしてパッケージ化されており、標準をサポートするオーケストレーションシステムで実行できます。これには、スタンドアロンの Docker インスタンス、 Kubernetes、 RedHat OpenShift、 AWS Fargate などのクラウド管理ソリューションが含まれます。組織には、使用が推奨される既存のシステムが存在することがよくあります。
オーケストレーションシステムに応じて制約が異なるため、このドキュメントのエージェントの構成セクションをよく確認してください。使用中のシステムまたは特定の設定によっては、書き込み可能なボリュームをマウントできない場合があります(エージェントの主な構成オプションで必要な場合)。
後の例では、最も一般的なオーケストレーションシステムであるKubernetesに焦点を当てます。他のシステムでも同様のアプローチをとることが多く、各自の設定に合わせて例を調整する必要があります。
必要なシステムリソースの確認¶
エージェントはメモリを大量に消費するアプリケーションであり、正しく動作するためには最低 6GB の RAM が必要です。
最適な CPUs の数は4です。CPUs が少ないとパフォーマンスが低下する可能性があります。CPUs を増やしてもパフォーマンスは向上しません。
接続の設定¶
エージェントは、データを読み取ろうとするすべてのソースデータベースに接続する必要があります。直接接続を可能にし、 MySQL の従来のクライアントポートに到達できるように、ネットワークとファイアウォールを構成します。通常はポート 3306 です。詳細については、 MySQL のポート参照表 をご参照ください。
ソースデータベースが分離されたネットワークに存在し、単一のエージェントから接続できない場合は、コネクタのネイティブアプリケーションの追加インスタンスをインストールし、それぞれに独自のエージェントをインストールする必要があります。この機能は現在プライベートプレビュー中です。アクセスをリクエストするには、 Snowflakeサポート にご連絡ください。
エージェントは、Snowflakeデプロイメントに直接接続することもできます。使用可能にする必要があるホスト名の詳細については、Allowing Host names をご参照ください。
エージェントの接続のいずれかがプロキシを通過する場合は、エージェントに追加の構成を渡す必要があります。オプションの構成環境変数を確認する をご参照ください。
エージェントの構成と実行¶
エージェントの構成と実行は、次のステップで構成されます。
エージェントの構成 ファイルまたはエージェントの環境変数を準備し、エージェントを起動する
必要に応じて、 PrivateLink 接続を設定する
MariaDB JDBC ドライバーをダウンロードする¶
このドライバーを使用し、エージェントは MySQL データベースに接続してやり取りします。名目上は MariaDB 用のドライバーですが、互換性があります。
ライセンスの制限により、 JDBC ドライバーはエージェントと一緒に配布できないため、自分で提供する必要があります。MariaDB JDBC コネクタ3.4.1 をダウンロードし、エージェントのコンテナにマウントできるディレクトリに保存します。
[オプション]ソースデータベースの SSL 証明書を取得および準備する¶
エージェントが SSL 経由でソースデータベースに接続する場合、接続を検証するために証明書が必要になります。これらの証明書は、エージェントのコンテナ内のJava Truststoreのパス /opt/java/openjdk/lib/security/cacerts で使用できる必要があります。
エージェントに証明書を供給する最も簡単な方法は、ホストマシンの既存の cacerts ファイルに証明書を追加し、そのファイルを実行中のコンテナにマウントすることです。
エージェントの構成の準備¶
エージェントは、コンテナにマウントされた JSON ファイルまたは環境変数、あるいはその両方を組み合わせて構成できます。Snowflakeへの接続に必要なアクセスキーは、ホストのファイルシステムからマウントするか、コンテナシークレットとして提供するか、環境変数として提供することができます。
次のセクションでは、最も簡単なものから最も包括的なものまで、さまざまな構成オプションについて説明します。インフラストラクチャの詳細に基づいてアプローチを選択します。
エージェントを構成する最も簡単な方法は、実行時に2つの JSON ファイルをコンテナにマウントすることです。
snowflake.jsonには、エージェントがSnowflakeアカウントに接続するための構成が含まれています。このファイルは、Snowsightで利用可能なウィザードを使用して、コネクタの設定プロセスの最後にダウンロードします。
datasources.jsonには、エージェントが接続するソースデータベースのリストが含まれています。このファイルは自分で準備する必要があります。
ダウンロード直後、 snowflake.json にはエージェントを表すSnowflakeサービスアカウントの一時的な秘密キーが含まれます。エージェントを初めて起動すると、エージェントは自動で一時的なキーを新しい永続的なキーセットに置き換え、コンテナ内のパス /home/agent/.ssh/ に出力します。エージェントを起動するには、 snowflake.json と /home/agent/.ssh/ のパスの両方を書き込み可能としてマウントする必要があります。
あるいは、エージェントのサービスアカウントに独自の秘密キーを提供することもできます。渡す必要がある環境変数については、 オプションの構成環境変数を確認する をご参照ください。
注意
エージェントがマウントされたファイルまたは環境変数として既存の秘密キーを見つけた場合、 snowflake.json にまだ存在する可能性がある一時的なキーは無視されます。
次のテンプレートを使用して datasources.json ファイルを準備します。
ファイル作成時の注意事項は次のとおりです。
URL を使用して少なくとも1つのデータソースを追加する必要があります。そうしないと、エージェントは起動しません。
エージェントがすべてのデータソースに直接接続できる限り、必要な数だけデータソースを追加できます。
入力した名前は、後でコネクタのネイティブアプリを呼び出してレプリケーションを有効にするために必要な識別子になります。名前はデータソースごとに一意である必要があります。
データソースの名前には、文字と数字のみを含めることができます。すべての小文字は、エージェントによって自動的に大文字に変換されます。
両方の JSON ファイル、 JAR ドライバーを含む JDBC ファイル、新しいキーのセットを出力するディレクトリが準備できたら、コンテナを実行できます。
snowflake.json および datasources.json を介して渡される構成オプションは、環境変数を通じて提供できます。
重要
環境変数は、いずれかの JSON ファイルを通じて提供される設定よりも優先されます。
環境変数名は、両方の JSON ファイル内のパスと同じ構造に従います。ネストされたキーはアンダースコア _ で区切る必要があり、すべての変数には SNOWFLAKE_ のプレフィックスが付けられ、配列エントリには整数インデックスのプレフィックスが付けられる必要があります。
次と同等:
allowList または allowlistPrivatelink 配列のすべてのエントリをコピーする必要はありません。代わりに、 SNOWFLAKE_DEPLOYMENT の type を持つ allowList エントリを見つけ、この URL を使用して、次のように変数 SNOWFLAKE_ENFORCEDURL を設定します。
データソースも同様の構造に従い、 SNOWFLAKE_DATASOURCES_ のプレフィックスが付きます。
例:
次と同等:
オプションの構成環境変数を確認する¶
エージェントは、コンテナに追加の環境変数を設定することで使用できる、次のオプション設定をサポートしています。
SNOWFLAKE_PRIVATEKEYPATHエージェントユーザーの秘密キーを含むファイルへの絶対パスを指定します。これは、通常オーケストレーションシステムのシークレットを介して、独自の秘密キーをコンテナにマウントするときに使用されます。
SNOWFLAKE_PRIVATEKEYPASSWORDエージェントユーザーの秘密キーのパスワードを指定します。エージェントにキーを生成させると、このパスワードが秘密キーに設定されます。既存のキーを再利用する場合、このパスワードは既存の秘密キーにアクセスするために使用されます。
SNOWFLAKE_PRIVATEKEYエージェントユーザーの秘密キーの内容を指定します。コンテナ内のファイルとして秘密キーをマウントできない場合に、これを設定できます。
SNOWFLAKE_ENFORCEDURLエージェント独自の検出メカニズムを上書きして、Snowflakeに接続するための URL を指定します。これは主に PrivateLink デプロイメントに接続するために使用されます。
JAVA_OPTSエージェントのプロセスに渡される追加のJava設定またはプロパティを指定します。
最もよく使用されるものは次のとおりです。
最大Javaヒープサイズを設定するための
-Xmxオプション。Snowflakeでは、この値をコンテナで使用可能なメモリ量から 1GB を引いた値に設定することを推奨しています。たとえば、コンテナで 6GB の RAM が使用可能な場合は、次のように設定します。
エージェントからSnowflakeへの接続にプロキシが必要な場合は、次のように設定します。
ソースデータベースなど、一部のホストまたは IP アドレスのプロキシをバイパスするには、追加の
http.nonProxyHostsプロパティを設定します。パイプ記号(|)を使用して複数のホスト名を区切ります。アスタリスク(*)をワイルドカード文字として使用します。プロキシの認証情報を渡すには、
http.proxyUserおよびhttp.proxyPasswordシステムプロパティを設定します。
PrivateLink 接続の設定¶
PrivateLink デプロイメントに接続する場合は、 SNOWFLAKE_ENFORCEDURL 環境変数を設定して、エージェントが接続する URL を明示的に指定する必要があります。
アカウントの PrivateLink URL を確認するには、次のいずれかの方法を実行します。
構成プロセス中に取得した
snowflake.jsonファイルを開きます。allowlistPrivatelinkという名前の配列を見つけ、次にSNOWFLAKE_DEPLOYMENTのtypeを持つエントリーを見つけます。SYSTEM$GET_PRIVATELINK_CONFIG 関数を使用します。
Snowflakeのアクセスキーを理解する¶
エージェントは、Snowsightのコネクタのセットアップウィザードで作成されたサービスアカウントとして、アクセスキーのセットを使用してSnowflakeと認証します。設定ウィザードは一時的なアクセスキーを作成し、 秘密 キーを snowflake.json ファイルの temporaryPrivateKey という名前のフィールドに追加します。
エージェントは、最初の起動時にこれらの一時的なキーを次のように置き換えます。
新しいアクセスキーのセットを生成し、コンテナ内の
/home/agent/.sshにdatabase-connector-agent-app-private-key.p8およびdatabase-connector-agent-app-public-key.pubとして保存します。このディレクトリは、コンテナがシャットダウンしてもキーが保持されるように、コンテナへの外部の書き込み可能なボリュームとしてマウントする必要があります。新しいキーを使用するようにサービスアカウントを変更します。
snowflake.jsonファイルからtemporaryPrivateKeyフィールドを削除します。
最初のキーの置き換え後、エージェントはアクセスキーをローテーションしません。
エージェントによって生成されたキーを使用できます。または、独自のセットを作成し、サービスアカウントを変更して、エージェントに秘密キーを提供することもできます。
エージェントの秘密キーの検出順序は次のとおりです。
SNOWFLAKE_PRIVATEKEY環境変数を使用して渡される任意のキー。この値が見つかった場合、コネクタはsnowflake.jsonからの一時的なキーを無視します。/home/agent/.ssh/database-connector-agent-app-private-key.p8にマウントされたボリュームで見つかったキー。このファイルが見つかった場合、コネクタはsnowflake.jsonからの一時的なキーを無視します。snowflake.jsonファイルのtemporaryPrivateKeyフィールドの値。
Kubernetesを使用したオーケストレーションの構成¶
注釈
このセクションではKubernetesに焦点を当てていますが、コネクタはどのコンテナオーケストレーションシステムでも起動できます。構成構文は、多くの場合似ています。詳細については、システムのドキュメントをご参照ください。
Kubernetesを使用する場合、書き込み可能なボリュームをマウントすることは通常できません。そのため、エージェントはSnowflakeユーザーアカウントのキーを自動的に置き換えることができません。キーのセットを手動で作成し、ユーザーを変更してから、エージェントを実行しているコンテナに通常はマウントされたシークレットとして秘密キーを提供する必要があります。Snowflakeユーザーのキーペア設定の詳細については、キーペア認証の構成 をご参照ください。
秘密情報は、 HashiCorp Vaultなどの安全な保管場所に保存することを推奨します。これらの保管場所は通常、Kubernetesとの既存の統合を備えています。たとえば、 Vaultは専用のオペレーターを提供 しています。統合の詳細は、コンテナオーケストレーションシステムおよび安全な保管場所に固有のものになります。詳細については、それぞれのドキュメントをご参照ください。
Kubernetesは通常マルチノードクラスターで実行され、ホストマシンからファイルをマウントする方法はありません。エージェントのコンテナに構成 JSON ファイルを供給するには、3つのファイルすべてを保存する Kubernetes ConfigMap を作成します。
Kubernetesでエージェントを構成する基本的な例を次に示します。
ConfigMap ドライバーと JDBC を保存する
snowflake.jsonを作成します。Tip
この記事の執筆時点では、 JDBC ドライバー JAR のサイズは約 650KB で、Kubernetesによって課せられた ConfigMap の 1MB という制限をはるかに下回っています。これほど多くのデータを ConfigMap に入れたくない場合は、エージェントの公式なものに基づいて、 JDBC JAR を追加したカスタムDockerイメージを構築するのが一般的なパターンです。
エージェントユーザーの秘密キーと
datasources.jsonの内容を保存するシークレットを作成します。エージェントのPodを構成し、構成ファイルと秘密キーをボリュームとしてマウントします。
Podの構成を YAML ファイルとして保存し、たとえば
database-connector.yamlとして開始します。
エージェントの監視¶
エージェントのコンテナは、Dockerを使用してアクセスできる stdout にログを出力します。たとえば、コンテナの名前が database-connector-agent の場合、ログを表示するコマンドは次のようになります。
これらのログはSnowflakeにもストリーミングされます。アクセス方法については、 Snowflake Connector for MySQL のモニター をご参照ください。
ヘルスチェックエンドポイントへのアクセス¶
エージェントは健全性の情報を含む HTTP エンドポイントを公開します。オーケストレーションシステムでエージェントを実行するときにこのエンドポイントを使用すると、エージェントが完全に起動したかどうか、また健全であるかどうかを判断できます。エンドポイントはポート 8080 とパス /actuator/health で使用できます。
エンドポイントをKubernetesのライブネスプローブとして使用するには、Pod構成に次を追加します。
次のステップ¶
これらの手順を完了したら、 Snowflake Connector for MySQL のレプリケーションの構成 のステップに従います。