cloud-init を使用して Azure 上の Linux VM で Bash スクリプトを実行する

適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット

この記事では、Azure でのプロビジョニング時に、cloud-init を使用して、Linux 仮想マシン (VM) または仮想マシン スケール セット (VMSS) 上で既存の Bash スクリプトを実行する方法を示します。 これらの cloud-init スクリプトは、Azure によってリソースがプロビジョニングされた後の最初の起動時に実行されます。 cloud-init が Azure およびサポートされている Linux ディストリビューションでネイティブに動作する方法の詳細については、cloud-init の概要に関するページをご覧ください

cloud-init を使用して Bash スクリプトを実行する

cloud-init では、既存のスクリプトを cloud-config に変換する必要はありません。cloud-init は、Bash スクリプトなどの複数の入力の種類を受け入れます。

Linux カスタム スクリプトの Azure 拡張機能を使用してスクリプトを実行している場合は、cloud-init を使用するようにそれらを移行できます。 ただし、Azure 拡張機能ではレポートが統合され、スクリプト エラーが警戒されましたが、cloud-init では、スクリプト エラーが発生してもイメージのデプロイは失敗しません。

この機能の動作を確認するために、テスト用のシンプルな Bash スクリプトを作成します。 cloud-init #cloud-config ファイルと同様、このスクリプトは、AzureCLI コマンドを実行して仮想マシンをプロビジョニングする場所に対してローカルである必要があります。 この例では、ローカル コンピューター上にない Cloud Shell でファイルを作成します。 任意のエディターを使用することができます。 cloud-init ファイル全体 (特に最初の行) が正しくコピーされたことを確認してください。

#!/bin/sh
echo "this has been written via cloud-init" + $(date) >> /tmp/myScript.txt

このイメージをデプロイする前に、az group create コマンドを使用してリソース グループを作成する必要があります。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

az group create --name myResourceGroup --location eastus

ここで、az vm create で VM を作成し、次のように --custom-data simple_bash.sh で Bash スクリプト ファイルを指定します。

az vm create \
  --resource-group myResourceGroup \
  --name vmName \
  --image imageCIURN \
  --custom-data simple_bash.sh \
  --generate-ssh-keys

注意

myResourceGroupvmNameimageCIURN の値を適宜置き換えます。 Cloud-init を含むイメージが選択されていることを確認します。

Bash スクリプトの実行の確認

前述のコマンドからの出力に示すように、VM のパブリック IP アドレスに SSH 接続します。 実際の userpublicIpAddress を次のように入力します。

ssh <user>@<publicIpAddress>

/tmp/myScript.txt ファイルが存在することと、その内部に適切なテキストがあることを確認します。

sudo cat /tmp/myScript

失敗している場合は、詳細について /var/log/cloud-init.log を調べることができます。 次のエントリを検索します。

sudo cat /var/log/cloud-init.log
Running config-scripts-user using lock Running command ['/var/lib/cloud/instance/scripts/part-001']

次のステップ

構成変更の cloud-init の他の例については、以下をご覧ください。