演習 - データ ディスクを VM に追加する

完了

所属している法律事務所は取り扱い件数を増やしており、顧客、他の法律事務所、法執行機関などのさまざまなソースの重要なドキュメントを保管するために、新しい Linux Web サーバーを作成するタスクを任されました。 Web サーバーにより、ドキュメントをアップロードして、それをディスク上に保存することができます。

ヒント

この演習では Linux を例に説明しますが、VM の作成とディスクの追加の基本的なプロセスは Windows の場合と同じです。 主な違いを挙げるとすれば、ディスクのパーティション分割とフォーマットです。 Windows では、リモート デスクトップを介して VM に接続して、組み込みのディスク管理ツールを使用したり、ここで使用する Bash スクリプトに類似した PowerShell スクリプトを展開したりできます。

目標は、Linux VM を作成し、/uploads ディレクトリを格納する uploadDataDisk1 という名前の新しい仮想ハード ディスク (VHD) を接続することです。

Azure CLI の既定値を設定する

Azure CLI を使用すると、コマンドを実行するたびに繰り返さなくても済むように、既定値を設定することができます。

Azure の既定の場所またはリージョンを指定します。 この場所に、Azure VM が配置されます。

この場所がクライアントに近ければ理想的です。 この場合は、Azure サンドボックスで使用できる場所から、自分に最も近いリージョンを選択します。

無料のサンドボックスを使用すると、Azure グローバル リージョンのサブセットにリソースを作成できます。 リソースを作成するときは、次のリストからリージョンを選択します。

  • westus2
  • southcentralus
  • centralus
  • eastus
  • westeurope
  • southeastasia
  • japaneast
  • brazilsouth
  • australiasoutheast
  • centralindia
  1. az configure コマンドを実行して、使用する既定の場所を設定します。 eastus を前の手順で選択した場所に変更します。

    az configure --defaults location=eastus
    

    ヒント

    [コピー] ボタンを使用して、コマンドをクリップボードにコピーできます。 貼り付けるには、Cloud Shell ターミナル内で新しい行を右クリックして [貼り付け] を選択するか、Shift + Insert キーボード ショートカット (macOS では ⌘ + V) を使用します。

  2. 既定のリソース グループ名を、Azure サンドボックスを介して自動的に作成されている事前構成済みリソース グループ ([サンドボックス リソース グループ]) に設定します。

    az configure --defaults group="<rgn>[sandbox Resource Group]</rgn>"
    

Linux VM の作成

ここでは、ご利用の Web サーバーをホストする Linux VM を作成します。

  1. 以下の az vm create コマンドを実行して、Ubuntu Linux VM を作成します。

    az vm create \
      --name support-web-vm01 \
      --image Canonical:UbuntuServer:16.04-LTS:latest \
      --size Standard_DS1_v2 \
      --admin-username azureuser \
      --generate-ssh-keys
    
    • VM の名前は support-web-vm01 です。
    • そのサイズは Standard_DS1_v2 です。
    • 管理ユーザー名は azureuser です。 実際には、この名前は好きなように設定することができます。
    • --generate-ssh-keys 引数を指定すると、SSH 経由でご利用の VM に接続するための SSH キー ペアが自動的に生成されます。

    VM のデプロイには数分かかります。 VM の準備ができると、JSON 形式で VM に関する情報が表示されます。 次に例を示します。

    {
      "fqdns": "",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/680469d8-edB7-42ec-b118-cd80d51741e7/providers/Microsoft.Compute/virtualMachines/support-web-vm01",
      "location": "eastus",
      "macAddress": "00-0D-3A-10-63-0A",
      "powerState": "VM running",
      "privateIpAddress": "10.0.0.4",
      "publicIpAddress": "104.211.38.211",
      "resourceGroup": "680469d8-edB7-42ec-b118-cd80d51741e7",
      "zones": ""
    }
    

    Note

    このレッスンでは、ディスクの管理方法を説明するために、この VM を使用しています。 実際には、Web サーバーとその他のソフトウェアをインストールしてから、az vm open-port を実行することで、必要としているポートを外部から利用できるようにすることもできます。

空のデータ ディスクをご利用の VM に追加する

ここでは、空のデータ ディスクを作成して、それをご利用の VM にアタッチします。 そのデータ ディスクの最初のサイズは 64 GB です。 このディスクは後で、ご利用の VM 上の /uploads ディレクトリにマウントします。

ヒント

学習を目的として、VM とデータ ディスクを別々の手順で作成します。 実際には、--data-disk-sizes-gb 引数を az vm create コマンドに指定すると、VM の作成時にデータ ディスクが追加されます。

  1. 次の az vm disk attach コマンドを実行して、新しい空のディスクを VM に追加します。

    az vm disk attach \
      --vm-name support-web-vm01 \
      --name uploadDataDisk1 \
      --size-gb 64 \
      --sku Premium_LRS \
      --new
    

    このコマンドでは次のことが行われます。

    • ディスクに uploadDataDisk1 という名前を付けます。
    • そのサイズを 64 GB に設定します。
    • ローカルの冗長性を備えた Premium ストレージの使用を指定します。

このディスクを使用するには、ディスクのパーティション分割とフォーマットを行う必要があります。 次はそれを実行しましょう。

使用するデータ ディスクを初期化してフォーマットする

使用する空のデータ ドライブは、初期化してからフォーマットする必要があります。 そのためのプロセスは、物理ディスクの場合と同じです。

1 回限りのタスクの場合は、手動で、ご利用の VM に SSH 経由で接続し、必要なコマンドを実行します。 ただし、そのプロセスをさらに反復可能にしてエラーが発生しにくくするには、Bash スクリプトあるいは (利用できる場合) PowerShell スクリプトでコマンドを指定できます。

スクリプトを使用してプロセスを自動化することには、他にも利点があります。スクリプトは、プロセスの実行方法を示すドキュメントとしての役割を果たします。 そのスクリプトを参照して、他のユーザーはシステムがどのように構成されているかを理解することができます。 プロセスを変更する必要がある場合、ご利用のスクリプトを変更し、一時的なスクラッチ VM 上でテストしてから、運用環境に変更を展開するだけです。

このレッスンでプロセスを自動化するには、カスタム スクリプト拡張機能を使用します。 カスタム スクリプト拡張機能は、Azure VM でスクリプトをダウンロードして実行する簡単な方法です。 これは、VM が稼働してからシステムを構成できるさまざまな方法の 1 つに過ぎません。

使用するスクリプトは、Azure ストレージに格納することも、GitHub などの公開されている場所に格納することもできます。 スクリプトは、手動で実行することも、より自動化されたデプロイの一部として実行することもできます。 ここでは、Azure CLI コマンドを実行して、事前作成済みの Bash スクリプトを GitHub からダウンロードし、ご利用の VM 上でそれを実行します。

学習目的のためにも、ご利用の VM 上でいくつかのコマンドを実行し、VM が想定どおりに構成されていることを確認します。

  1. az vm show を実行してご利用の VM のパブリック IP アドレスを取得し、その IP アドレスを Bash 変数として保存します。

    ipaddress=$(az vm show \
      --name support-web-vm01 \
      --show-details \
      --query [publicIps] \
      --output tsv)
    
  2. 前の手順で作成した ipaddress 変数データを利用し、SSH 接続を介してご利用の VM 上で lsblk コマンドを実行するために、次の ssh コマンドを実行します。 azureuser は VM の作成時に使用した管理者ユーザー名でした。 別の名前を選択した場合、それを代わりに使用してください。 確認を求めるメッセージが表示されたら、「Yes」と入力します。

    ssh azureuser@$ipaddress lsblk
    

    このコマンドの出力は次のようになります。

    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb       8:16   0    7G  0 disk 
    └─sdb1    8:17   0    7G  0 part /mnt
    sr0      11:0    1  628K  0 rom  
    sdc       8:32   0   64G  0 disk 
    sda       8:0    0   30G  0 disk 
    ├─sda14   8:14   0    4M  0 part 
    ├─sda15   8:15   0  106M  0 part /boot/efi
    └─sda1    8:1    0 29.9G  0 part /
    

    作成した 64 GB ドライブ sdc がマウントされていないことに注意してください。 ドライブはまだ初期化されていないため、このように一覧表示されます。

  3. 次の az vm extension set コマンドを実行し、事前作成済みの Bash スクリプトを VM 上で実行します。

    警告

    スクリプトでは /etc/fstab が変更されます。 /etc/fstab ファイルを不適切に変更すると、システムが起動できなくなる可能性があります。 運用環境に展開する前に、一時的なスクラッチ システム上で構成の変更を常にテストしてください。 このファイルの適切な変更方法については、使用しているディストリビューションのドキュメントを参照してください。 運用環境では、必要に応じて構成を復元できるように、このファイルのバックアップを作成することをお勧めします。

    az vm extension set \
      --vm-name support-web-vm01 \
      --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings '{"fileUris":["https://raw.githubusercontent.com/MicrosoftDocs/mslearn-add-and-size-disks-in-azure-virtual-machines/master/add-data-disk.sh"]}' \
      --protected-settings '{"commandToExecute": "./add-data-disk.sh"}'
    

    コマンドを実行しながら、必要に応じて、別のブラウザー タブで Bash スクリプトを調べることができます。

    まとめると、スクリプトでは次のことが行われます。

    • ドライブ /dev/sdc をパーティション分割する。
    • ドライブ上で ext4 ファイル システムを作成する。
    • マウント ポイントとして使用する /uploads ディレクトリを作成する。
    • マウント ポイントにディスクをアタッチする。
    • システムの再起動後にドライブが自動的にマウントされるように /etc/fstab を更新する。
  4. 構成を確認するには、SSH 接続を介してご利用の VM 上で lsblk コマンドを実行するために前に実行したのと同じ ssh コマンドを実行します。

    ssh azureuser@$ipaddress lsblk
    

    想定どおり sdc/sdc1 がパーティション分割され /uploads ディレクトリにマウントされているのがわかります。

    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb       8:16   0    7G  0 disk 
    └─sdb1    8:17   0    7G  0 part /mnt
    sr0      11:0    1  628K  0 rom  
    sdc       8:32   0   64G  0 disk 
    └─sdc1    8:33   0   64G  0 part /uploads
    sda       8:0    0   30G  0 disk 
    ├─sda14   8:14   0    4M  0 part 
    ├─sda15   8:15   0  106M  0 part /boot/efi
    └─sda1    8:1    0 29.9G  0 part /
    

ヒント

一部の Linux カーネルでは、ディスク上の未使用ブロックを破棄する TRIM がサポートされています。 この機能は Azure ディスクで利用可能であり、もし大きなファイルを作成してそれを削除する場合に使用すると、コストを節約できます。 この機能を有効にする方法については、Azure のドキュメントを参照してください。

まとめ

ここでは、データ ディスクを作成して、ご利用の VM にアタッチしました。 カスタム スクリプト拡張機能を使用し、事前作成済みの Bash スクリプトを VM 上で実行することで、そのプロセスをさらに反復可能にしました。 Bash スクリプトでは、Web サーバーからディスクへの書き込みが可能になるように、ディスクのパーティション分割、フォーマット、マウントが行われます。

ご利用の VM 上でデータ ディスクが準備できたので、作成できるさまざまな種類のディスクについてもう少し詳しく調べてみましょう。 最初の決定事項は、Standard と Premium のどちらのストレージを選択するかということです。