如何使用 nodejs azure SDK 启动带有 azure VM 映像的新 VM?
How to launch a new VM with azure VM image using nodejs azure SDK?
我使用了 AWS nodejs SDK 并使用 AMI(亚马逊机器映像)ID 创建了一个实例。现在,我需要为 Azure 复制相同的内容。我偶然发现了文档并找到了如下方法:
resourceClient.resourceGroups.createOrUpdate(resourceGroupName, groupParameters, callback);
但是,我不确定如何创建映像(如 AWS 中的 AMI),然后使用映像 ID 在 Azure 中启动 VM。该文档似乎非常直截了当,缺乏像我这样的初学者所需的解释。是否有任何代码 samples/examples 对 azure 的新手有用?
问题请参考以下代码
az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME
- 代码
const { ClientSecretCredential } = require("@azure/identity");
const { NetworkManagementClient } = require("@azure/arm-network");
const { ComputeManagementClient } = require("@azure/arm-compute");
const { ResourceManagementClient } = require("@azure/arm-resources");
const clientId = "the appId of the sp";
const tenant = "tenant id";
const clientSecret = "the clientsecret of the sp";
const subscriptionId = "the id of your Azure subscription";
const creds = new ClientSecretCredential(tenant, clientId, clientSecret);
const resouceClient = new ResourceManagementClient(creds, subscriptionId);
const newtworkClient = new NetworkManagementClient(creds, subscriptionId);
const computeClient = new ComputeManagementClient(creds, subscriptionId);
async function main() {
try {
// create resource group
const group = await resouceClient.resourceGroups.createOrUpdate(
"testdf78",
{
location: "eastasia",
}
);
// create vnet and subnet
const vnet = await newtworkClient.virtualNetworks.createOrUpdate(
group.name,
"testdf1_vnet",
{
addressSpace: {
addressPrefixes: ["10.0.0.0/16"],
},
location: group.location,
subnets: [{ name: "default", addressPrefix: "10.0.0.0/24" }],
}
);
// create public ip
const ip = await newtworkClient.publicIPAddresses.createOrUpdate(
group.name,
"testdf1_ip",
{
location: group.location,
publicIPAllocationMethod: "Dynamic",
}
);
// create nic
const nic = await newtworkClient.networkInterfaces.createOrUpdate(
group.name,
"testdf1_nic",
{
location: group.location,
ipConfigurations: [
{
name: "test",
privateIPAllocationMethod: "Dynamic",
subnet: vnet.subnets[0],
publicIPAddress: ip,
},
],
}
);
// get you custom image
const image = await computeClient.images.get("<groupname>", "<image name>");
//create vm
computeClient.virtualMachines.createOrUpdate(group.name, "testdf1", {
location: group.location,
hardwareProfile: {
vmSize: "Standard_B1s",
},
storageProfile: {
imageReference: {
id: image.id,
},
osDisk: {
caching: "ReadWrite",
managedDisk: {
storageAccountType: "Standard_LRS",
},
name: "testdf1osdisk",
createOption: "FromImage",
},
},
osProfile: {
computerName: "testdf1",
adminUsername: "testqw",
adminPassword: "Password0123!",
linuxConfiguration: {
patchSettings: { patchMode: "ImageDefault" },
},
},
networkProfile: {
networkInterfaces: [
{
id: nic.id,
},
],
},
diagnosticsProfile: {
bootDiagnostics: {
enabled: true,
},
},
});
} catch (error) {
console.log(error);
}
}
main();
我使用了 AWS nodejs SDK 并使用 AMI(亚马逊机器映像)ID 创建了一个实例。现在,我需要为 Azure 复制相同的内容。我偶然发现了文档并找到了如下方法:
resourceClient.resourceGroups.createOrUpdate(resourceGroupName, groupParameters, callback);
但是,我不确定如何创建映像(如 AWS 中的 AMI),然后使用映像 ID 在 Azure 中启动 VM。该文档似乎非常直截了当,缺乏像我这样的初学者所需的解释。是否有任何代码 samples/examples 对 azure 的新手有用?
问题请参考以下代码
az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME
- 代码
const { ClientSecretCredential } = require("@azure/identity");
const { NetworkManagementClient } = require("@azure/arm-network");
const { ComputeManagementClient } = require("@azure/arm-compute");
const { ResourceManagementClient } = require("@azure/arm-resources");
const clientId = "the appId of the sp";
const tenant = "tenant id";
const clientSecret = "the clientsecret of the sp";
const subscriptionId = "the id of your Azure subscription";
const creds = new ClientSecretCredential(tenant, clientId, clientSecret);
const resouceClient = new ResourceManagementClient(creds, subscriptionId);
const newtworkClient = new NetworkManagementClient(creds, subscriptionId);
const computeClient = new ComputeManagementClient(creds, subscriptionId);
async function main() {
try {
// create resource group
const group = await resouceClient.resourceGroups.createOrUpdate(
"testdf78",
{
location: "eastasia",
}
);
// create vnet and subnet
const vnet = await newtworkClient.virtualNetworks.createOrUpdate(
group.name,
"testdf1_vnet",
{
addressSpace: {
addressPrefixes: ["10.0.0.0/16"],
},
location: group.location,
subnets: [{ name: "default", addressPrefix: "10.0.0.0/24" }],
}
);
// create public ip
const ip = await newtworkClient.publicIPAddresses.createOrUpdate(
group.name,
"testdf1_ip",
{
location: group.location,
publicIPAllocationMethod: "Dynamic",
}
);
// create nic
const nic = await newtworkClient.networkInterfaces.createOrUpdate(
group.name,
"testdf1_nic",
{
location: group.location,
ipConfigurations: [
{
name: "test",
privateIPAllocationMethod: "Dynamic",
subnet: vnet.subnets[0],
publicIPAddress: ip,
},
],
}
);
// get you custom image
const image = await computeClient.images.get("<groupname>", "<image name>");
//create vm
computeClient.virtualMachines.createOrUpdate(group.name, "testdf1", {
location: group.location,
hardwareProfile: {
vmSize: "Standard_B1s",
},
storageProfile: {
imageReference: {
id: image.id,
},
osDisk: {
caching: "ReadWrite",
managedDisk: {
storageAccountType: "Standard_LRS",
},
name: "testdf1osdisk",
createOption: "FromImage",
},
},
osProfile: {
computerName: "testdf1",
adminUsername: "testqw",
adminPassword: "Password0123!",
linuxConfiguration: {
patchSettings: { patchMode: "ImageDefault" },
},
},
networkProfile: {
networkInterfaces: [
{
id: nic.id,
},
],
},
diagnosticsProfile: {
bootDiagnostics: {
enabled: true,
},
},
});
} catch (error) {
console.log(error);
}
}
main();