在 Azure 上的 Linux VM 中使用 cloud-init 运行 bash 脚本

适用于:✔️ Linux VM ✔️ 灵活规模集

本文介绍如何在 Azure 中使用 cloud-init 在预配时在 Linux 虚拟机 (VM) 或虚拟机规模集 (VMSS) 中运行现有的 bash 脚本。 Azure 预配资源后,这些 cloud-init 脚本即会在第一次启动时运行。 有关 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-init 文件,尤其是第一行。

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

在部署此映像之前,需要使用 az group create 命令创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。 以下示例在“chinaeast” 位置创建名为“myResourceGroup” 的资源组。

az group create --name myResourceGroup --location chinaeast

现在,使用 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

注意

相应地替换“myResourceGroup”、“vmName”和“imageCIURN”值。 确保选择了包含 Cloud-init 的映像。

验证 bash 脚本是否已运行

通过 SSH 连接到 VM 的公共 IP 地址显示在先前命令的输出中。 按如下所示输入自己的用户publicIpAddress

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 示例,请参阅以下文章: