LoginSignup
2
1

More than 1 year has passed since last update.

NetApp BlueXPを使ってAzure上にCloud Volumes ONTAPをデプロイしてみた(BlueXPのセットアップ編)

Last updated at Posted at 2023-02-16

はじめに

  • 本記事では、NetAppのストレージやクラウドサービスを一元管理することができるコントロールプレーンであるNetApp BlueXPを使って、Azure上にCloud Volumes ONTAPをデプロイする手順をご紹介します。
  • 長くなってしまったので2回に分けて投稿します。今回はBlueXPのセットアップ編です。後編の「CVOのデプロイ編」はこちら

キーワード

NeApp BlueXP

  • NetApp BlueXP(以下、BlueXP)はオンプレミスのNetAppのストレージとパブリッククラウド(AWS、Azure、Google Cloud)にまたがるNetAppのストレージサービスを一元管理したり、NetAppが提供する様々なデータ管理サービスを利用することができるSaaS型のコントロールプレーンです。
  • BlueXP自体は無償で利用することができ、付随する機能(サービス)によってそれぞれの機能(サービス)に対するコストが発生するという仕組みです。
  • BlueXPでストレージを管理するには、BlueXP Connectorという管理用のコンポーネントが必要となってきます。これはVM上で稼働します。
  • 今回のお目当てであるCloud Volumes ONTAPはBlueXPからデプロイ・管理する必要があるので、本記事ではこのBlueXPのセットアップとBlueXP Connectorのデプロイから実施していきます。

Cloud Volumes ONTAP

  • Cloud Volumes ONTAP(以下、CVO)は、NetAppのストレージに搭載されているストレージ専用OSであるONTAPをパブリッククラウド(AWS、Azure、Google Cloud)のIaaS上にデプロイすることができるサービスです。
  • これにより、ONTAPが持つSnapshotや重複排除・圧縮、シンプロビジョニング、階層化などのストレージ管理機能を使って、パブリッククラウド上のストレージ管理を一元化したり、コストを削減したりといったことが可能になります。
  • 今回はAzure上にデプロイしていきますが、AWSやGoogle CloudへのCVOのデプロイも含めて、BlueXP/CVOに関するQiita記事を本記事の最後にまとめています。興味があればご覧ください。

構成イメージ

  • 最終的な構成イメージはこのような形になります。本記事ではこのCVO以外の部分を作っていきます。
    architecture.png

やってみた

事前準備

  • まず、BlueXP connectorやCVOをデプロイするためのAzureの環境が必要です。以下を事前に準備する必要があります。
    • Azureアカウント
    • リソースグループ
    • VNet
    • サブネット
    • Azureアカウントの権限まわりの設定
  • というわけで、早速上記の準備から取り掛かっていきます。
  • 個人的に、これまでAzure CLIを使ったことがほぼなかったので、勉強を兼ねて今回はAzure CLIでやってみました。

2023年2月中旬に実施した際の手順です。今後手順等が変わったらすみません。

Azureアカウントにログイン

  • Azureのアカウントにログインします。
コマンド
az login
実行結果
A web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.
  • Webブラウザのログイン画面が起動するのでログインします。

リソースグループの作成

  • リソースグループを作成します。
コマンド
az group create --name st-cvo-test --location japaneast
実行結果
{
  "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/st-cvo-test",
  "location": "japaneast",
  "managedBy": null,
  "name": "st-cvo-test",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}
  • リソースグループが作成されていることを確認します。作成されていました。
コマンド
az group list --query "[?name=='st-cvo-test']" --output table
実行結果
Name         Location
-----------  ----------
st-cvo-test  japaneast

VNet、サブネットの作成

  • VNetとサブネットを作成します。
コマンド
az network vnet create --name st-cvo-test-vnet --resource-group st-cvo-test --address-prefixes 10.0.0.0/16 --subnet-name st-cvo-test-subnet1 --subnet-prefixes 10.0.0.0/24
実行結果
{
  "newVNet": {
    "addressSpace": {
      "addressPrefixes": [
        "10.0.0.0/16"
      ]
    },
    "enableDdosProtection": false,
    "etag": "W/\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"",
    "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/st-cvo-test/providers/Microsoft.Network/virtualNetworks/st-cvo-test-vnet",
    "location": "japaneast",
    "name": "st-cvo-test-vnet",
    "provisioningState": "Succeeded",
    "resourceGroup": "st-cvo-test",
    "resourceGuid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "subnets": [
      {
        "addressPrefix": "10.0.0.0/24",
        "delegations": [],
        "etag": "W/\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"",
        "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/st-cvo-test/providers/Microsoft.Network/virtualNetworks/st-cvo-test-vnet/subnets/st-cvo-test-subnet1",
        "name": "st-cvo-test-subnet1",
        "privateEndpointNetworkPolicies": "Disabled",
        "privateLinkServiceNetworkPolicies": "Enabled",
        "provisioningState": "Succeeded",
        "resourceGroup": "st-cvo-test",
        "type": "Microsoft.Network/virtualNetworks/subnets"
      }
    ],
    "type": "Microsoft.Network/virtualNetworks",
    "virtualNetworkPeerings": []
  }
}
  • VNetとサブネットが作成されていることを確認します。作成されていました。
コマンド
az network vnet list --query "[?name=='st-cvo-test-vnet']"
実行結果
[
  {
    "addressSpace": {
      "addressPrefixes": [
        "10.0.0.0/16"
      ]
    },
    "enableDdosProtection": false,
    "etag": "W/\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"",
    "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/st-cvo-test/providers/Microsoft.Network/virtualNetworks/st-cvo-test-vnet",
    "location": "japaneast",
    "name": "st-cvo-test-vnet",
    "provisioningState": "Succeeded",
    "resourceGroup": "st-cvo-test",
    "resourceGuid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "subnets": [
      {
        "addressPrefix": "10.0.0.0/24",
        "delegations": [],
        "etag": "W/\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"",
        "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/st-cvo-test/providers/Microsoft.Network/virtualNetworks/st-cvo-test-vnet/subnets/st-cvo-test-subnet1",
        "name": "st-cvo-test-subnet1",
        "privateEndpointNetworkPolicies": "Disabled",
        "privateLinkServiceNetworkPolicies": "Enabled",
        "provisioningState": "Succeeded",
        "resourceGroup": "st-cvo-test",
        "type": "Microsoft.Network/virtualNetworks/subnets"
      }
    ],
    "type": "Microsoft.Network/virtualNetworks",
    "virtualNetworkPeerings": []
  }
]

Azureアカウントの権限設定(カスタムロールの作成と割り当て)

  • 以下のJSONファイルを作成します。"AssignableScopes"のサブスクリプションIDは環境に合わせて修正します。
bluexp-custom-role.json
{
    "Name": "BlueXP Conn SetupAsService",
    "Actions": [
        "Microsoft.Compute/disks/delete",
        "Microsoft.Compute/disks/read",
        "Microsoft.Compute/disks/write",
        "Microsoft.Compute/locations/operations/read",
        "Microsoft.Compute/operations/read",
        "Microsoft.Compute/virtualMachines/instanceView/read",
        "Microsoft.Compute/virtualMachines/read",
        "Microsoft.Compute/virtualMachines/write",
        "Microsoft.Compute/virtualMachines/delete",
        "Microsoft.Compute/virtualMachines/extensions/write",
        "Microsoft.Compute/virtualMachines/extensions/read",
        "Microsoft.Compute/availabilitySets/read",
        "Microsoft.Network/locations/operationResults/read",
        "Microsoft.Network/locations/operations/read",
        "Microsoft.Network/networkInterfaces/join/action",
        "Microsoft.Network/networkInterfaces/read",
        "Microsoft.Network/networkInterfaces/write",
        "Microsoft.Network/networkInterfaces/delete",
        "Microsoft.Network/networkSecurityGroups/join/action",
        "Microsoft.Network/networkSecurityGroups/read",
        "Microsoft.Network/networkSecurityGroups/write",
        "Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read",
        "Microsoft.Network/virtualNetworks/read",
        "Microsoft.Network/virtualNetworks/subnets/join/action",
        "Microsoft.Network/virtualNetworks/subnets/read",
        "Microsoft.Network/virtualNetworks/subnets/virtualMachines/read",
        "Microsoft.Network/virtualNetworks/virtualMachines/read",
        "Microsoft.Network/publicIPAddresses/write",
        "Microsoft.Network/publicIPAddresses/read",
        "Microsoft.Network/publicIPAddresses/delete",
        "Microsoft.Network/networkSecurityGroups/securityRules/read",
        "Microsoft.Network/networkSecurityGroups/securityRules/write",
        "Microsoft.Network/networkSecurityGroups/securityRules/delete",
        "Microsoft.Network/publicIPAddresses/join/action",
        "Microsoft.Network/locations/virtualNetworkAvailableEndpointServices/read",
        "Microsoft.Network/networkInterfaces/ipConfigurations/read",
        "Microsoft.Resources/deployments/operations/read",
        "Microsoft.Resources/deployments/read",
        "Microsoft.Resources/deployments/delete",
        "Microsoft.Resources/deployments/cancel/action",
        "Microsoft.Resources/deployments/validate/action",
        "Microsoft.Resources/resources/read",
        "Microsoft.Resources/subscriptions/operationresults/read",
        "Microsoft.Resources/subscriptions/resourceGroups/delete",
        "Microsoft.Resources/subscriptions/resourceGroups/read",
        "Microsoft.Resources/subscriptions/resourcegroups/resources/read",
        "Microsoft.Resources/subscriptions/resourceGroups/write",
        "Microsoft.Authorization/roleDefinitions/write",
        "Microsoft.Authorization/roleAssignments/write",
        "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read",
        "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write",
        "Microsoft.Network/networkSecurityGroups/delete",
        "Microsoft.Storage/storageAccounts/delete",
        "Microsoft.Storage/storageAccounts/write",
        "Microsoft.Resources/deployments/write",
        "Microsoft.Resources/deployments/operationStatuses/read",
        "Microsoft.Authorization/roleAssignments/read"
    ],
    "NotActions": [],
    "AssignableScopes": [
        "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ],
    "Description": "BlueXP Conn SetupAsService",
    "IsCustom": "true"
}
  • カスタムロールを作成します。
コマンド
az role definition create --role-definition bluexp-custom-role.json
実行結果
{
  "assignableScopes": [
    "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  ],
  "description": "BlueXP Conn SetupAsService",
  "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permissions": [
    {
      "actions": [
        "Microsoft.Compute/disks/delete",
        "Microsoft.Compute/disks/read",
        "Microsoft.Compute/disks/write",
        "Microsoft.Compute/locations/operations/read",
        "Microsoft.Compute/operations/read",
        "Microsoft.Compute/virtualMachines/instanceView/read",
        "Microsoft.Compute/virtualMachines/read",
        "Microsoft.Compute/virtualMachines/write",
        "Microsoft.Compute/virtualMachines/delete",
        "Microsoft.Compute/virtualMachines/extensions/write",
        "Microsoft.Compute/virtualMachines/extensions/read",
        "Microsoft.Compute/availabilitySets/read",
        "Microsoft.Network/locations/operationResults/read",
        "Microsoft.Network/locations/operations/read",
        "Microsoft.Network/networkInterfaces/join/action",
        "Microsoft.Network/networkInterfaces/read",
        "Microsoft.Network/networkInterfaces/write",
        "Microsoft.Network/networkInterfaces/delete",
        "Microsoft.Network/networkSecurityGroups/join/action",
        "Microsoft.Network/networkSecurityGroups/read",
        "Microsoft.Network/networkSecurityGroups/write",
        "Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read",
        "Microsoft.Network/virtualNetworks/read",
        "Microsoft.Network/virtualNetworks/subnets/join/action",
        "Microsoft.Network/virtualNetworks/subnets/read",
        "Microsoft.Network/virtualNetworks/subnets/virtualMachines/read",
        "Microsoft.Network/virtualNetworks/virtualMachines/read",
        "Microsoft.Network/publicIPAddresses/write",
        "Microsoft.Network/publicIPAddresses/read",
        "Microsoft.Network/publicIPAddresses/delete",
        "Microsoft.Network/networkSecurityGroups/securityRules/read",
        "Microsoft.Network/networkSecurityGroups/securityRules/write",
        "Microsoft.Network/networkSecurityGroups/securityRules/delete",
        "Microsoft.Network/publicIPAddresses/join/action",
        "Microsoft.Network/locations/virtualNetworkAvailableEndpointServices/read",
        "Microsoft.Network/networkInterfaces/ipConfigurations/read",
        "Microsoft.Resources/deployments/operations/read",
        "Microsoft.Resources/deployments/read",
        "Microsoft.Resources/deployments/delete",
        "Microsoft.Resources/deployments/cancel/action",
        "Microsoft.Resources/deployments/validate/action",
        "Microsoft.Resources/resources/read",
        "Microsoft.Resources/subscriptions/operationresults/read",
        "Microsoft.Resources/subscriptions/resourceGroups/delete",
        "Microsoft.Resources/subscriptions/resourceGroups/read",
        "Microsoft.Resources/subscriptions/resourcegroups/resources/read",
        "Microsoft.Resources/subscriptions/resourceGroups/write",
        "Microsoft.Authorization/roleDefinitions/write",
        "Microsoft.Authorization/roleAssignments/write",
        "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read",
        "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write",
        "Microsoft.Network/networkSecurityGroups/delete",
        "Microsoft.Storage/storageAccounts/delete",
        "Microsoft.Storage/storageAccounts/write",
        "Microsoft.Resources/deployments/write",
        "Microsoft.Resources/deployments/operationStatuses/read",
        "Microsoft.Authorization/roleAssignments/read"
      ],
      "dataActions": [],
      "notActions": [],
      "notDataActions": []
    }
  ],
  "roleName": "BlueXP Conn SetupAsService",
  "roleType": "CustomRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}
  • カスタムロールが作成されていることを確認します。作成されていました。
コマンド
az role definition list --name "BlueXP Conn SetupAsService" --output table
実行結果
Name                        Type                                     Description
--------------------------  ---------------------------------------  --------------------------
BlueXP Conn SetupAsService  Microsoft.Authorization/roleDefinitions  BlueXP Conn SetupAsService
  • ユーザー(もしくはグループ)にカスタムロールを割り当てます。グループの場合はassigneeに対象グループのオブジェクトIDを指定します。
コマンド
az role assignment create --assignee "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --role "BlueXP Conn SetupAsService" --subscription "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
実行結果
{
  "canDelegate": null,
  "condition": null,
  "conditionVersion": null,
  "description": null,
  "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Authorization/roleAssignments/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "principalId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "principalType": "Group",
  "roleDefinitionId": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "scope": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "type": "Microsoft.Authorization/roleAssignments"
}
  • カスタムロールが割り当てられていることを確認します。割り当てられていました。
コマンド
az role assignment list --role "BlueXP Conn SetupAsService"
実行結果
[
  {
    "canDelegate": null,
    "condition": null,
    "conditionVersion": null,
    "description": null,
    "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Authorization/roleAssignments/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "principalId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "principalName": "XXXXX",
    "principalType": "Group",
    "roleDefinitionId": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "roleDefinitionName": "BlueXP Conn SetupAsService",
    "scope": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "type": "Microsoft.Authorization/roleAssignments"
  }
]
  • これでBlueXP ConnectorをAzure上にデプロイするために必要なAzure側の環境が整いました。

BlueXPのセットアップ

  • BlueXP connectorのネットワーク要件はこちらに記載の通りです。簡単に言うと、アウトバウンドのインターネットアクセスと、CVOなどの管理対象ストレージがあるネットワークへのアクセスが必要です。
  • 今回は、BlueXP connectorとCVOは同じサブネット内にデプロイします。

BlueXPへのログイン

BlueXPのアカウントを作成していなければ、こちらの手順に従ってサインアップします。

  • ログインが完了すると、このようなcanvas画面になります。
    bluexp_initial_canvas.png

  • Workspaceを新たに作成したり、ユーザーを追加できたりしますが、今回は割愛してデフォルトのワークスペース「Workspace-1」を使用します。

BlueXP Connectorのデプロイ

  • BlueXPコンソールの画面上部から「Connector」のドロップダウンをクリックし、「Add Connector」を選択します。「Create your first Connector」でもいいです。
    add_conn.png

  • BlueXP Connectorをデプロイするクラウドプロバイダを選択します。今回はAzure上にデプロイするので「Microsoft Azure」を選択して、「Continue」をクリックします。
    add_conn_provider.png

  • 権限やネットワークの設定などの事前準備は先ほど完了しているので、「Skip Deployment」をクリックします。
    add_conn_require.png

  • Azureのアカウントへのログイン画面が表示されるのでログインします。

  • 「Virtual Machine Authentication」の画面で以下の情報を入力し、「Next」をクリックします。
    add_conn_vm_auth.png

    • Subscription: 任意のサブスクリプション
    • Location: VNetを作成したAzureのリージョン
    • Resource Group: Use Existing - 事前準備で作成したリソースグループを選択
    • Authentication Method: 任意の方法を設定
  • 「Details」の画面で以下の情報を入力し、「Next」をクリックします。
    add_conn_details.png

    • Connector Instance Name: 任意の名前
    • Tag: 今回は割愛
    • Connector Role: 今回は「Create」にて新規作成。
  • 「Network」の画面で以下の情報を入力し、「Next」をクリックします。
    add_conn_network.png

    • Connectivity
      • VNet: 事前準備で作成したVNET
      • Subnet: 事前準備で作成したサブネット
      • Public IP: Enable
    • Proxy Configuration: 今回は設定しない
  • 「Security Group」の画面で以下の情報を入力し、「Next」をクリックします。
    add_conn_securitygroup.png

    • Assign a security group: Create a new security group
      • 今回はHTTP/HTTPS/SSHともSource Typeに「My IP」を選択
  • 「Review」画面で設定内容を確認して、「Add」をクリックします。
    add_conn_review.png

  • デプロイが開始されました。約7分かかるということなので待ちましょう。
    add_conn_deploying.png

  • デプロイが完了しました。「Continue」をクリックします。
    add_conn_created.png

  • canvas画面に戻り、「Connector」に今回作成したConnector名が表示されていることを確認します。
    bluexp_add_conn_canvas.png

  • 以上でBlueXPのセットアップは完了です。

まとめと次回予告

  • Azure上にCVOをデプロイするための前準備として、Azure環境の準備とBlueXPのセットアップを行いました。
  • Azure環境の準備はAzure CLIでやってみましたが、--queryの使い方なども含めて色々試せたので勉強になりました。
  • 次回の記事で、こちらの環境を利用してAzure上にCVOをデプロイしてみます。乞うご期待!
  • 後編の「CVOのデプロイ編」はこちら

参考URL

BlueXP/CVO関連のQiita記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1