次の方法で共有


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

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

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

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

cloud-init では、既存のスクリプトをクラウド構成に変換する必要はありません。cloud-init は複数の入力の種類を受け入れます。そのうちの 1 つは 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 の他の例については、以下をご覧ください。