クイックスタート: Azure CLI を使用して Azure Managed Instance for Apache Cassandra クラスターを作成する

Azure Managed Instance for Apache Cassandra は、純粋なオープンソースの Apache Cassandra クラスター用のフル マネージド サービスです。 このサービスでは、各ワークロードの特定のニーズに応じて構成をオーバーライドすることもできます。これにより、必要に応じて最大限の柔軟性と制御が可能になります。

このクイックスタートでは、Azure CLI コマンドを使用して、Azure Managed Instance for Apache Cassandra クラスターを作成する方法を紹介します。 また、データセンターの作成のほか、データセンター内のノードのスケールアップとスケールダウンについても取り上げます。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

重要

この記事では、Azure CLI バージョン 2.30.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

マネージド インスタンス クラスターを作成する

  1. Azure ポータル

  2. Azure CLI でサブスクリプション ID を設定します。

    az account set -s <Subscription_ID>
    
  3. 次に、仮想ネットワークと専用サブネットをご使用のリソース グループに作成します。

    az network vnet create -n <VNet_Name> -l eastus2 -g <Resource_Group_Name> --subnet-name <Subnet Name>
    

    注意

    Azure Managed Instance for Apache Cassandra をデプロイするには、インターネットへのアクセスが必要です。 インターネットへのアクセスが制限されている環境では、デプロイは失敗します。 Managed Cassandra が適切に機能するために必要な、次の重要な Azure サービスへのアクセスが VNet 内でブロックされていないことを確認します。

    • Azure Storage
    • Azure KeyVault
    • Azure 仮想マシン スケール セット
    • Azure 監視
    • Microsoft Entra ID
    • Azure Security
  4. その仮想ネットワークに、マネージド インスタンスで必要となるいくつかの特殊なアクセス許可を適用します。 az role assignment create コマンドを使用します。<subscriptionID><resourceGroupName><vnetName> は、適切な値に置き換えてください。

    az role assignment create \
      --assignee a232010e-820c-4083-83bb-3ace5fc29d0b \
      --role 4d97b98b-1d4f-4787-a291-c67834d212e7 \
      --scope /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>
    

    注意

    前のコマンドの assigneerole の値は固定値です。これらの値は、コマンドに記載されているとおりに入力してください。 そうしないと、クラスターの作成時にエラーが発生します。 このコマンドの実行中にエラーが発生した場合は、実行するためのアクセス許可がない可能性があります。管理者に連絡してアクセス許可を求めてください。

  5. 次に、az managed-cassandra cluster create コマンドを使用して、新しく作成した仮想ネットワークにクラスターを作成します。 delegatedManagementSubnetId 変数の値を使用して次のコマンドを実行します。

    Note

    以下で指定する delegatedManagementSubnetId 変数の値は、上記のコマンドで指定した --scope の値とまったく同じです。

    resourceGroupName='<Resource_Group_Name>'
    clusterName='<Cluster_Name>'
    location='eastus2'
    delegatedManagementSubnetId='/subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.Network/virtualNetworks/<VNet name>/subnets/<subnet name>'
    initialCassandraAdminPassword='myPassword'
    cassandraVersion='3.11' # set to 4.0 for a Cassandra 4.0 cluster
    
    az managed-cassandra cluster create \
      --cluster-name $clusterName \
      --resource-group $resourceGroupName \
      --location $location \
      --delegated-management-subnet-id $delegatedManagementSubnetId \
      --initial-cassandra-admin-password $initialCassandraAdminPassword \
      --cassandra-version $cassandraVersion \
      --debug
    
  6. 最後に az managed-cassandra datacenter create コマンドを使用し、各ノードに 4 つの P30 ディスクが接続された Standard D8s v4 VM SKU という 3 つのノードでクラスターのデータセンターを作成します。

    dataCenterName='dc1'
    dataCenterLocation='eastus2'
    virtualMachineSKU='Standard_D8s_v4'
    noOfDisksPerNode=4
    
    az managed-cassandra datacenter create \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --data-center-name $dataCenterName \
      --data-center-location $dataCenterLocation \
      --delegated-subnet-id $delegatedManagementSubnetId \
      --node-count 3 \
      --sku $virtualMachineSKU \
      --disk-capacity $noOfDisksPerNode \
      --availability-zone false
    

    Note

    --sku の値は、次の使用可能な SKU から選択できます。

    • Standard_E8s_v4
    • Standard_E16s_v4
    • Standard_E20s_v4
    • Standard_E32s_v4
    • Standard_DS13_v2
    • Standard_DS14_v2
    • Standard_D8s_v4
    • Standard_D16s_v4
    • Standard_D32s_v4

    --availability-zonefalse に設定されていることにも注意してください。 可用性ゾーンを有効にするには、これを true に設定します。 可用性ゾーンにより、サービスの可用性 SLA が向上します。 詳細については、SLA の詳細に関するこちらを参照してください。

    警告

    可用性ゾーンは一部のリージョンでサポートされていません。 可用性ゾーンがサポートされていないリージョンを選択すると、デプロイは失敗します。 サポートされているリージョンについては、こちらを参照してください。 可用性ゾーンの正常なデプロイは、特定のリージョン内のすべてのゾーンでコンピューティング リソースが使用可能であることにも左右されます。 選択した SKU、または容量が一部のゾーンで使用できない場合、デプロイは失敗する可能性があります。

  7. データセンターの作成後、データセンター内のノードをスケールアップまたはスケールダウンしたい場合は、az managed-cassandra datacenter update コマンドを実行します。 node-count パラメーターの値は、必要な値に変更してください。

    resourceGroupName='<Resource_Group_Name>'
    clusterName='<Cluster Name>'
    dataCenterName='dc1'
    dataCenterLocation='eastus2'
    
    az managed-cassandra datacenter update \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --data-center-name $dataCenterName \
      --node-count 9
    

クラスターへの接続

Azure Managed Instance for Apache Cassandra によって作成されるノードには、パブリック IP アドレスが割り当てられていません。 新しく作成した Cassandra クラスターに接続するには、仮想ネットワーク内に別のリソースを作成する必要があります。 たとえばアプリケーション リソースや、Apache のオープンソース クエリ ツール CQLSH がインストールされている仮想マシン リソースです。 Ubuntu 仮想マシンは、Resource Manager テンプレートを使用してデプロイできます。

CQLSH からの接続

仮想マシンのデプロイ後、SSH を使用してそのマシンに接続し、CQLSH をインストールします。次のコマンドはその例です。

# Install default-jre and default-jdk
sudo apt update
sudo apt install openjdk-8-jdk openjdk-8-jre

# Install the Cassandra libraries in order to get CQLSH:
echo "deb http://archive.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra

# Export the SSL variables:
export SSL_VERSION=TLSv1_2
export SSL_VALIDATE=false

# Connect to CQLSH (replace <IP> with the private IP addresses of a node in your Datacenter):
host=("<IP>")
initial_admin_password="Password provided when creating the cluster"
cqlsh $host 9042 -u cassandra -p $initial_admin_password --ssl

アプリケーション からの接続:

CQLSH と同様に、サポートされている Apache Cassandra クライアント ドライバー のいずれかを使用してアプリケーションから接続するには、SSL を有効にし、証明書の検証を無効にする必要があります。 Java.NETNode.jsPython を使用した Azure Managed Instance for Apache Cassandra への接続についてはサンプルをご覧ください。

クラスター ノードの IP アドレスを適切なドメインにマップしない限り、証明書の検証は機能しないため、証明書の検証を無効にすることをお勧めします。 アプリケーションに対して SSL 証明書の検証を行うことを義務付ける内部ポリシーがある場合は、各ノードのホスト ファイルに 10.0.1.5 host1.managedcassandra.cosmos.azure.com などのエントリを追加することにより、これを容易に実施できます。 この方法を採用する場合は、ノードをスケール アップするたびに新しいエントリを追加する必要もあります。

Java の場合は、アプリケーションが最終的な待機時間に敏感な投機的実行ポリシーを有効にすることも強くお勧めします。 このしくみとポリシーを有効にする方法を示すデモについては、こちらを参照してください。

注意

ほとんどの場合、Azure Managed Instance for Apache Cassandra に接続するために証明書 (rootCA、ノードまたはクライアント、トラストストアなど) を構成またはインストールする必要はありません。 SSL 暗号化は、クライアントで使用されているランタイムの既定のトラストストアとパスワードを使用して有効にできます (Java.NETNode.jsPython のサンプルを参照)。これは、Azure Managed Instance for Apache Cassandra の証明書がその環境によって信頼されるためです。 まれに、証明書が信頼されていない場合は、それをトラストストアに追加する必要があります。

クライアント証明書を構成する (省略可能)

クライアント証明書の構成は任意です。 クライアント アプリケーションは、上記の手順が実行されている限り、Azure Managed Instance for Apache Cassandra に接続できます。 ただし、必要に応じて、認証用のクライアント証明書を追加で作成して構成することもできます。 一般に、証明書を作成するには、次の 2 つの方法があります。

  • 自己署名証明書。 これは、各ノードのプライベートおよびパブリック (CA なし) 証明書を意味します。この場合は、すべてのパブリック証明書が必要になります。
  • CA によって署名された証明書。 これは、自己署名 CA でも、パブリック CA でもかまいません。 この場合は、ルート CA 証明書 (Preparing SSL certificates for production の手順を参照) と、すべての中継局 (該当する場合) が必要になります。

クライアントからノードへの証明書認証または相互トランスポート層セキュリティ (mTLS) を実装する場合は、Azure CLI を使用して証明書を提供する必要があります。 下のコマンドにより、Cassandra Managed Instance クラスターのトラストストアにクライアント証明書がアップロードされて適用されます (つまり、cassandra.yaml 設定を編集する必要はありません)。 適用されると、クラスターでは、クライアントの接続時に証明書を検証するための Cassandra が必要になります (Cassandra client_encryption_optionsrequire_client_auth: true を参照)。

resourceGroupName='<Resource_Group_Name>'
clusterName='<Cluster Name>'

az managed-cassandra cluster update \
  --resource-group $resourceGroupName \
  --cluster-name $clusterName \
  --client-certificates /usr/csuser/clouddrive/rootCert.pem /usr/csuser/clouddrive/intermediateCert.pem

トラブルシューティング

Azure CLI を使用して Virtual Network にアクセス許可を適用するときにエラー ("Cannot find user or service principal in graph database for 'e5007d2c-4b13-4a74-9b6a-605d99f03501' ('e5007d2c-4b13-4a74-9b6a-605d99f03501' に対するユーザーまたはサービス プリンシパルがグラフ データベース内で見つかりません) " など) が発生した場合、Azure portal から同じアクセス許可を手動で適用できます。 この方法についてはこちらを参照してください。

注意

Azure Cosmos DB のロールの割り当ては、デプロイの目的にのみ使用されます。 Azure Managed Instance for Apache Cassandra には、Azure Cosmos DB に対するバックエンドの依存関係はありません。

リソースをクリーンアップする

不要になったら、az group delete コマンドを使用して、リソース グループとマネージド インスタンス、およびすべての関連リソースを削除できます。

az group delete --name <Resource_Group_Name>

次のステップ

このクイックスタートでは、Azure CLI を使用して、Azure Managed Instance for Apache Cassandra クラスターを作成する方法について学習しました。 これで、クラスターの操作を開始できます。