Snowflake Azure BLOB Storageデータロード：②ストレージネットワーク構成

[目次に戻る](https://qiita.com/taku_tachibana/items/408686a031b9624e981e)

### ■本記事の目的
Snowflakeのデータロードを理解する。
ユーザー管理のAzureBLOBStorageからSnowflakeにデータロードを行います。
コンテナーおよび取込用のテストデータ（CSV形式）は、事前に作成済みとします。
※階層型名前空間を有効にしないのでコンテナー配下のフォルダはありません。

### ■前回の記事
[Snowflake Azure BLOB Storageデータロード：①ストレージ統合](https://qiita.com/taku_tachibana/items/e9ce026e2a41eab50341)

### ■概要
Azureストレージのネットワークルールを構成します。

### ■前提
SnowflakeはAzure（tokyoリージョン）にホストします。トライアル環境です。

### ■Azureストレージのネットワーク設定
SnowflakeとストレージがAzureでの組み合わせ場合は、VnetIDで仮想ネットワーク内部に限定したセキュアアクセスを構成することができます。

実際に設定していきます。

SnowflakeをホストしているVnetの情報を取得します。
Snowflakeで、以下を実行します。
```
use role ACCOUNTADMIN;
SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();
```
情報をコピーしてテキストなどに貼り付けておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731433/fafb225b-681e-1ae6-3f6c-9bd1798f13bb.png)

後ほど、コマンドにサブネットIDとして、入れるので以下のように分解しておきます。
※サブネットが2つ存在していますので、サブネット1,サブネット2とします。
```
{"snowflake-vnet-subnet-id":["/subscriptions/<サブスクリプション名>/resourceGroups/<リソースグループ名>/providers/Microsoft.Network/virtualNetworks/<仮想ネットワーク名>/subnets/<サブネット1名>","/subscriptions/<サブスクリプション名>/resourceGroups/<リソースグループ名>/providers/Microsoft.Network/virtualNetworks/<仮想ネットワーク名>/subnets/<サブネット2名>"]}

↓↓↓↓以下のように分解しておく

#サブネット1ID：
"/subscriptions/<サブスクリプション名>/resourceGroups/<リソースグループ名>/providers/Microsoft.Network/virtualNetworks/<仮想ネットワーク名>/subnets/<サブネット1名>"

#サブネット2ID：
"/subscriptions/<サブスクリプション名>/resourceGroups/<リソースグループ名>/providers/Microsoft.Network/virtualNetworks/<仮想ネットワーク名>/subnets/<サブネット2名>"
```
___________________
取得できたら、次に上記の情報をネットワークルールに追加する必要があるのですが、
事前にユーザー管理のAzureで、仮想ネットワーク（VNet）、サブネットを作成しておく必要があります。別途作成してください。
また、AzureCLIをインストールする必要があります。以下からインストラーをダウンロードして、インストールしてください。

公式リファレンスより引用
[Azure CLI をインストールする方法](https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli)
______________________

AzureCLIを、今回はコマンドプロンプト（CMD）から使用します。

ネットワークルールの有無を確認します。
```
az storage account network-rule list --resource-group "<リソースグループ名>" --account-name "<ストレージアカウント名>" --query virtualNetworkRules
```
何も設定していない場合は、以下のように出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731433/90314134-c5ce-528b-0b18-d5783dfc961c.png)

次に以下のコマンドで、サービスエンドポイントを展開します。
※仮想ネットワークとサブネットは、事前にユーザー管理のAzureに作成します。
```
az network vnet subnet update --resource-group "<リソースグループ名>" --vnet-name "<仮想ネットワーク名>" --name "<サブネット名>" --service-endpoints "Microsoft.Storage.Global"
```
実行すると以下のJSON形式で、返ってきます。
```
{
  "addressPrefix": "<サブネットIPアドレス（CIDR）>",
  "delegations": [],
  "etag": "W/\"<ETAG情報>"",
  "id": "<サブネットID>",
  "name": "<サブネット名>",
  "privateEndpointNetworkPolicies": "Disabled",
  "privateLinkServiceNetworkPolicies": "Enabled",
  "provisioningState": "Succeeded",
  "resourceGroup": "<リソースグループ名>",
  "serviceEndpoints": [
    {
      "locations": [
        "*"
      ],
      "provisioningState": "Succeeded",
      "service": "Microsoft.Storage.Global"
    }
  ],
  "type": "Microsoft.Network/virtualNetworks/subnets"
}
```
　
ネットワークルールにSnowflakeのVNet、サブネット情報を追加します。
以下のコマンドに、前段で分解したSnowflakeのサブネットIDを入れて各実行します。
※登録するサブネットが2つ存在していますので、サブネット1、サブネット2とします。
```
#Snowflakeのサブネット1を登録します。
az storage account network-rule add --resource-group "<MYリソースグループ名>" --account-name "<MYストレージアカウント名>" --subnet <サブネット1ID>

#Snowflakeのサブネット2を登録します。
az storage account network-rule add --resource-group "<MYリソースグループ名>" --account-name "<MYストレージアカウント名>" --subnet <サブネット2ID>
```
JSON形式の結果が返ってきたらOKです。（長いので割愛）

　
ネットワークルールの有無を確認します。
```
az storage account network-rule list --resource-group "<リソースグループ名>" --account-name "<ストレージアカウント名>" --query virtualNetworkRules
```
以下のように登録されていたらOKです。
```
[
  {
    "action": "Allow",
    "state": "Succeeded",
    "virtualNetworkResourceId": "<サブネット1ID>"
  },
  {
    "action": "Allow",
    "state": "Succeeded",
    "virtualNetworkResourceId": "<サブネット2ID>"
  }
]
```

　
以上でネットワーク構成は完了です。

### ■あとがき
Azureストレージのネットワーク構成が、少しCLI含めて行う必要があったので
今回はネットワーク構成だけで記事1つとしています。
次回は、外部ステージから行います。

### ■次の記事
[Snowflake Azure BLOB Storageデータロード：③外部ステージ～データロード](https://qiita.com/taku_tachibana/items/7aa800b012ba76a9bb45)
　
[目次に戻る](https://qiita.com/taku_tachibana/items/408686a031b9624e981e)