はじめに
- 本記事では、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記事を本記事の最後にまとめています。興味があればご覧ください。
構成イメージ
やってみた
事前準備
- まず、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は環境に合わせて修正します。
{
"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へのログイン
- WebブラウザでBlueXPコンソールにアクセスしてログインします。
BlueXPのアカウントを作成していなければ、こちらの手順に従ってサインアップします。
-
Workspaceを新たに作成したり、ユーザーを追加できたりしますが、今回は割愛してデフォルトのワークスペース「Workspace-1」を使用します。
BlueXP Connectorのデプロイ
-
BlueXPコンソールの画面上部から「Connector」のドロップダウンをクリックし、「Add Connector」を選択します。「Create your first Connector」でもいいです。
-
BlueXP Connectorをデプロイするクラウドプロバイダを選択します。今回はAzure上にデプロイするので「Microsoft Azure」を選択して、「Continue」をクリックします。
-
Azureのアカウントへのログイン画面が表示されるのでログインします。
-
「Virtual Machine Authentication」の画面で以下の情報を入力し、「Next」をクリックします。
- Subscription: 任意のサブスクリプション
- Location: VNetを作成したAzureのリージョン
- Resource Group: Use Existing - 事前準備で作成したリソースグループを選択
- Authentication Method: 任意の方法を設定
-
「Details」の画面で以下の情報を入力し、「Next」をクリックします。
- Connector Instance Name: 任意の名前
- Tag: 今回は割愛
- Connector Role: 今回は「Create」にて新規作成。
-
「Network」の画面で以下の情報を入力し、「Next」をクリックします。
- Connectivity
- VNet: 事前準備で作成したVNET
- Subnet: 事前準備で作成したサブネット
- Public IP: Enable
- Proxy Configuration: 今回は設定しない
- Connectivity
-
「Security Group」の画面で以下の情報を入力し、「Next」をクリックします。
- Assign a security group: Create a new security group
- 今回はHTTP/HTTPS/SSHともSource Typeに「My IP」を選択
- Assign a security group: Create a new security group
-
以上でBlueXPのセットアップは完了です。
まとめと次回予告
- Azure上にCVOをデプロイするための前準備として、Azure環境の準備とBlueXPのセットアップを行いました。
- Azure環境の準備はAzure CLIでやってみましたが、
--query
の使い方なども含めて色々試せたので勉強になりました。 - 次回の記事で、こちらの環境を利用してAzure上にCVOをデプロイしてみます。乞うご期待!
- 後編の「CVOのデプロイ編」はこちら。
参考URL
- https://docs.netapp.com/ja-jp/cloud-manager-setup-admin/
- https://docs.netapp.com/ja-jp/cloud-manager-cloud-volumes-ontap/task-getting-started-azure.html
BlueXP/CVO関連のQiita記事
- NetApp BlueXPのご紹介
- BlueXPのHealthってどんな機能?
- NetApp BlueXPからONTAP環境のセキュリティを強化する
- NetApp BlueXPを使ってAmazon FSx for NetApp ONTAPを構築してみた
- NetApp BlueXPを使ってAWS上にCloud Volume ONTAPを構築してみた
- NetApp BlueXPを使って、Cloud Volumes ONTAPのデータをAmazon S3にバックアップ・リストアしてみた。
- Google Cloud Platform上にNetApp BlueXP Connectorを作成してみた
- BlueXPを使って、Google Cloud上にNetApp Cloud Volumes ONTAPを作成してみた
- [小ネタ]BlueXPのオンプレミスコネクターを使ってみる