クライアント接続のリダイレクト

クライアントリダイレクトを使用すると、ビジネス継続性と障害復旧のために、またはアカウントを別のリージョンやクラウドプラットフォームに移行するときに、クライアント接続を異なる リージョン のSnowflakeアカウントにリダイレクトできます。

このトピックの内容:

クライアントリダイレクトの紹介

クライアントリダイレクトは、Snowflake 接続 オブジェクトを介して実装されます。接続オブジェクトは、ユーザーがSnowflakeクライアントに渡す安全な 接続 URL を保存します。

接続 URL は、共通ドメイン名に加えて、組織名と接続オブジェクト名で構成されます。

<組織名>-<接続名>.snowflakecomputing.com

アカウント管理者は、組織内の特定のSnowflakeアカウントをポイントするように接続 URL をプロビジョニングします。状況に応じて、管理者は接続 URL を組織内にある別のリージョンまたはクラウドプラットフォームの別のアカウントにポイントできます。エンドユーザー接続は自動的にリダイレクトされます。

クライアントリダイレクトフロー

  1. クライアントリダイレクトの構成 (このトピック内)のステップを実行して、クライアント接続用の接続 URL を作成します。これには、プライマリ接続とリンクされたセカンダリ接続の作成が含まれます。

  2. 接続 URL を使用して接続するようにSnowflakeクライアントを更新します。 接続 URL の使用 (このトピック内)には、サポートされているクライアントと接続の詳細のリストが含まれています。

  3. プライマリ接続が配置されているリージョンでサービスが停止した場合は、 クライアント接続のリダイレクト (このトピック内)のステップを実行して接続 URL を更新し、セカンダリ接続にリダイレクトします。

  4. 停止が解決したら、 クライアント接続のリダイレクト のステップを実行して、クライアント接続を元のプライマリ接続にリダイレクトします。

次の図は、同じ組織内にあるが、同じまたは異なるクラウドプラットフォーム上の異なるリージョン(Region ARegion B)にある2つのアカウントのクライアントリダイレクトフローを示しています。

クライアント接続の接続 URL は、 Region A のアカウント用に構成されています。

Normal client connections

Region A でサービスが停止すると、クライアント接続に失敗します。

Failed client connections

これで、クライアント接続の接続 URL が Region B のアカウント用に構成されました。

Redirected client connections

次の SQL ステートメントは、クライアントリダイレクトワークフローを通過します。各ステップについては、このトピックの次のセクションで詳しく説明します。

通常のクライアント接続: クライアントリダイレクトの構成

ソースアカウントでの実行
-- Create a new primary connection
CREATE CONNECTION myconnection;

-- View accounts in your organization that are enabled for replication
-- Note the account_name for the ALTER CONNECTION statement below
SHOW REPLICATION ACCOUNTS;

-- Configure failover accounts for the primary connection
ALTER CONNECTION myconnection
  ENABLE FAILOVER TO ACCOUNTS myorg.myaccount2, myorg.myaccount3;

-- View the details for the connection
SHOW CONNECTIONS;
ターゲットアカウントでの実行
-- EXECUTED ON TARGET ACCOUNT

-- Create a secondary connection linked to the primary connection
-- The secondary connection name must be the same as the primary connection name
CREATE CONNECTION myconnection
  AS REPLICA OF myorg.myaccount1.myconnection;

-- If either AWS PrivateLink or Azure Private Link is enabled for your account, you must create
-- or update a DNS CNAME record for your connection URL. See the relevant section in this topic for details.

ソースリージョンで停止が発生: フェールオーバー

ターゲットアカウントでの実行
-- If an outage occurs in the region where the primary connection is located,
-- promote a secondary connection to serve as the primary connection
ALTER CONNECTION myconnection PRIMARY;

-- If either AWS PrivateLink or Azure Private Link is enabled for your account, you must
-- update the DNS CNAME record for your connection URL. See the relevant section in this topic for details.

解決された停止: フェールバック

ソースアカウントでの実行
-- Once the outage is resolved, promote the original primary connection back to primary
-- Executed from the account with the connection you want to promote to primary
ALTER CONNECTION myconnection PRIMARY;

-- If either AWS PrivateLink or Azure Private Link is enabled for your account, you must
-- update the DNS CNAME record for your connection URL. See the relevant section in this topic for details.

クライアントリダイレクトの構成

このセクションでは、接続グループにプライマリ接続と1つ以上のセカンダリ接続を作成する方法について説明します。

前提条件

アカウントでクライアントリダイレクト機能を有効にするには、 Snowflakeサポート にお問い合わせください。この機能を有効にするには、アカウントで 組織 機能も有効にする必要があります。

注釈

アカウント管理者(ACCOUNTADMIN ロールを持つユーザー)のみがこのセクションの SQL コマンドを実行できます。

プライマリ接続の作成

ご用心

Snowflakeは、システムで作成されたときに、組織に一意の生成された名前を割り当てました。組織名は、接続オブジェクトで定義され、アカウントにアクセスするためにSnowflakeクライアントによって送信された接続 URL の一部です。接続オブジェクトを作成する前に、Snowflakeの組織名が適切であることを確認します。システムにある組織名を変更するには、 Snowflakeサポート にお問い合わせください。

  1. CREATE CONNECTION を使用して新しいプライマリ接続を作成します。各プライマリ接続の名前は、組織内で一意である必要があります。

    接続名は、Snowflakeアカウントへの接続に使用される接続 URL の一部として含まれています。

    たとえば、 myconnection という名前の接続を作成します。

    CREATE CONNECTION myconnection;
    
  2. ALTER CONNECTION ... ENABLE FAILOVER TO ACCOUNTS ステートメントを使用して、このプライマリ接続を変更します。この接続(つまり、セカンダリ接続)のフェールオーバーオプションを保存できる、組織内にあるアカウントのコンマ区切りのリストを提供します。

    複製が有効になっている組織内のアカウントの完全なリストを表示するには、 SHOW REPLICATION ACCOUNTS を実行します。

    たとえば、 myorg 組織のアカウント myaccount2myaccount3 に、それぞれ myconnection 接続のセカンダリ接続を保存することを許可します。

    ALTER CONNECTION myconnection ENABLE FAILOVER TO ACCOUNTS myorg.myaccount2, myorg.myaccount3;
    
  3. SHOW CONNECTIONS コマンドを実行して、接続の詳細を表示します。

    SHOW CONNECTIONS;
    
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+
    | snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                            |
    |--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------|-------------------------------------|-------------------------------------------|
    | AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | MYORG-MYCONNECTION.snowflakecomputing.com |
    +--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+
    

セカンダリ接続の作成

CREATE CONNECTION ... AS REPLICA OF を使用してプライマリ接続にリンクされた、1つ以上のアカウントでセカンダリ接続を作成します。セカンダリ接続を作成できるのは、 プライマリ接続の作成 の ALTER CONNECTION ... ENABLE FAILOVER TO ACCOUNTS ステートメントで指定したアカウントのみであることに注意してください。

各ターゲットアカウントで CREATE CONNECTION ... AS REPLICA OF ステートメントを実行して、指定したプライマリ接続のレプリカを作成します。

重要

各セカンダリ接続は、プライマリ接続と同じ名前である 必要があります。接続名は接続 URL に含まれています。

セカンダリ接続を作成するアカウントで、このセクションの SQL ステートメントを実行します。

-- View all connections
SHOW CONNECTIONS;

+--------------------+-------------------------------+------------------+-------------------+-----------------+---------------+-------------------------------+------------------------------------+--------------------------------------------+
| snowflake_region   | created_on                    | account_name     | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts       | connection_url                             |
|--------------------+-------------------------------+------------------+-------------------+-----------------+---------------+-------------------------------|------------------------------------|--------------------------------------------|
| AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1 | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3 | MYORG-MYCONNECTION.snowflakecomputing.com  |
+--------------------+-------------------------------+------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+-------------------------------------------+

-- Copy the PRIMARY column value: organization name, account name, and connection name of the primary connection.

-- Log into the ``aws_us_east_1`` account.
-- Create a secondary connection named ``myconnection`` that is linked to the ``myconnection`` primary connection.
-- Paste the PRIMARY column value from the SHOW CONNECTIONS output after the AS REPLICA OF clause.
CREATE CONNECTION myconnection
  AS REPLICA OF MYORG.MYACCOUNT1.MYCONNECTION;

-- Verify the secondary connection
SHOW CONNECTIONS;

+--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+--------------------------------------------+
| snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                             |
|--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------|-------------------------------------|--------------------------------------------|
| AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | MYORG-MYCONNECTION.snowflakecomputing.com  |
| AWS_US_EAST_1      | 2020-07-22 13:52:04.925 -0700 | MYORG.MYACCOUNT2    | MYCONNECTION      | NULL            | false         | MYORG.MYACCOUNT1.MYCONNECTION |                                     | MYORG-MYCONNECTION.snowflakecomputing.com  |
+--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+--------------------------------------------+

接続 URL の使用

このセクションでは、さまざまなSnowflakeクライアントの構成で接続 URL を参照する手順について説明します。

サポートされているSnowflakeクライアント

次のSnowflakeクライアントバージョン(およびそれ以上)は、クライアントリダイレクトをサポートしています。

Snowflakeクライアント

バージョン(およびそれ以上)

SnowSQL

1.1.82

Python用Snowflakeコネクタ

1.8.3

Node.jsドライバー

1.2.0

Go Snowflakeドライバー

1.2.0

.NET ドライバー

1.0.0

JDBC ドライバー

3.8.4

ODBC ドライバー

2.19.4

Snowflakeクライアントの構成

Snowflakeに接続するときは、接続 URL に次のホスト名を使用します。

ホスト名: <組織名>-<接続名>.snowflakecomputing.com

条件:

<組織名>

Snowflake組織の名前。ユーザーが接続するSnowflakeアカウントは、この組織に含まれています。

<接続名>

接続オブジェクトの名前。

重要

AWS PrivateLink またはMicrosoft Azure Private Link

AWS PrivateLink またはMicrosoft Azure Private Linkを使用してSnowflakeアカウントに接続しているお客様: snowflakecomputing.com の直前の URL に privatelink セグメントを追加します。

<組織名>-<接続名>.privatelink.snowflakecomputing.com

Snowflakeの従来のウェブインターフェイス

ウェブブラウザーに次の URL を入力します。

https://<organization_name>-<connection_name>.snowflakecomputing.com/

例:

https://MYORG-MYCONNECTION.snowflakecomputing.com/

Snowflakeの新しいウェブインターフェイス

app.snowflake.com のアカウント名フィールドに次のように入力します。

<organization-name>-<connection-name>

例:

MYORG-MYCONNECTION

<組織>-<接続> を使用してログインすると、Snowsightは現在のプライマリ接続における特定のリージョンとロケーターに移動します。停止中、接続がリダイレクトされたら、ユーザーは <組織>-<接続> を介して再度ログインし、新しいプライマリに接続する必要があります。

SnowSQL

SnowSQL config ファイルの accountname 接続パラメーターで接続 URL のホスト名を指定します。 config ファイルについては、 SnowSQL の構成 をご参照ください。

accountname = <organization_name>-<connection_name>
username = <username>
password = <password>

例:

accountname = MYORG-MYCONNECTION
username = jsmith
password = mySecurePassword

Python用Snowflakeコネクタ

Connection オブジェクトを呼び出すときに、 account 接続パラメーターで接続 URL のホスト名を指定します。詳細については、 Pythonコネクタ API および Pythonコネクタの使用 をご参照ください。

con = snowflake.connector.connect (
      account = <organization_name>-<connection_name>
      user = <username>
      password = <password>
)

例:

con = snowflake.connector.connect (
      account = MYORG-MYCONNECTION
      user = jsmith
      password = mySecurePassword
)

JDBC ドライバー

接続文字列で接続 URL のホスト名を指定します。詳細については、 JDBC ドライバーを構成する をご参照ください。

jdbc:snowflake://<organization_name>-<connection_name>.snowflakecomputing.com/?user=<username>&password=<password>

例:

jdbc:snowflake://MYORG-MYCONNECTION.snowflakecomputing.com/?user=jsmith&password=mySecurePassword

または、接続文字列と、プロパティのセットを使用してホスト名を指定します。

String uri = "jdbc:snowflake://<organization_name>-<connection_name>.snowflakecomputing.com";

Properties props = new Properties();
props.put("user", "<username>");
props.put("password", "<password>");

Connection conn = DriverManager.getConnection(uri, props);

例:

String uri = "jdbc:snowflake://MYORG-MYCONNECTION.snowflakecomputing.com";

Properties props = new Properties();
props.put("user", "jsmith");
props.put("password", "mySecurePassword");

Connection conn = DriverManager.getConnection(uri, props);

ODBC ドライバー

ODBC INI ファイルで接続 URL のホスト名を指定します。接続パラメーターの詳細については、 ODBC 構成および接続パラメーター をご参照ください。

[ODBC Data Sources]
<account_name> = SnowflakeDSIIDriver

[<dsn_name>]
Description     = SnowflakeDB
Driver          = SnowflakeDSIIDriver
Locale          = en-US
SERVER          = <organization_name>-<connection_name>.snowflakecomputing.com

例:

[ODBC Data Sources]
myaccount = SnowflakeDSIIDriver

[client_redirect]
Description     = SnowflakeDB
Driver          = SnowflakeDSIIDriver
Locale          = en-US
SERVER          = MYORG-MYCONNECTION.snowflakecomputing.com

Node.jsドライバー

account パラメーターで接続 URL のホスト名を指定します。接続パラメーターの詳細については、 Node.jsドライバーの使用 をご参照ください。

var configuration = {
  username: '<username>',
  password: '<password>',
  account: <organization_name>-<connection_name>.
}

var connection = snowflake.createConnection(configuration)

例:

var configuration = {
  username: 'jsmith',
  password: 'mySecurePassword',
  account: MYORG-MYCONNECTION.
}

var connection = snowflake.createConnection(configuration)

Go Snowflakeドライバー

Account パラメーターで接続 URL のホスト名を指定します。詳細については、 Go Snowflake Driver をご参照ください。

cfg := &Config{
  Account: "<organization_name>-<connection_name>",
  User: "<username>",
  Password: "<password>"
}

dsn, err := DSN(cfg)

例:

cfg := &Config{
  Account: "MYORG-MYCONNECTION",
  User: "jsmith",
  Password: "mySecurePassword"
}

dsn, err := DSN(cfg)

認証とクライアントリダイレクト

ユーザーは、ソースアカウントと各ターゲットアカウントでプロビジョニングする必要があります。

フェデレーション認証と SSO

各ターゲットアカウントで個別にフェデレーション認証を構成します。 高度な SAML SSO 機能 の設定オプションを使用して、IDプロバイダー(IdP)の詳細を提供します。

注釈

Snowflakeは、フェールオーバーの場合にユーザーが正しいアカウントにリダイレクトされるように、アカウント URL ではなく接続 URL を使用して SAML 2.0準拠のIDプロバイダー(IdP)を構成することをお勧めします。

OAuth

各ターゲットアカウントで OAuth のセキュリティ統合オブジェクトを構成します。セキュリティオブジェクトは、ソースアカウントにある同じオブジェクトと同一である必要があります。手順については、適切なトピックをご参照ください。

  • Snowflake OAuth

  • 外部 OAuth

    セキュリティ統合プロパティを取得するには、ソースアカウントのセキュリティ統合ごとに DESCRIBE INTEGRATION コマンドをクエリします。次に、 CREATE INTEGRATION コマンドを実行して、ターゲットアカウントに各セキュリティ統合を再作成します。

OAuth リダイレクト動作

クライアント接続の認証にSnowflake OAuth を使用していて、接続 URL を使用してSnowflakeに接続している場合は、接続 URL が別のアカウントにリダイレクトされると(例: フェールオーバーの場合)、再認証するように求められます。Snowflake OAuth トークンは、特定のアカウントでの使用に有効です。別の展開のアカウントをポイントするように接続 URL が更新されると、既存の OAuth トークンは無効になります。

フェールオーバーの場合、接続 URL が新しいアカウントに更新されると、クライアントは invalid OAuth access token エラーで接続解除されます。接続を再確立するには、再認証してアクセス許可に同意する必要があります。

ユーザーが使用する接続 URL の確認

LOGIN_HISTORY , LOGIN_HISTORY_BY_USER ファミリーのテーブル関数をクエリして、過去7日以内のユーザーのログインアクティビティを表示します。出力は、どのユーザーとSnowflakeクライアントが接続 URL を使用しているかを示します。REPORTED_CLIENT_TYPE 列と REPORTED_CLIENT_VERSION 列には、Snowflakeへの各接続に使用されるクライアントとバージョンが表示され、 CONNECTION 列には、使用される接続 URL (存在する場合)が表示されます。

たとえば、過去72時間に、現在のロールがモニターを許可されている各ユーザーのログインイベントを最大100個取得するとします。

SELECT *
FROM TABLE(INFORMATION_SCHEMA.LOGIN_HISTORY(DATEADD('HOURS',-72,CURRENT_TIMESTAMP()),CURRENT_TIMESTAMP()))
ORDER BY EVENT_TIMESTAMP;

クライアント接続のリダイレクト

プライマリ接続が配置されているリージョンでサービスが停止した場合は、セカンダリ接続を保存しているアカウントにクライアント接続をリダイレクトします。

プライマリ接続として機能するセカンダリ接続の昇格

リダイレクトを開始するには、 ALTER CONNECTION を使用してプライマリ接続として機能するように、使用可能なリージョンでセカンダリ接続を昇格する必要があります。同時に、以前のプライマリ接続がセカンダリ接続になります。

昇格している現在のセカンダリ接続を含むターゲットアカウントで、このセクションの SQL ステートメントを実行します。

例:

-- view all connections
SHOW CONNECTIONS;

+--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+--------------------------------------------+
| snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                             |
|--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------|-------------------------------------|--------------------------------------------|
| AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | MYORG-MYCONNECTION.snowflakecomputing.com  |
| AWS_US_EAST_1      | 2020-07-22 13:52:04.925 -0700 | MYORG.MYACCOUNT2    | MYCONNECTION      | NULL            | false         | MYORG.MYACCOUNT1.MYCONNECTION |                                     | MYORG-MYCONNECTION.snowflakecomputing.com  |
+--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+--------------------------------------------+

-- promote the secondary connection to serve as the primary connection
ALTER CONNECTION myconnection PRIMARY;

-- verify that the former secondary connection was promoted successfully
SHOW CONNECTIONS;

+--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+--------------------------------------------+
| snowflake_region   | created_on                    | account_name        | name              | comment         | is_primary    | primary                       | failover_allowed_to_accounts        | connection_url                             |
|--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------|-------------------------------------|--------------------------------------------|
| AWS_US_WEST_2      | 2020-07-19 14:49:11.183 -0700 | MYORG.MYACCOUNT1    | MYCONNECTION      | NULL            | false         | MYORG.MYACCOUNT1.MYCONNECTION |                                     | MYORG-MYCONNECTION.snowflakecomputing.com  |
| AWS_US_EAST_1      | 2020-07-22 13:52:04.925 -0700 | MYORG.MYACCOUNT2    | MYCONNECTION      | NULL            | true          | MYORG.MYACCOUNT1.MYCONNECTION | MYORG.MYACCOUNT2, MYORG.MYACCOUNT3  | MYORG-MYCONNECTION.snowflakecomputing.com  |
+--------------------+-------------------------------+---------------------+-------------------+-----------------+---------------+-------------------------------+-------------------------------------+--------------------------------------------+

接続 URL の更新の確認

接続 URL が更新されたことを確認するには、現在の接続リージョンを確認します。接続 URL を使用してSnowflakeに接続し、 CURRENT_REGION 関数を実行します。

select current_region();

クライアントリダイレクトの現在の制限

  • クライアントリダイレクトは現在、リーダーアカウントではサポートされていません。

  • AWS PrivateLink またはMicrosoft Azure Private Link URLs を介した新しいウェブインターフェイスへのプライベート接続は現在サポートされていません。

  • 接続 URL と OAuth の統合を使用するクライアント接続では、接続 URL が更新されて別のアカウントをポイントするようになると、再認証が必要になります。詳細については OAuth リダイレクト動作 をご参照ください。