From 1aa8e40c77be622c2ca387d935a7109beb9e0f59 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:05:48 -0700 Subject: [PATCH 01/25] Add scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/TOC.yml --- .../virtual-machine-scale-sets/TOC.yml | 427 ++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/TOC.yml diff --git a/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/TOC.yml b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/TOC.yml new file mode 100644 index 000000000..69aa736ff --- /dev/null +++ b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/TOC.yml @@ -0,0 +1,427 @@ +- name: Virtual Machines Scale Sets Documentation + href: index.yml +- name: Overview + items: + - name: What are Virtual Machine Scale Sets? + href: overview.md + - name: Orchestration modes + href: virtual-machine-scale-sets-orchestration-modes.md + - name: Scale Set FAQ + href: virtual-machine-scale-sets-faq.yml + - name: What's new + href: whats-new.md + expanded: true +- name: Quickstarts + items: + - name: Create in the Azure portal + href: flexible-virtual-machine-scale-sets-portal.md + - name: Create with the Azure CLI + href: flexible-virtual-machine-scale-sets-cli.md + - name: Create with Azure PowerShell + href: flexible-virtual-machine-scale-sets-powershell.md + - name: Create with Bicep + displayName: ARM, Template, Resource Manager, Bicep + href: quick-create-bicep-windows.md + - name: Create with ARM template + href: flexible-virtual-machine-scale-sets-rest-api.md +- name: Tutorials + items: + - name: Create and manage + items: + - name: Azure CLI + href: tutorial-create-and-manage-cli.md + - name: Azure PowerShell + href: tutorial-create-and-manage-powershell.md + - name: Connect to Instances + items: + - name: Azure CLI + href: tutorial-connect-to-instances-cli.md + - name: Azure PowerShell + href: tutorial-connect-to-instances-powershell.md + - name: Modify a scale set + items: + - name: Azure CLI + href: tutorial-modify-scale-sets-cli.md + - name: Azure PowerShell + href: tutorial-modify-scale-sets-powershell.md + - name: Use data disks + items: + - name: Azure CLI + href: tutorial-use-disks-cli.md + - name: Azure PowerShell + href: tutorial-use-disks-powershell.md + - name: Use a custom VM image + items: + - name: Azure CLI + href: tutorial-use-custom-image-cli.md + - name: Azure PowerShell + href: tutorial-use-custom-image-powershell.md + - name: Deploy apps to a scale set + items: + - name: Azure CLI + href: tutorial-install-apps-cli.md + - name: Azure PowerShell + href: tutorial-install-apps-powershell.md + - name: Autoscale a scale set + items: + - name: Azure CLI + href: tutorial-autoscale-cli.md + - name: Azure PowerShell + href: /azure/azure-monitor/autoscale/autoscale-using-powershell + maintainContext: true +- name: Scale + items: + - name: Autoscale + items: + - name: Overview + href: virtual-machine-scale-sets-autoscale-overview.md + - name: Configure autoscale + href: virtual-machine-scale-sets-autoscale-portal.md + - name: Predictive autoscale + href: /azure/azure-monitor/autoscale/autoscale-predictive + maintainContext: true + - name: Autoscale using guest metrics + href: virtual-machine-scale-sets-mvss-guest-based-autoscale-linux.md + - name: Troubleshoot autoscale + href: virtual-machine-scale-sets-troubleshoot.md + - name: Instance Mix (Preview) + href: virtual-machine-scale-sets-instance-mix.md + - name: Scaling Profile + href: virtual-machine-scale-sets-scaling-profile.md + - name: Scale-In Policy + href: virtual-machine-scale-sets-scale-in-policy.md + - name: Standby pools (Preview) + items: + - name: Overview + href: standby-pools-overview.md + - name: Create a standby pool + href: standby-pools-create.md + - name: Update or delete a standby pool + href: standby-pools-update-delete.md + - name: Frequently asked questions + href: standby-pools-faq.md + - name: Instance protection + href: virtual-machine-scale-sets-instance-protection.md + - name: Attach VMs to a scale set + href: virtual-machine-scale-sets-attach-detach-vm.md + - name: Working with large uniform scale sets + href: virtual-machine-scale-sets-placement-groups.md +- name: Reliability + items: + - name: Reliability in Virtual Machine Scale Sets + href: /azure/reliability/reliability-virtual-machines?toc=/azure/virtual-machine-scale-sets/toc.json&bc=/azure/virtual-machine-scale-sets/breadcrumb/toc.json + - name: Design considerations + href: virtual-machine-scale-sets-design-overview.md + - name: vCPU quotas + href: ../virtual-machines/linux/quotas.md + maintainContext: true + - name: Availability Zones + href: virtual-machine-scale-sets-use-availability-zones.md + - name: Capacity reservations + href: ../virtual-machines/capacity-reservation-overview.md + - name: Automatic instance repairs + href: virtual-machine-scale-sets-automatic-instance-repairs.md +- name: Cost optimization + items: + - name: Azure Spot Virtual Machines + href: use-spot.md + - name: Spot Priority Mix + href: spot-priority-mix.md + - name: Reserved instances + href: /azure/cost-management-billing/reservations/save-compute-costs-reservations + - name: Azure Hybrid Benefit + items: + - name: Hybrid Benefit for Linux + href: ../virtual-machines/linux/azure-hybrid-benefit-linux.md + maintainContext: true + - name: Hybrid Benefit for Windows + href: ../virtual-machines/windows/hybrid-use-benefit-licensing.md + maintainContext: true + - name: Hybrid benefit for Uniform Scale Sets + href: azure-hybrid-benefit-linux.md +- name: Management + items: + - name: Modify a scale set + href: virtual-machine-scale-sets-upgrade-scale-set.md + - name: Relocate to another region + href: /azure/operational-excellence/relocation-virtual-machine-scale-sets + maintainContext: true + - name: Upgrade Policies + items: + - name: Overview + href: virtual-machine-scale-sets-upgrade-policy.md + - name: Setting the upgrade policy + href: virtual-machine-scale-sets-set-upgrade-policy.md + - name: Changing the upgrade policy + href: virtual-machine-scale-sets-change-upgrade-policy.md + - name: Configure rolling upgrade policy + href: virtual-machine-scale-sets-configure-rolling-upgrades.md + - name: Rolling upgrades with MaxSurge + href: virtual-machine-scale-sets-maxsurge.md + - name: Performing manual upgrades + href: virtual-machine-scale-sets-perform-manual-upgrades.md + - name: Reimage a virtual machine + href: virtual-machine-scale-sets-reimage-virtual-machine.md + + - name: Common management tasks + items: + - name: Use the Azure CLI + href: virtual-machine-scale-sets-manage-cli.md + - name: Use Azure PowerShell + href: virtual-machine-scale-sets-manage-powershell.md + - name: Using DSC and scale sets + href: virtual-machine-scale-sets-dsc.md + - name: Scale set templates + href: virtual-machine-scale-sets-mvss-start.md + - name: Deploy your application + href: virtual-machine-scale-sets-deploy-app.md + - name: Custom image templates + href: virtual-machine-scale-sets-mvss-custom-image.md + - name: Manage fault domains in scale sets + href: virtual-machine-scale-sets-manage-fault-domains.md + - name: Understand instance IDs + href: virtual-machine-scale-sets-instance-ids.md + - name: Azure Compute Gallery + items: + - name: Overview + href: ../virtual-machines/azure-compute-gallery.md + maintainContext: true + - name: Specialized image version + href: instance-specialized-image-version.md + - name: Generalized image version + href: instance-generalized-image-version.md + - name: Run Command + items: + - name: Overview + displayName: Run command + href: ../virtual-machines/run-command-overview.md + maintainContext: true + - name: Action Run Commands for Linux + href: ../virtual-machines/linux/run-command.md + maintainContext: true + - name: Action Run Commands for Windows + href: ../virtual-machines/windows/run-command.md + maintainContext: true + - name: Managed Run Commands for Linux + href: ../virtual-machines/linux/run-command-managed.md + maintainContext: true + - name: Managed Run Commands for Windows + href: ../virtual-machines/windows/run-command-managed.md + maintainContext: true + - name: Proximity placement groups + href: proximity-placement-groups.md + - name: Extensions + items: + - name: Extensions Overview + href: ../virtual-machines/extensions/overview.md + maintainContext: true + - name: Automatic extension upgrade + href: ../virtual-machines/automatic-extension-upgrade.md + maintainContext: true + - name: Extension sequencing on scale sets + href: virtual-machine-scale-sets-extension-sequencing.md + - name: Application Health extension + href: virtual-machine-scale-sets-health-extension.md +- name: Monitoring + items: + - name: Monitor virtual machines + href: ../virtual-machines/monitor-vm.md + maintainContext: true + - name: VM insights + href: /azure/azure-monitor/vm/vminsights-overview + maintainContext: true + - name: Terminate notifications + href: virtual-machine-scale-sets-terminate-notification.md + - name: Monitor automatic repairs service state + href: alert-rules-automatic-repairs-service-state.md + - name: Instance Metadata service + items: + - name: CLI + displayName: Monitor metadata + href: ../virtual-machines/linux/instance-metadata-service.md + maintainContext: true + - name: PowerShell + displayName: Monitor metadata + href: ../virtual-machines/windows/instance-metadata-service.md + maintainContext: true +- name: Updates and maintenance + items: + - name: Maintenance notifications + items: + - name: Overview + href: virtual-machine-scale-sets-maintenance-notifications.md + maintainContext: true + - name: CLI + displayName: Maintenance notifications + href: ../virtual-machines/maintenance-notifications-cli.md + maintainContext: true + - name: Portal + displayName: Maintenance notifications + href: ../virtual-machines/maintenance-notifications-portal.md + maintainContext: true + - name: PowerShell + displayName: Maintenance notifications + href: ../virtual-machines/maintenance-notifications-powershell.md + maintainContext: true + - name: Maintenance configurations + items: + - name: Overview + displayName: Maintenance configurations + href: ../virtual-machines/maintenance-configurations.md + maintainContext: true + - name: CLI + displayName: Maintenance configurations + href: ../virtual-machines/maintenance-configurations-cli.md + maintainContext: true + - name: PowerShell + displayName: Maintenance configurations + href: ../virtual-machines/maintenance-configurations-powershell.md + maintainContext: true + - name: Portal + displayName: Maintenance configurations + href: ../virtual-machines/maintenance-configurations-portal.md + maintainContext: true + - name: Scheduled events + items: + - name: Linux + href: ../virtual-machines/linux/scheduled-events.md + maintainContext: true + displayName: Scheduled events + - name: Windows + items: + - name: Scheduled events + href: ../virtual-machines/windows/scheduled-events.md + maintainContext: true + - name: Monitor scheduled events + href: ../virtual-machines/windows/scheduled-event-service.md + maintainContext: true +- name: Disks + items: + - name: Select a disk type + href: ../virtual-machines/disks-types.md + maintainContext: true + - name: Premium storage performance + href: ../virtual-machines/premium-storage-performance.md + maintainContext: true + - name: Ephemeral OS disks + href: ../virtual-machines/ephemeral-os-disks.md + maintainContext: true + - name: Scalability targets for disks + href: ../virtual-machines/disks-scalability-targets.md + maintainContext: true + - name: Use data disks with scale sets + href: virtual-machine-scale-sets-attached-disks.md + - name: Encrypt disks in scale sets + items: + - name: Use PowerShell + href: disk-encryption-powershell.md + - name: Use the Azure CLI + href: disk-encryption-cli.md + - name: Use Azure Resource Manager templates + href: disk-encryption-azure-resource-manager.md + - name: Extension sequencing + href: disk-encryption-extension-sequencing.md + - name: Key vault for Azure Disk Encryption + href: disk-encryption-key-vault.md + - name: Server-side disk Encryption + href: ../virtual-machines/disk-encryption.md + maintainContext: true + - name: Azure Disk Encryption + href: disk-encryption-overview.md +- name: Networking + items: + - name: Networking Overview + href: /azure/virtual-network/network-overview + maintainContext: true + - name: Default outbound access in Azure + href: /azure/virtual-network/ip-services/default-outbound-access + maintainContext: true + - name: Networking for scale sets + href: virtual-machine-scale-sets-networking.md + - name: Use an existing virtual network + href: virtual-machine-scale-sets-mvss-existing-vnet.md +- name: Security + items: + - name: Policy definitions + href: policy-reference.md + - name: Security and policy + href: ../virtual-machines/security-policy.md + maintainContext: true + - name: Azure security baseline + href: /security/benchmark/azure/baselines/virtual-machine-scale-sets-security-baseline + maintainContext: true + - name: Hotpatch + href: /azure/automanage/automanage-hotpatch + maintainContext: true + - name: Automatic VM guest patching + href: ../virtual-machines/automatic-vm-guest-patching.md + maintainContext: true + - name: Automatic OS image upgrades + items: + - name: Overview + href: virtual-machine-scale-sets-automatic-upgrade.md + - name: Maintenance control + items: + - name: PowerShell + href: ../virtual-machines/virtual-machine-scale-sets-maintenance-control-powershell.md + maintainContext: true + - name: CLI + href: ../virtual-machines/virtual-machine-scale-sets-maintenance-control-CLI.md + maintainContext: true + - name: Portal + href: ../virtual-machines/virtual-machine-scale-sets-maintenance-control-portal.md + maintainContext: true +- name: Reference + items: + - name: API comparison + href: orchestration-modes-api-comparison.md + - name: Azure CLI + href: /cli/azure/vmss + - name: Azure PowerShell + href: /powershell/azure/ + - name: REST + href: /rest/api/virtualmachinescalesets/ + - name: Azure templates + href: /azure/templates/microsoft.compute/virtualmachinescalesets + - name: Azure Policy built-ins + displayName: samples, policies, definitions + href: ../virtual-machines/policy-reference.md + maintainContext: true +- name: Resources + items: + - name: Cloud adoption framework + href: /azure/cloud-adoption-framework/get-started/ + - name: Architecture center + href: /azure/architecture/ + - name: Migration tools + href: /azure/cloud-adoption-framework/migrate/azure-migration-guide/?tabs=MigrationTools + - name: Microsoft Q&A + href: /answers/topics/azure-virtual-machines.html + - name: Azure Quickstart Templates + href: https://azure.microsoft.com/resources/templates/?resourceType=Microsoft.Compute&pageNumber=1&sort=Popular + - name: Pricing + href: https://azure.microsoft.com/pricing/details/#Linux + - name: Regional availability + href: https://azure.microsoft.com/regions/services/ + - name: Build your skills with Microsoft Learn training + href: /training/browse/?products=azure-virtual-machines + - name: Azure Roadmap + href: https://azure.microsoft.com/roadmap/?category=compute + - name: Pricing calculator + href: https://azure.microsoft.com/pricing/calculator/ + - name: Common CLI commands + href: ../virtual-machines/linux/cli-manage.md + - name: Common PowerShell commands + href: ../virtual-machines/windows/ps-common-ref.md + - name: Common networking PowerShell commands + href: ../virtual-machines/windows/ps-common-network-ref.md + - name: VM template description + href: ../virtual-machines/windows/template-description.md + - name: FAQ + items: + - name: Linux + href: ../virtual-machines/linux/faq.yml + - name: Windows + href: ../virtual-machines/windows/faq.yml +- name: Support and troubleshooting + href: vmss-support-help.md From 7e60e754568a0da23af89295a0d75ec9eef405c2 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:05:50 -0700 Subject: [PATCH 02/25] Add scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/.openpublishing.redirection.virtual-machine-scale-sets.json --- ...edirection.virtual-machine-scale-sets.json | 369 ++++++++++++++++++ 1 file changed, 369 insertions(+) create mode 100644 scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/.openpublishing.redirection.virtual-machine-scale-sets.json diff --git a/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/.openpublishing.redirection.virtual-machine-scale-sets.json b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/.openpublishing.redirection.virtual-machine-scale-sets.json new file mode 100644 index 000000000..33fc333c2 --- /dev/null +++ b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/.openpublishing.redirection.virtual-machine-scale-sets.json @@ -0,0 +1,369 @@ +{ + "redirections": [ + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-advanced-autoscale.md", + "redirect_url": "/azure/monitoring-and-diagnostics/insights-advanced-autoscale-virtual-machine-scale-sets", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-encrypt-disks-cli.md", + "redirect_url": "/azure/virtual-machine-scale-sets/disk-encryption-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/tutorial-autoscale-powershell.md", + "redirect_url": "/azure/azure-monitor/autoscale/autoscale-using-powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-encrypt-disks-ps.md", + "redirect_url": "/azure/virtual-machine-scale-sets/disk-encryption-powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-overview.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/policy-samples.md", + "redirect_url": "/azure/virtual-machine-scale-sets/policy-reference", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-create-cli.md", + "redirect_url": "/azure/virtual-machine-scale-sets/quick-create-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-convert-template-to-md.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": true + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-vertical-scale-reprovision.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-autoscale-overview", + "redirect_document_id": true + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-create-portal.md", + "redirect_url": "/azure/virtual-machine-scale-sets/quick-create-portal", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-create-powershell.md", + "redirect_url": "/azure/virtual-machine-scale-sets/quick-create-powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-create-template-linux.md", + "redirect_url": "/azure/virtual-machine-scale-sets/quick-create-template-linux", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/tutorial-install-apps-template.md", + "redirect_url": "/azure/virtual-machine-scale-sets/tutorial-install-apps-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-deploy-scaling-app-template.md", + "redirect_url": "/azure/virtual-machine-scale-sets/quick-create-template-linux", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-create-template-windows.md", + "redirect_url": "/azure/virtual-machine-scale-sets/quick-create-template-windows", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/cli-samples.md", + "redirect_url": "/azure/virtual-machine-scale-sets/scripts/cli-sample-create-simple-scale-set", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/powershell-samples.md", + "redirect_url": "/azure/virtual-machine-scale-sets/scripts/powershell-sample-create-simple-scale-set", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-security-attributes.md", + "redirect_url": "/azure/virtual-machine-scale-sets/security-baseline", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-security-controls.md", + "redirect_url": "/azure/virtual-machine-scale-sets/security-baseline", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-autoscale-cli.md", + "redirect_url": "/azure/virtual-machine-scale-sets/tutorial-autoscale-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-autoscale-powershell.md", + "redirect_url": "/azure/virtual-machine-scale-sets/tutorial-autoscale-powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-managed-disks.md", + "redirect_url": "/azure/virtual-machine-scale-sets/tutorial-use-disks-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-use-low-priority.md", + "redirect_url": "/azure/virtual-machine-scale-sets/use-spot", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-linux-autoscale.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-autoscale-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-windows-autoscale.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-autoscale-powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-cli-quick-create.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-create", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-cli-quick-create-cli-nodejs.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-create", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-linux-create-cli.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-create", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-linux-create-cli-nodejs.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-create", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-windows-create.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-create", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-create.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-create-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-portal-create.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-create-portal", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-windows-manage.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-manage-powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machines/linux/vertical-scaling-automation.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-vertical-scale-reprovision", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machines/windows/vertical-scaling-automation.md", + "redirect_url": "/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-vertical-scale-reprovision", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/cli-sample-manage-scale-set.md", + "redirect_url": "/azure/virtual-machine-scale-sets/scripts/cli-sample-attach-disks", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/instance-generalized-image-version-cli.md", + "redirect_url": "/azure/virtual-machine-scale-sets/instance-generalized-image-version", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/instance-specialized-image-version-cli.md", + "redirect_url": "/azure/virtual-machine-scale-sets/instance-specialized-image-version", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/instance-specialized-image-version-powershell.md", + "redirect_url": "/azure/virtual-machine-scale-sets/instance-specialized-image-version", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/instance-generalized-image-version-powershell.md", + "redirect_url": "/azure/virtual-machine-scale-sets/instance-generalized-image-version", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machines/flexible-virtual-machine-scale-sets-cli.md", + "redirect_url": "/azure/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machines/flexible-virtual-machine-scale-sets-migration-resources.md", + "redirect_url": "/azure/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-migration-resources", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machines/flexible-virtual-machine-scale-sets-portal.md", + "redirect_url": "/azure/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-portal", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machines/flexible-virtual-machine-scale-sets-powershell.md", + "redirect_url": "/azure/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machines/flexible-virtual-machine-scale-sets-rest-api.md", + "redirect_url": "/azure/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-rest-api", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/cli-sample-create-scale-set-from-custom-image.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/cli-sample-single-availability-zone-scale-set.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/powershell-sample-create-scale-set-from-custom-image.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/cli-sample-attach-disks.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/powershell-sample-enable-autoscale.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/cli-sample-install-apps.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/powershell-sample-create-simple-scale-set.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/cli-sample-create-simple-scale-set.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/cli-sample-zone-redundant-scale-set.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/powershell-sample-install-apps.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/powershell-sample-attach-disks.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/powershell-sample-zone-redundant-scale-set.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/powershell-single-av-zone-scale-set.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/powershell-sample-create-complete-scale-set.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/scripts/cli-sample-enable-autoscale.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/tutorial-autoscale-template.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machines/flexible-virtual-machine-scale-sets.md", + "redirect_url": "/azure/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets.md", + "redirect_url": "/azure/virtual-machine-scale-sets/overview", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/co-location.md", + "redirect_url": "/azure/virtual-machines/co-location", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/ephemeral-os-disks.md", + "redirect_url": "/azure/virtual-machines/ephemeral-os-disks", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/shared-image-galleries.md", + "redirect_url": "/azure/virtual-machines/shared-image-galleries", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/troubleshooting-shared-images.md", + "redirect_url": "/azure/virtual-machines/troubleshooting-shared-images", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/shared-images-cli.md", + "redirect_url": "/azure/virtual-machines/image-version?tabs=cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/shared-images-powershell.md", + "redirect_url": "/azure/virtual-machines/image-version?tabs=powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/quick-create-cli.md", + "redirect_url": "/previous-versions/azure/virtual-machine-scale-sets/quick-create-cli", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/quick-create-portal.md", + "redirect_url": "/previous-versions/azure/virtual-machine-scale-sets/quick-create-portal", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/quick-create-powershell.md", + "redirect_url": "/previous-versions/azure/virtual-machine-scale-sets/quick-create-powershell", + "redirect_document_id": false + }, + { + "source_path_from_root": "/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-vs-create.md", + "redirect_url": "/previous-versions/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-vs-create", + "redirect_document_id": false + } + ] +} From c22ff9f74ad59c70ebf1eb104c5699d43b4d8e2c Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:05:52 -0700 Subject: [PATCH 03/25] Add scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/breadcrumb/toc.yml --- .../virtual-machine-scale-sets/breadcrumb/toc.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/breadcrumb/toc.yml diff --git a/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/breadcrumb/toc.yml b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/breadcrumb/toc.yml new file mode 100644 index 000000000..a59c55094 --- /dev/null +++ b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/breadcrumb/toc.yml @@ -0,0 +1,12 @@ +items: +- name: Azure + tocHref: /azure/ + topicHref: /azure/index + items: + - name: Virtual Machine Scale Sets + tocHref: /azure/ + topicHref: /azure/virtual-machines/index + - name: Virtual Machine Scale Sets + tocHref: /azure/reliability + - name: Virtual Machine Scale Sets + tocHref: /azure/operational-excellence \ No newline at end of file From ac70cde4a7f29d0bf6ea907154400cfa4737be71 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:05:55 -0700 Subject: [PATCH 04/25] Add scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-faq.yml --- .../virtual-machine-scale-sets-faq.yml | 814 ++++++++++++++++++ 1 file changed, 814 insertions(+) create mode 100644 scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-faq.yml diff --git a/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-faq.yml b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-faq.yml new file mode 100644 index 000000000..abfba0259 --- /dev/null +++ b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/virtual-machine-scale-sets-faq.yml @@ -0,0 +1,814 @@ +### YamlMime:FAQ +metadata: + title: FAQ for Azure Virtual Machine Scale Sets + description: Get answers to the most frequently asked questions about Virtual Machine Scale Sets in Azure. + author: mimckitt + ms.author: mimckitt + ms.topic: faq + ms.service: azure-virtual-machine-scale-sets + ms.date: 06/14/2024 + ms.reviewer: jushiman + ms.custom: mimckitt, devx-track-azurecli, devx-track-azurepowershell + ms.devlang: azurecli +title: FAQ for Azure Virtual Machine Scale Sets +summary: Get answers to frequently asked questions about Virtual Machine Scale Sets in Azure. + + +sections: + - name: Top frequently asked questions for scale sets + questions: + - question: | + How many VMs can I have in a scale set? + answer: | + A scale set can have 0 to 1,000 virtual machines (VMs) based on platform images, or 0 to 600 VMs based on custom images. + + - question: | + Are data disks supported within scale sets? + answer: | + Yes. A scale set can define the configuration of an attached data disk that applies to all VMs in the set. For more information, see [Azure scale sets and attached data disks](virtual-machine-scale-sets-attached-disks.md). Other options for storing data include: + + * Azure Managed Disks (Premium v2, Premium, Standard, Ultra) + * Azure Files (SMB or NFS shared drives) + * Azure Netapp Files + * Azure shared disks + * Operating system drive + * Temp drive (local, not backed by Azure Storage) + * Azure data service (for example, Azure Table Storage or Azure Blob Storage) + * External data service (for example, a remote database) + + - question: | + Which Azure regions support scale sets? + answer: | + All regions support scale sets. + + - question: | + Which SKUs are supported for Virtual Machine Scale Sets? + answer: | + All SKUs are supported for Virtual Machine Scale Sets. + + - question: | + How do I create a scale set by using a custom image? + answer: | + Create and capture a VM image, and then use that as the source for your scale set. For a tutorial on how to create and use a custom VM image, you can use the [Azure CLI](tutorial-use-custom-image-cli.md) or [Azure PowerShell](tutorial-use-custom-image-powershell.md). + + - question: | + What is the difference between OS Image Upgrade and Reimage? + answer: | + OS Image Upgrade is a gradual and non-disruptive process that updates the OS image for the entire Virtual Machine Scale Set over time, ensuring minimal impact on running workloads. + + Reimage is a more immediate and disruptive action that affects only the selected VM instance, stopping it temporarily and reinstalling the OS. + + Learn more about the [difference between OS Image Upgrade and Reimage](virtual-machine-scale-sets-automatic-upgrade.md#os-image-upgrade-versus-reimage). + + - question: | + If I reduce my scale set capacity from 20 to 15, which VMs are removed? + answer: | + By default, virtual machines are removed from the scale set evenly across availability zones (if the scale set is deployed in zonal configuration) and fault domains, to maximize availability. VMs with the highest IDs are removed first. + + You can change the order of virtual machine removal by specifying a [scale-in policy](virtual-machine-scale-sets-scale-in-policy.md) for the scale set. + + - question: | + What if I then increase the capacity from 15 to 18? + answer: | + If you increase capacity to 18, then 3 new VMs are created. Each time, the VM instance ID is incremented from the previous highest value (for example, 20, 21, 22). VMs are balanced across fault domains. + + - question: | + When I'm using multiple extensions in a scale set, can I enforce an execution sequence? + answer: | + Yes, you can use scale set [extension sequencing](virtual-machine-scale-sets-extension-sequencing.md). + + - question: | + Do scale sets work with Azure availability sets? + answer: | + A regional (non-zonal) scale set uses *placement groups*, which act as an implicit availability set with five fault domains and five update domains. Scale sets of more than 100 VMs span multiple placement groups. For more information about placement groups, see [Working with large Virtual Machine Scale Sets](virtual-machine-scale-sets-placement-groups.md). An availability set of VMs can exist in the same virtual network as a scale set of VMs. A common configuration is to put control node VMs (which often require unique configuration) in an availability set, and put data nodes in the scale set. + + - question: | + Do scale sets work with Azure availability zones? + answer: | + Yes. For more information, see the [scale set zone doc](./virtual-machine-scale-sets-use-availability-zones.md). + + + - name: Autoscale + questions: + - question: | + What are best practices for Azure autoscale? + answer: | + See [Best practices for autoscaling virtual machines](/azure/azure-monitor/autoscale/autoscale-best-practices). + + - question: | + Where do I find metric names for autoscaling that uses host-based metrics? + answer: | + See [Supported metrics with Azure Monitor](/azure/azure-monitor/essentials/metrics-supported). + + - question: | + Are there any examples of autoscaling based on an Azure Service Bus topic and queue length? + answer: | + Yes. For these examples, see [Azure Monitor autoscaling common metrics](/azure/azure-monitor/autoscale/autoscale-common-metrics). + + For a Service Bus queue, use the following JSON: + + ```json + "metricName": "MessageCount", + "metricNamespace": "", + "metricResourceUri": "/subscriptions/s1/resourceGroups/rg1/providers/Microsoft.ServiceBus/namespaces/mySB/queues/myqueue" + ``` + + For a storage queue, use the following JSON: + + ```json + "metricName": "ApproximateMessageCount", + "metricNamespace": "", + "metricResourceUri": "/subscriptions/s1/resourceGroups/rg1/providers/Microsoft.ClassicStorage/storageAccounts/mystorage/services/queue/queues/mystoragequeue" + ``` + + Replace example values with your resource Uniform Resource Identifiers (URIs). + + + - question: | + Should I autoscale by using host-based metrics or a diagnostics extension? + answer: | + You can create an autoscale setting on a VM to use host-level metrics, or metrics based on a guest operating system. + + For a list of supported metrics, see [Azure Monitor autoscaling common metrics](/azure/azure-monitor/autoscale/autoscale-common-metrics). + + For a full sample for Virtual Machine Scale Sets, see [Advanced autoscale configuration by using Resource Manager templates for Virtual Machine Scale Sets](/azure/azure-monitor/autoscale/autoscale-virtual-machine-scale-sets). + + The sample uses the host-level CPU metric and a message count metric. + + + + - question: | + How do I set alert rules on a Virtual Machine Scale Set? + answer: | + You can create alerts on metrics for Virtual Machine Scale Sets via PowerShell or the Azure CLI. For more information, see [Azure Monitor PowerShell quickstart samples](/azure/azure-monitor/powershell-samples#create-metric-alerts) and [Azure Monitor cross-platform CLI quickstart samples](/azure/azure-monitor/cli-samples#work-with-alerts). + + The `TargetResourceId` of the Virtual Machine Scale Set looks like: + + */subscriptions/yoursubscriptionid/resourceGroups/yourresourcegroup/providers/Microsoft.Compute/virtualMachineScaleSets/yourvmssname* + + You can choose any VM performance counter as the metric to set an alert for. For more information, see [Guest operating system metrics for Resource Manager-based Windows VMs](/azure/azure-monitor/autoscale/autoscale-common-metrics#guest-os-metrics-for-resource-manager-based-windows-vms) and [Guest operating system metrics for Linux VMs](/azure/azure-monitor/autoscale/autoscale-common-metrics#guest-os-metrics-linux-vms) in the [Azure Monitor autoscaling common metrics](/azure/azure-monitor/autoscale/autoscale-common-metrics) article. + + - question: | + How do I set up autoscale on a Virtual Machine Scale Set by using PowerShell? + answer: | + See [automatically scale a Virtual Machine Scale Set](tutorial-autoscale-powershell.md). You can also configure autoscale with the [Azure CLI](tutorial-autoscale-cli.md) and [Azure templates](tutorial-autoscale-template.md). + + + - question: | + If I have stopped (deallocated) a VM, is that VM started as part of an autoscale operation? + answer: | + No. If autoscale rules require more VM instances as part of a scale set, a new VM instance is created. VM instances that are stopped (deallocated) aren't started as part of an autoscale event. However, those stopped (deallocated) VMs can be deleted as part of an autoscale event that scales in the number of instances, in the same way that any VM instance can be deleted based on the order of VM instance IDs. + + + + - name: Certificates + questions: + - question: | + How do I securely ship a certificate to the VM? + answer: | + To securely ship a certificate to the VM, you can install a customer certificate directly into a Windows certificate store from the customer's key vault. + + Use the following JSON: + + ```json + "secrets": [ + { + "sourceVault": { + "id": "/subscriptions/{subscriptionid}/resourceGroups/myrg1/providers/Microsoft.KeyVault/vaults/mykeyvault1" + }, + "vaultCertificates": [ + { + "certificateUrl": "https://mykeyvault1.vault.azure.net/secrets/{secretname}/{secret-version}", + "certificateStore": "certificateStoreName" + } + ] + } + ] + ``` + + The code supports Windows and Linux. + + For more information, see [Create or update a Virtual Machine Scale Set](/rest/api/compute/virtualmachinescalesets/createorupdate). + + + - question: | + How do I use self-signed certificates provisioned for Azure Service Fabric clusters? + answer: | + For the latest example, in an Azure shell, use the following Azure CLI statement, which will be printed to stdout: + + ```azurecli + az sf cluster create -h + ``` + + Self-signed certificates can't be used for distributed trust provided by a certificate authority, and shouldn't be used for any Service Fabric cluster intended to host enterprise production solutions. For more security guidance, review [Azure Service Fabric security best practices](/azure/security/fundamentals/service-fabric-best-practices) and [Service Fabric cluster security scenarios](../service-fabric/service-fabric-cluster-security.md). + + - question: | + For SSH authentication with a Linux Virtual Machine Scale Set from a Resource Manager template, can I specify an SSH key pair to use? + answer: | + Yes. The REST API for `osProfile` is similar to the standard VM REST API. + + Include `osProfile` in your template: + + ```json + "osProfile": { + "computerName": "[variables('vmName')]", + "adminUsername": "[parameters('adminUserName')]", + "linuxConfiguration": { + "disablePasswordAuthentication": "true", + "ssh": { + "publicKeys": [ + { + "path": "[variables('sshKeyPath')]", + "keyData": "[parameters('sshKeyData')]" + } + ] + } + } + } + ``` + + This JSON block is used in [this Azure Quickstart Template](https://github.com/Azure/azure-quickstart-templates/blob/master/quickstarts/microsoft.compute/vm-sshkey/azuredeploy.json). + + For more information, see [Create or update a Virtual Machine Scale Set](/rest/api/compute/virtualmachinescalesets/createorupdate#linuxconfiguration). + + - question: | + How do I remove deprecated certificates? + answer: | + To remove deprecated certificates, remove the old certificate from the vault certificates list. Leave all the certificates that you want to remain on your computer in the list. This action doesn't remove the certificate from all your VMs. It also doesn't add the certificate to new VMs that are created in the Virtual Machine Scale Set. + + To remove the certificate from existing VMs, use a custom script extension to manually remove the certificate from your certificate store. + + - question: | + How do I inject an existing SSH public key into the Virtual Machine Scale Set SSH layer during provisioning? + answer: | + If you're providing the VMs only with a public SSH key, you don't need to put the public keys in Azure Key Vault. Public keys aren't secret. + + You can provide SSH public keys in plain text when you create a Linux VM: + + ```json + "linuxConfiguration": { + "ssh": { + "publicKeys": [ + { + "path": "path", + "keyData": "publickey" + } + ] + } + } + ``` + + `linuxConfiguration` element name | Required | Type | Description + --- | --- | --- | --- + `ssh` | No | Collection | Specifies the SSH key configuration for a Linux operating system. + `path` | Yes | String | Specifies the Linux file path where the SSH keys or certificate should be located. + `keyData` | Yes | String | Specifies a base64-encoded SSH public key. + + For an example, see [the vm-sshkey GitHub quickstart template](https://github.com/Azure/azure-quickstart-templates/blob/master/quickstarts/microsoft.compute/vm-sshkey/azuredeploy.json). + + - question: | + When I run `Update-AzVmss` after adding more than one certificate from the same key vault, why do I get an error message? + answer: | + This error can happen if you try to re-add the same vault instead of using a new vault certificate for the existing source vault. The `Add-AzVmssSecret` command doesn't work correctly if you're adding more secrets. + + To add more secrets from the same key vault, update the following list: `$vmss.properties.osProfile.secrets[0].vaultCertificates`. + + For the expected input structure, see [Create or update a virtual machine set](/rest/api/compute/virtualmachinescalesets/createorupdate). + + Find the secret in the Virtual Machine Scale Set object that is in the key vault. Then, add your certificate reference (the URL and the secret store name) to the list associated with the vault. + + > [!NOTE] + > Currently, you can't remove certificates from VMs by using the Virtual Machine Scale Set API. + > + + New VMs will not have the old certificate. However, VMs that have the certificate, and that are already deployed, do have the old certificate. + + - question: | + Can I push certificates to the Virtual Machine Scale Set without providing the password, when the certificate is in the secret store? + answer: | + You don't need to hard-code passwords in scripts. You can dynamically retrieve passwords with the permissions you use to run the deployment script. If you have a script that moves a certificate from the secret store key vault, the secret store `get certificate` command also outputs the password of the .pfx file. + + - question: | + How does the `Secrets` property of `virtualMachineProfile.osProfile` for a Virtual Machine Scale Set work? Why do I need the `sourceVault` value when I have to specify the absolute URI for a certificate by using the `certificateUrl` property? + answer: | + A Windows Remote Management (WinRM) certificate reference must be present in the `Secrets` property of the operating system profile. + + The purpose of indicating the source vault is to enforce access control list (ACL) policies that exist in a user's Azure Cloud Services model. If the source vault isn't specified, users who don't have permissions to deploy or access secrets to a key vault are able to, through a compute resource provider (CRP). ACLs exist even for resources that don't exist. + + If you provide an incorrect source vault ID, but a valid key vault URL, an error is reported when you poll the operation. + + - question: | + If I add secrets to an existing Virtual Machine Scale Set, are the secrets injected into existing VMs, or only into new ones? + answer: | + Certificates are added to all your VMs, even pre-existing ones. If your Virtual Machine Scale Set `upgradePolicy` property is set to `manual`, the certificate is added to the VM when you perform a manual update on the VM. + + - question: | + Where do I put certificates for Linux VMs? + answer: | + To learn how to deploy certificates for Linux VMs, see [Deploy certificates to VMs from a customer-managed key vault](/archive/blogs/kv/deploy-certificates-to-vms-from-customer-managed-key-vault). + + - question: | + How do I add a new vault certificate to a new certificate object? + answer: | + To add a vault certificate to an existing secret, see the following PowerShell example. Use only one secret object. + + ```powershell + $newVaultCertificate = New-AzVmssVaultCertificateConfig -CertificateStore MY -CertificateUrl https://sansunallapps1.vault.azure.net:443/secrets/dg-private-enc/55fa0332edc44a84ad655298905f1809 + + $vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Add($newVaultCertificate) + + Update-AzVmss -VirtualMachineScaleSet $vmss -ResourceGroup $rg -Name $vmssName + ``` + + - question: | + What happens to certificates if I reimage a VM? + answer: | + If you reimage a VM, certificates are deleted. Reimaging deletes the entire operating system disk. + + - question: | + What happens if I delete a certificate from the key vault? + answer: | + If the secret is deleted from the key vault, and then you run `stop deallocate` for all your VMs and then start them again, you encounter a failure. The failure occurs because the CRP needs to retrieve the secrets from the key vault, but it can't. In this scenario, you can delete the certificates from the Virtual Machine Scale Set model. + + The CRP component doesn't make customer secrets persistent. If you run `stop deallocate` for all VMs in the Virtual Machine Scale Set, the cache is deleted. In this scenario, secrets are retrieved from the key vault. + + You don't encounter this problem when scaling out, because there's a cached copy of the secret in Azure Service Fabric (in the single-fabric tenant model). + + - question: | + Why do I have to specify the certificate version when I use Key Vault? + answer: | + The purpose is to make it clear to the user what certificate is deployed on their VMs. + + If you create a VM and then update your secret in the key vault, the new certificate isn't downloaded to your VMs. But your VMs appear to reference it, and new VMs get the new secret. To avoid this issue, you're required to reference a secret version. + + - question: | + My team works with several certificates that are distributed to us as .cer public keys. What is the recommended approach for deploying these certificates to a Virtual Machine Scale Set? + answer: | + To deploy .cer public keys to a Virtual Machine Scale Set, you can generate a .pfx file that contains only .cer files. To do this, use `X509ContentType = Pfx`. For example, load the .cer file as an `x509Certificate2` object in C# or PowerShell, and then call the method. + + For more information, see [X509Certificate.Export Method (X509ContentType, String)](/dotnet/api/system.security.cryptography.x509certificates.x509certificate.export?#system-security-cryptography-x509certificates-x509certificate-export(system-security-cryptography-x509certificates-x509contenttype-system-string)). + + - question: | + How do I pass in certificates as base64 strings? + answer: | + To emulate passing in a certificate as a base64 string, you can extract the latest versioned URL in a Resource Manager template. Include the following JSON property in your Resource Manager template: + + ```json + "certificateUrl": "[reference(resourceId(parameters('vaultResourceGroup'), 'Microsoft.KeyVault/vaults/secrets', parameters('vaultName'), parameters('secretName')), '2015-06-01').secretUriWithVersion]" + ``` + + - question: | + Do I have to wrap certificates in JSON objects in key vaults? + answer: | + In Virtual Machine Scale Sets and VMs, certificates must be wrapped in JSON objects. + + We also support the content type *application/x-pkcs12*. + + We currently don't support .cer files. To use .cer files, export them into .pfx containers. + + + + - name: Compliance and security + questions: + - question: | + Are Virtual Machine Scale Sets PCI-compliant? + answer: | + Virtual Machine Scale Sets are a thin API layer on top of the CRP. Both components are part of the compute platform in the Azure service tree. + + From a compliance perspective, Virtual Machine Scale Sets are a fundamental part of the Azure compute platform. They share the following with the CRP itself: a team, tools, processes, deployment methodology, security controls, just-in-time (JIT) compilation, monitoring, and alerting. Virtual Machine Scale Sets are Payment Card Industry (PCI)-compliant because the CRP is part of the current PCI Data Security Standard (DSS) attestation. + + For more information, see the [Microsoft Trust Center](https://www.microsoft.com/TrustCenter/Compliance/PCI). + + - question: | + Do managed identities for Azure resources work with Virtual Machine Scale Sets? + answer: | + Yes. For more information, see the [managed identities overview](/azure/active-directory/managed-identities-azure-resources/overview). You can see some example MSI templates in Azure Quickstart Templates for [Linux](https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.compute/vmss-msi) and [Windows](https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.compute/vmss-msi). + + - name: Deleting + questions: + - question: | + Will the locks I set in place on Virtual Machine Scale Set instances be respected when I'm deleting instances? + answer: | + In the Azure portal, you have the ability to delete an individual instance, or bulk delete by selecting multiple instances. If you attempt to delete a single instance that has a lock in place, the lock is respected and you can't delete the instance. However, if you bulk select multiple instances, and any of those instances have a lock in place, the locks aren't respected. All of the selected instances will be deleted. + + In the Azure CLI, you only have the ability to delete an individual instance. If you attempt to delete a single instance that has a lock in place, the lock is respected and you can't delete that instance. + + - name: Extensions + questions: + - question: | + How do I delete a Virtual Machine Scale Set extension? + answer: | + To delete a Virtual Machine Scale Set extension, use the following PowerShell example: + + ```powershell + $vmss = Get-AzVmss -ResourceGroupName "resource_group_name" -VMScaleSetName "vmssName" + + $vmss=Remove-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "extensionName" + + Update-AzVmss -ResourceGroupName "resource_group_name" -VMScaleSetName "vmssName" -VirtualMacineScaleSet $vmss + ``` + + You can find the `extensionName` value in `$vmss`. + + - question: | + Is there a Virtual Machine Scale Set template example that integrates with Azure Monitor Logs? + answer: | + For a Virtual Machine Scale Set template example that integrates with Azure Monitor Logs, see the second example in [Deploy an Azure Service Fabric cluster and enable monitoring by using Azure Monitor Logs](https://github.com/krnese/AzureDeploy/tree/master/OMS/MSOMS/ServiceFabric). + + - question: | + How do I add an extension to all VMs in my Virtual Machine Scale Set? + answer: | + If the update policy is set to automatic, redeploying the template with the new extension properties updates all VMs. + + If the update policy is set to manual, first update the extension, and then manually update all instances in your VMs. + + - question: | + If the extensions associated with an existing Virtual Machine Scale Set are updated, are existing VMs affected? + answer: | + If the extension definition in the Virtual Machine Scale Set model is updated, and the `upgradePolicy` property is set to `automatic`, it updates the VMs. If the `upgradePolicy` property is set to `manual`, extensions are flagged as not matching the model. + + - question: | + Are extensions run again when an existing machine is service-healed or reimaged? + answer: | + If an existing VM is service-healed, it appears as a reboot, and the extensions aren't run again. If a VM is reimaged, the process is similar to replacing the operating system drive with the source image. Any specializations from the latest model, such as extensions, are run again. + + - question: | + How do I join a Virtual Machine Scale Set to an Active Directory domain? + answer: | + To join a Virtual Machine Scale Set to an Active Directory domain, you can define an extension. + + To define an extension, use the `JsonADDomainExtension` property: + + ```json + "extensionProfile": { + "extensions": [ + { + "name": "joindomain", + "properties": { + "publisher": "Microsoft.Compute", + "type": "JsonADDomainExtension", + "typeHandlerVersion": "1.3", + "settings": { + "Name": "[parameters('domainName')]", + "OUPath": "[variables('ouPath')]", + "User": "[variables('domainAndUsername')]", + "Restart": "true", + "Options": "[variables('domainJoinOptions')]" + }, + "protectedsettings": { + "Password": "[parameters('domainJoinPassword')]" + } + } + } + ] + } + ``` + + - question: | + My Virtual Machine Scale Set extension is trying to install something that requires a reboot. What should I do? + answer: | + You can use the Azure Automation Desired State Configuration extension. If the operating system is Windows Server 2012 R2, Azure pulls in the Windows Management Framework (WMF) 5.0 setup, reboots, and then continues with the configuration. + + - question: | + How do I run a custom script that's hosted in a private storage account? + answer: | + Set up protected settings with the storage account key and name. For more information, see [Custom script extension](../virtual-machines/extensions/custom-script-windows.md?toc=/azure/virtual-machines/windows/toc.json#property-managedidentity). + + - name: Passwords + questions: + - question: | + How do I reset the password for VMs in my Virtual Machine Scale Set? + answer: | + You can: + + - Change the Virtual Machine Scale Set model directly. This option is only available with API 2017-12-01 and later versions. + + Update the admin credentials directly in the scale set model (for example, by using the Azure Resource Explorer, PowerShell or the Azure CLI). After the scale set is updated, all new VMs have the new credentials. Existing VMs only have the new credentials if they are reimaged. + + - Reset the password by using the VM access extensions. Make sure to follow the password requirements, as described in [the FAQ](../virtual-machines/windows/faq.yml#what-are-the-password-requirements-when-creating-a-vm-). + + Using a VM access extension doesn't require reimaging, because the extension doesn't update the password in the model. The extension runs a script to append the password to the password or to the SSH key file. The extension doesn't remove the original SSH key. Once the extension is updated, upgrade the instances to apply the updates to the username and password on all the VM instances. + + >[!NOTE] + > If Auto upgrade policy is set to `manual`, manually select the instance to perform an upgrade operation on individual VM instances. If auto upgrade set to `Auto`, the extension will automatically upgrade. For more information, see [Automatic Extension Upgrades](../virtual-machines/automatic-extension-upgrade.md) + + Use the following PowerShell example for a Windows Virtual Machine Scale Set: + + ```powershell + $vmssName = "myvmss" + $vmssResourceGroup = "myvmssrg" + $publicConfig = @{"UserName" = "newuser"} + $privateConfig = @{"Password" = "********"} + + $extName = "VMAccessAgent" + $publisher = "Microsoft.Compute" + $vmss = Get-AzVmss -ResourceGroupName $vmssResourceGroup -VMScaleSetName $vmssName + $vmss = Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name $extName -Publisher $publisher -Setting $publicConfig -ProtectedSetting $privateConfig -Type $extName -TypeHandlerVersion "2.0" -AutoUpgradeMinorVersion $true + Update-AzVmss -ResourceGroupName $vmssResourceGroup -Name $vmssName -VirtualMachineScaleSet $vmss + ``` + + Use the following Azure CLI example for a Linux Virtual Machine Scale Set: + + ```azurecli + az vmss extension set \ + --resource-group myResouceGroup \ + --vmss-name myScaleSet \ + --publisher Microsoft.OSTCExtensions \ + --name VMAccessForLinux \ + --version 1.5 \ + --protected-settings "{'username': 'newUser', 'password': 'newPassword'}" + ``` + + - name: Networking + questions: + - question: | + Is it possible to assign a network security group (NSG) to a scale set, so that it applies to all the VM NICs in the set? + answer: | + Yes. You can apply an NSG directly to a scale set by referencing it in the `networkInterfaceConfigurations` section of the network profile. Here's an example: + + ```json + "networkProfile": { + "networkInterfaceConfigurations": [ + { + "name": "nic1", + "properties": { + "primary": "true", + "ipConfigurations": [ + { + "name": "ip1", + "properties": { + "subnet": { + "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('vnetName'), '/subnets/subnet1')]" + }, + "loadBalancerInboundNatPools": [ + { + "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/inboundNatPools/natPool1')]" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/backendAddressPools/addressPool1')]" + } + ] + } + } + ], + "networkSecurityGroup": { + "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/networkSecurityGroups/', variables('nsgName'))]" + } + } + } + ] + } + ``` + + - question: | + How do I do a virtual IP (VIP) swap for Virtual Machine Scale Sets in the same subscription and same region? + answer: | + If you have two Virtual Machine Scale Sets with Azure Load Balancer, and they are in the same subscription and region, you can deallocate the public IP addresses from each one, and assign to the other. For more information, see [VIP swap: Blue-green deployment in Azure Resource Manager](https://msftstack.wordpress.com/2017/02/24/vip-swap-blue-green-deployment-in-azure-resource-manager/). You may experience a delay, though, because the resources are deallocated or allocated at the network level. A faster option is to use Azure Application Gateway with two back-end pools, and a routing rule. Alternatively, you can host your application with [Azure App Service](https://azure.microsoft.com/services/app-service/), which supports fast switching between staging and production slots. + + - question: | + How do I specify a range of private IP addresses to use for static private IP address allocation? + answer: | + IP addresses are selected from a subnet that you specify. + + The allocation method of Virtual Machine Scale Set IP addresses is always *dynamic*, but that doesn't mean that these IP addresses can change. In this case, dynamic only means that you don't specify the IP address in a `PUT` request. Specify the static set by using the subnet. + + - question: | + How do I deploy a Virtual Machine Scale Set to an existing Azure virtual network? + answer: | + See [Deploy a Virtual Machine Scale Set to an existing virtual network](https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.compute/vmss-existing-vnet). + + - question: | + Can I use scale sets with accelerated networking? + answer: | + Yes. To use accelerated networking, set `enableAcceleratedNetworking` to `true` in your scale set's `networkInterfaceConfigurations` settings. For example: + + ```json + "networkProfile": { + "networkInterfaceConfigurations": [ + { + "name": "niconfig1", + "properties": { + "primary": true, + "enableAcceleratedNetworking" : true, + "ipConfigurations": [ + ] + } + } + ] + } + ``` + + - question: | + How can I configure the DNS servers used by a scale set? + answer: | + To create a Virtual Machine Scale Set with a custom DNS configuration, add a `dnsSettings` JSON packet to the scale set `networkInterfaceConfigurations` section. Here's an example: + + ```json + "dnsSettings":{ + "dnsServers":["10.0.0.6", "10.0.0.5"] + } + ``` + + - question: | + How can I configure a scale set to assign a public IP address to each VM? + answer: | + To create a Virtual Machine Scale Set that assigns a public IP address to each VM, make sure that the API version of the *Microsoft.Compute/virtualMachineScaleSets* resource is 2017-03-30, and add a `publicipaddressconfiguration` JSON packet to the scale set `ipConfigurations` section. Here's an example: + + ```json + "publicipaddressconfiguration": { + "name": "pub1", + "properties": { + "idleTimeoutInMinutes": 15 + } + } + ``` + + - question: | + Can I configure a scale set to work with multiple application gateways? + answer: | + Yes. You can add the resource IDs for multiple application gateway backend address pools to the `applicationGatewayBackendAddressPools` list in the `ipConfigurations` section of your scale set network profile. + + - name: Scale + questions: + - question: | + In what case would I create a Virtual Machine Scale Set with fewer than two VMs? + answer: | + One reason to create a Virtual Machine Scale Set with fewer than two VMs is to use the elastic properties of a Virtual Machine Scale Set. For example, you can deploy a Virtual Machine Scale Set with zero VMs to define your infrastructure without paying VM running costs. Then, when you're ready to deploy VMs, you can increase the capacity of the Virtual Machine Scale Set to the production instance count. + + Another reason you might create a Virtual Machine Scale Set with fewer than two VMs is if you're concerned less with availability than with using an availability set with discrete VMs. Virtual Machine Scale Sets give you a way to work with undifferentiated compute units that are fungible. This uniformity is a key differentiator for Virtual Machine Scale Sets versus availability sets. Many stateless workloads don't track individual units. If the workload drops, you can scale down to one compute unit, and then scale up to many when the workload increases. + + - question: | + How do I change the number of VMs in a Virtual Machine Scale Set? + answer: | + To change the number of VMs in a Virtual Machine Scale Set in the Azure portal, from the Virtual Machine Scale Set **Properties** section, select the **Scaling** pane, and use the slider bar. + + - question: | + How do I define custom alerts for when certain thresholds are reached? + answer: | + You have some flexibility in how you handle alerts for specified thresholds. For example, you can define customized webhooks. The following webhook example is from a Resource Manager template: + + ```json + { + "type": "Microsoft.Insights/autoscaleSettings", + "apiVersion": "[variables('insightsApi')]", + "name": "autoscale", + "location": "[parameters('resourceLocation')]", + "dependsOn": [ + "[concat('Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]" + ], + "properties": { + "name": "autoscale", + "targetResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]", + "enabled": true, + "notifications": [ + { + "operation": "Scale", + "email": { + "sendToSubscriptionAdministrator": true, + "sendToSubscriptionCoAdministrators": true, + "customEmails": [ + "youremail@address.com" + ] + }, + "webhooks": [ + { + "serviceUri": "", + "properties": { + "key1": "custommetric", + "key2": "scalevmss" + } + } + ] + } + ] + } + } + ``` + + + - name: Patching and operations + questions: + - question: | + Can I create a scale set in an existing resource group? + answer: | + Yes, you can. + + - question: | + Can I move a scale set to another resource group? + answer: | + Yes, you can move scale set resources to a new subscription or resource group. + + - question: | + How do I update my Virtual Machine Scale Set to a new image? How do I manage patching? + answer: | + To update your Virtual Machine Scale Set to a new image, and to manage patching, see [Upgrade a Virtual Machine Scale Set](./virtual-machine-scale-sets-upgrade-scale-set.md). + + - question: | + Can I use the reimage operation to reset a VM without changing the image? (That is, I want reset a VM to factory settings rather than to a new image.) + answer: | + Yes, you can use the reimage operation to reset a VM without changing the image. However, if your Virtual Machine Scale Set references a platform image with `version = latest`, your VM can update to a later operating system image when you call `reimage`. + + - question: | + Is it possible to integrate scale sets with Azure Monitor Logs? + answer: | + Yes, you can by installing the Azure Monitor extension on the scale set VMs. Here is an example that uses the Azure CLI: + + ```azurecli + az vmss extension set --name MicrosoftMonitoringAgent --publisher Microsoft.EnterpriseCloud.Monitoring --resource-group Team-03 --vmss-name nt01 --settings "{'workspaceId': ''}" --protected-settings "{'workspaceKey': ' [!NOTE] + > If your scale set `upgradePolicy` is set to manual, you need to apply the extension to the all VMs in the set by calling upgrade on them. In the Azure CLI, this is `az vmss update-instances`. + + [!INCLUDE [azure-monitor-log-analytics-rebrand](~/reusable-content/ce-skilling/azure/includes/azure-monitor-log-analytics-rebrand.md)] + + - name: Troubleshooting + questions: + - question: | + How do I turn on boot diagnostics? + answer: | + To turn on boot diagnostics, first, create a storage account. Then, put this JSON block in your Virtual Machine Scale Set `virtualMachineProfile`, and update the Virtual Machine Scale Set: + + ```json + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "http://yourstorageaccount.blob.core.windows.net" + } + } + ``` + + When a new VM is created, the `InstanceView` property of the VM shows the details for the screenshot. Here's an example: + + ```json + "bootDiagnostics": { + "consoleScreenshotBlobUri": "https://o0sz3nhtbmkg6geswarm5.blob.core.windows.net/bootdiagnostics-swarmagen-4157d838-8335-4f78-bf0e-b616a99bc8bd/swarm-agent-9574AE92vmss-0_2.4157d838-8335-4f78-bf0e-b616a99bc8bd.screenshot.bmp", + "serialConsoleLogBlobUri": "https://o0sz3nhtbmkg6geswarm5.blob.core.windows.net/bootdiagnostics-swarmagen-4157d838-8335-4f78-bf0e-b616a99bc8bd/swarm-agent-9574AE92vmss-0_2.4157d838-8335-4f78-bf0e-b616a99bc8bd.serialconsole.log" + } + ``` + - question: | + How do I troubleshoot other issues? + answer: | + Visit [Troubleshooting common issue with Virtual Machine Scale Sets](/troubleshoot/azure/virtual-machine-scale-sets/welcome-virtual-machine-scale-sets) page. + + - name: Virtual machine properties + questions: + - question: | + How do I get property information for each VM without making multiple calls? For example, how would I get the fault domain for each of the 100 VMs in my Virtual Machine Scale Set? + answer: | + You can call `ListVMInstanceViews` by doing a REST API `GET` on the following resource URI: + + /subscriptions//resourceGroups//providers/Microsoft.Compute/virtualMachineScaleSets//virtualMachines?$expand=instanceView&$select=instanceView + + Note that fault domain is not returned when the scale set uses max spreading (platformFaultDomainCount = 1), because there is no guarantee as to how many fault domains would be used with this setting. + + - question: | + Can I pass different extension arguments to different VMs in a Virtual Machine Scale Set? + answer: | + No, you can't. However, extensions can act based on the unique properties of the VM they are running on, such as on the machine name. Extensions also can query instance metadata on `http://169.254.169.254` to get more information about the VM. + + - question: | + Why are there gaps (for example, 0, 1, 3) between my Virtual Machine Scale Set VM machine names and VM IDs? + answer: | + Gaps are because your Virtual Machine Scale Set `overprovision` property is set to the default value of `true`. If overprovisioning is set to `true`, more VMs than requested are created. Extra VMs are then deleted. In this case, you gain increased deployment reliability, but at the expense of contiguous naming and contiguous network address translation (NAT) rules. + + You can set this property to `false`. For small Virtual Machine Scale Sets, deployment reliability won't be significantly affected. + + - question: | + What's the difference between deleting a VM in a Virtual Machine Scale Set and deallocating the VM? When should I choose one over the other? + answer: | + The main difference is that `deallocate` doesn't delete the virtual hard disks (VHDs). There are storage costs associated with running `stop deallocate`. You might use one or the other for one of the following reasons: + + - You want to stop paying compute costs, but you want to keep the disk state of the VMs. + - You want to start a set of VMs more quickly than you can scale out a Virtual Machine Scale Set. + - Related to this scenario, you might have created your own autoscale engine and want a faster end-to-end scale. + - You have a Virtual Machine Scale Set that is unevenly distributed across fault domains or update domains. This uneven distribution might be because you selectively deleted VMs, or because VMs were deleted after overprovisioning. Running `stop deallocate` followed by `start` on the Virtual Machine Scale Set evenly distributes the VMs across fault domains or update domains. + + - question: | + How do I take a snapshot of a Virtual Machine Scale Set instance? + answer: | + Create a snapshot from an instance of a Virtual Machine Scale Set. Here's an example: + + ```azurepowershell-interactive + $rgname = "myResourceGroup" + $vmssname = "myVMScaleSet" + $Id = 0 + $location = "East US" + + $vmss1 = Get-AzVmssVM -ResourceGroupName $rgname -VMScaleSetName $vmssname -InstanceId $Id + $snapshotconfig = New-AzSnapshotConfig -Location $location -AccountType Standard_LRS -OsType Windows -CreateOption Copy -SourceUri $vmss1.StorageProfile.OsDisk.ManagedDisk.id + New-AzSnapshot -ResourceGroupName $rgname -SnapshotName 'mySnapshot' -Snapshot $snapshotconfig + ``` + + Create a managed disk from the snapshot. Here's an example: + + ```azurepowershell-interactive + $snapshotName = "mySnapshot" + $snapshot = Get-AzSnapshot -ResourceGroupName $rgname -SnapshotName $snapshotName + $diskConfig = New-AzDiskConfig -AccountType Premium_LRS -Location $location -CreateOption Copy -SourceResourceId $snapshot.Id + $osDisk = New-AzDisk -Disk $diskConfig -ResourceGroupName $rgname -DiskName ($snapshotName + '_Disk') + ``` From aee8d2acb43625f66df13e3eab5bf6a7ee32756d Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:05:57 -0700 Subject: [PATCH 05/25] Add scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/index.yml --- .../virtual-machine-scale-sets/index.yml | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/index.yml diff --git a/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/index.yml b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/index.yml new file mode 100644 index 000000000..7b14d36d8 --- /dev/null +++ b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/index.yml @@ -0,0 +1,108 @@ +### YamlMime:Landing + +title: Virtual Machine Scale Sets documentation +summary: Azure Virtual Machine Scale Sets let you create and manage a group of load balanced and autoscaling VMs. + +metadata: + title: Virtual Machine Scale Sets documentation + description: Learn how to create, configure, manage, and autoscale Virtual Machine Scale Sets. + ms.service: azure-virtual-machine-scale-sets + ms.topic: landing-page + author: ju-shim + ms.author: jushiman + ms.reviewer: mimckitt + ms.date: 11/22/2022 + +# linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | sample | tutorial | video | whats-new + +landingContent: +# Cards and links should be based on top customer tasks or top subjects +# Start card title with a verb + # Card + - title: About Virtual Machine Scale Sets + linkLists: + - linkListType: overview + links: + - text: What are Virtual Machine Scale Sets? + url: overview.md + - text: Frequently asked questions (FAQ) + url: virtual-machine-scale-sets-faq.yml + - text: Orchestration modes + url: virtual-machine-scale-sets-orchestration-modes.md + # Card + - title: Get started + linkLists: + - linkListType: quickstart + links: + - text: Azure CLI + url: flexible-virtual-machine-scale-sets-cli.md + - text: Azure Portal + url: flexible-virtual-machine-scale-sets-portal.md + - text: Azure PowerShell + url: flexible-virtual-machine-scale-sets-powershell.md + + # Card + - title: Latest features + linkLists: + - linkListType: whats-new + links: + - text: Scale-in policy + url: virtual-machine-scale-sets-scale-in-policy.md + - text: Terminate notification + url: virtual-machine-scale-sets-terminate-notification.md + - text: Instance protection + url: virtual-machine-scale-sets-instance-protection.md + + # Card + - title: Step-by-step guides + linkLists: + - linkListType: how-to-guide + links: + - text: Create and manage a scale set with the Azure CLI + url: tutorial-create-and-manage-cli.md + - text: Create and manage a scale set with Azure PowerShell + url: tutorial-create-and-manage-powershell.md + - text: Use data disks with the Azure CLI + url: tutorial-use-disks-cli.md + - text: Use data disks with Azure PowerShell + url: tutorial-use-disks-powershell.md + - text: Use a custom VM image with the Azure CLI + url: tutorial-use-custom-image-cli.md + - text: Use a custom VM image with Azure PowerShell + url: tutorial-use-custom-image-powershell.md + - text: Deploy apps to a scale set with the Azure CLI + url: tutorial-install-apps-cli.md + - text: Deploy apps to a scale set with Azure PowerShell + url: tutorial-install-apps-powershell.md + - text: Autoscale a scale set with the Azure CLI + url: tutorial-autoscale-cli.md + - text: Autoscale a scale set with Azure PowerShell + url: tutorial-autoscale-powershell.md + + +# Card + - title: Self-paced training + linkLists: + - linkListType: learn + links: + - text: Build a scalable application with Virtual Machine Scale Sets + url: /training/modules/build-app-with-scale-sets/ + - text: Create a Windows virtual machine in Azure + url: /training/modules/create-windows-virtual-machine-in-azure/ + + +# Card + - title: Troubleshooting + linkLists: + - linkListType: how-to-guide + links: + - text: Troubleshooting Guides + url: /troubleshoot/azure/virtual-machine-scale-sets/welcome-virtual-machine-scale-sets + - text: Troubleshoot scaling errors + url: /troubleshoot/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-quota-exceeded + - text: Troubleshoot deployment errors + url: /troubleshoot/azure/virtual-machine-scale-sets/vmss-public-ip-count-limit-exceeded + - text: Troubleshoot extension issues + url: /troubleshoot/azure/virtual-machine-scale-sets/vm-extension-provisioning-errors + - text: Microsoft Q&A + url: /answers/topics/123/azure-virtual-machines-scale-set.html From ca0692e4b219db7064af38c6ef34d75cebadbb9a Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:05:59 -0700 Subject: [PATCH 06/25] Add scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-cli.md --- ...flexible-virtual-machine-scale-sets-cli.md | 847 ++++++++++++++++++ 1 file changed, 847 insertions(+) create mode 100644 scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-cli.md diff --git a/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-cli.md b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-cli.md new file mode 100644 index 000000000..1437a6d08 --- /dev/null +++ b/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-cli.md @@ -0,0 +1,847 @@ +--- +title: Create virtual machines in a Flexible scale set using Azure CLI +description: Learn how to create a Virtual Machine Scale Set in Flexible orchestration mode using Azure CLI. +author: fitzgeraldsteele +ms.author: fisteele +ms.topic: how-to +ms.service: azure-virtual-machine-scale-sets +ms.date: 06/14/2024 +ms.reviewer: jushiman +ms.custom: mimckitt, devx-track-azurecli, vmss-flex, innovation-engine, linux-related-content +--- + +# Create virtual machines in a scale set using Azure CLI + +[![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://go.microsoft.com/fwlink/?linkid=2286316) + +This article steps through using the Azure CLI to create a Virtual Machine Scale Set. + +Make sure that you've installed the latest [Azure CLI](/cli/azure/install-az-cli2) and are logged in to an Azure account with [az login](/cli/azure/reference-index). + + +## Launch Azure Cloud Shell + +The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. It has common Azure tools preinstalled and configured to use with your account. + +To open the Cloud Shell, select **Open Cloud Shell** from the upper right corner of a code block. You can also launch Cloud Shell in a separate browser tab by going to [https://shell.azure.com/cli](https://shell.azure.com/cli). Select **Copy** to copy the blocks of code, paste it into the Cloud Shell, and press enter to run it. + +## Define environment variables + +Define environment variables as follows. + +```bash +export RANDOM_ID="$(openssl rand -hex 3)" +export MY_RESOURCE_GROUP_NAME="myVMSSResourceGroup$RANDOM_ID" +export REGION=EastUS +export MY_VMSS_NAME="myVMSS$RANDOM_ID" +export MY_USERNAME=azureuser +export MY_VM_IMAGE="Ubuntu2204" +export MY_VNET_NAME="myVNet$RANDOM_ID" +export NETWORK_PREFIX="$(($RANDOM % 254 + 1))" +export MY_VNET_PREFIX="10.$NETWORK_PREFIX.0.0/16" +export MY_VM_SN_NAME="myVMSN$RANDOM_ID" +export MY_VM_SN_PREFIX="10.$NETWORK_PREFIX.0.0/24" +export MY_APPGW_SN_NAME="myAPPGWSN$RANDOM_ID" +export MY_APPGW_SN_PREFIX="10.$NETWORK_PREFIX.1.0/24" +export MY_APPGW_NAME="myAPPGW$RANDOM_ID" +export MY_APPGW_PUBLIC_IP_NAME="myAPPGWPublicIP$RANDOM_ID" +``` + +## Create a resource group + +A resource group is a logical container into which Azure resources are deployed and managed. All resources must be placed in a resource group. The following command creates a resource group with the previously defined $MY_RESOURCE_GROUP_NAME and $REGION parameters. + +```bash +az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION -o JSON +``` + +Results: + +```json +{ + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx", + "location": "eastus", + "managedBy": null, + "name": "myVMSSResourceGroupxxxxxx", + "properties": { + "provisioningState": "Succeeded" + }, + "tags": null, + "type": "Microsoft.Resources/resourceGroups" +} +``` + +## Create network resources + +Now you'll create network resources. In this step you're going to create a virtual network, one subnet 1 for Application Gateway, and one subnet for VMs. You also need to have a public IP to attach your Application Gateway to reach your web application from the internet. + +#### Create virtual network and subnet + +```bash +az network vnet create --name $MY_VNET_NAME --resource-group $MY_RESOURCE_GROUP_NAME --location $REGION --address-prefix $MY_VNET_PREFIX --subnet-name $MY_VM_SN_NAME --subnet-prefix $MY_VM_SN_PREFIX -o JSON +``` + +Results: + +```json +{ + "newVNet": { + "addressSpace": { + "addressPrefixes": [ + "10.X.0.0/16" + ] + }, + "enableDdosProtection": false, + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/virtualNetworks/myVNetxxxxxx", + "location": "eastus", + "name": "myVNetxxxxxx", + "provisioningState": "Succeeded", + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "resourceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "subnets": [ + { + "addressPrefix": "10.X.0.0/24", + "delegations": [], + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/virtualNetworks/myVNetxxxxxx/subnets/myVMSNxxxxxx", + "name": "myVMSNxxxxxx", + "privateEndpointNetworkPolicies": "Disabled", + "privateLinkServiceNetworkPolicies": "Enabled", + "provisioningState": "Succeeded", + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/virtualNetworks/subnets" + } + ], + "type": "Microsoft.Network/virtualNetworks", + "virtualNetworkPeerings": [] + } +} +``` + +### Create Application Gateway resources + +Azure Application Gateway requires a dedicated subnet within your virtual network. The following command creates a subnet named $MY_APPGW_SN_NAME with a specified address prefix named $MY_APPGW_SN_PREFIX in your virtual network $MY_VNET_NAME. + +```bash +az network vnet subnet create --name $MY_APPGW_SN_NAME --resource-group $MY_RESOURCE_GROUP_NAME --vnet-name $MY_VNET_NAME --address-prefix $MY_APPGW_SN_PREFIX -o JSON +``` + +Results: + +```json +{ + "addressPrefix": "10.66.1.0/24", + "delegations": [], + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/virtualNetworks/myVNetxxxxxx/subnets/myAPPGWSNxxxxxx", + "name": "myAPPGWSNxxxxxx", + "privateEndpointNetworkPolicies": "Disabled", + "privateLinkServiceNetworkPolicies": "Enabled", + "provisioningState": "Succeeded", + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/virtualNetworks/subnets" +} +``` +The following command creates a standard, zone redundant, static, public IPv4 in your resource group. + +```bash +az network public-ip create --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_APPGW_PUBLIC_IP_NAME --sku Standard --location $REGION --allocation-method static --version IPv4 --zone 1 2 3 -o JSON +``` + +Results: + +```json +{ + "publicIp": { + "ddosSettings": { + "protectionMode": "VirtualNetworkInherited" + }, + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/publicIPAddresses//myAPPGWPublicIPxxxxxx", + "idleTimeoutInMinutes": 4, + "ipAddress": "X.X.X.X", + "ipTags": [], + "location": "eastus", + "name": "/myAPPGWPublicIPxxxxxx", + "provisioningState": "Succeeded", + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Static", + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "resourceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "sku": { + "name": "Standard", + "tier": "Regional" + }, + "type": "Microsoft.Network/publicIPAddresses", + "zones": [ + "1", + "2", + "3" + ] + } +} +``` + +In this step, you create an Application Gateway that you're going to integrate with your Virtual Machine Scale Set. This example creates a zone redundant Application Gateway with Standard_v2 SKU and enables Http communication for the Application Gateway. The public IP $MY_APPGW_PUBLIC_IP_NAME created in previous step is attached to the Application Gateway. + +```bash +az network application-gateway create --name $MY_APPGW_NAME --location $REGION --resource-group $MY_RESOURCE_GROUP_NAME --vnet-name $MY_VNET_NAME --subnet $MY_APPGW_SN_NAME --capacity 2 --zones 1 2 3 --sku Standard_v2 --http-settings-cookie-based-affinity Disabled --frontend-port 80 --http-settings-port 80 --http-settings-protocol Http --public-ip-address $MY_APPGW_PUBLIC_IP_NAME --priority 1001 -o JSON +``` + + +```json +{ + "applicationGateway": { + "backendAddressPools": [ + { + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/backendAddressPools/appGatewayBackendPool", + "name": "appGatewayBackendPool", + "properties": { + "backendAddresses": [], + "provisioningState": "Succeeded", + "requestRoutingRules": [ + { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/requestRoutingRules/rule1", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + ] + }, + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/applicationGateways/backendAddressPools" + } + ], + "backendHttpSettingsCollection": [ + { + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/backendHttpSettingsCollection/appGatewayBackendHttpSettings", + "name": "appGatewayBackendHttpSettings", + "properties": { + "connectionDraining": { + "drainTimeoutInSec": 1, + "enabled": false + }, + "cookieBasedAffinity": "Disabled", + "pickHostNameFromBackendAddress": false, + "port": 80, + "protocol": "Http", + "provisioningState": "Succeeded", + "requestRoutingRules": [ + { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/requestRoutingRules/rule1", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + ], + "requestTimeout": 30 + }, + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/applicationGateways/backendHttpSettingsCollection" + } + ], + "backendSettingsCollection": [], + "frontendIPConfigurations": [ + { + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/frontendIPConfigurations/appGatewayFrontendIP", + "name": "appGatewayFrontendIP", + "properties": { + "httpListeners": [ + { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/httpListeners/appGatewayHttpListener", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + ], + "privateIPAllocationMethod": "Dynamic", + "provisioningState": "Succeeded", + "publicIPAddress": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/publicIPAddresses/myAPPGWPublicIPxxxxxx", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + }, + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/applicationGateways/frontendIPConfigurations" + } + ], + "frontendPorts": [ + { + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/frontendPorts/appGatewayFrontendPort", + "name": "appGatewayFrontendPort", + "properties": { + "httpListeners": [ + { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/httpListeners/appGatewayHttpListener", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + ], + "port": 80, + "provisioningState": "Succeeded" + }, + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/applicationGateways/frontendPorts" + } + ], + "gatewayIPConfigurations": [ + { + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/gatewayIPConfigurations/appGatewayFrontendIP", + "name": "appGatewayFrontendIP", + "properties": { + "provisioningState": "Succeeded", + "subnet": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/virtualNetworks/myVNetxxxxxx/subnets/myAPPGWSNxxxxxx", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + }, + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/applicationGateways/gatewayIPConfigurations" + } + ], + "httpListeners": [ + { + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/httpListeners/appGatewayHttpListener", + "name": "appGatewayHttpListener", + "properties": { + "frontendIPConfiguration": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/frontendIPConfigurations/appGatewayFrontendIP", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + }, + "frontendPort": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/frontendPorts/appGatewayFrontendPort", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + }, + "hostNames": [], + "protocol": "Http", + "provisioningState": "Succeeded", + "requestRoutingRules": [ + { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/requestRoutingRules/rule1", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + ], + "requireServerNameIndication": false + }, + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/applicationGateways/httpListeners" + } + ], + "listeners": [], + "loadDistributionPolicies": [], + "operationalState": "Running", + "privateEndpointConnections": [], + "privateLinkConfigurations": [], + "probes": [], + "provisioningState": "Succeeded", + "redirectConfigurations": [], + "requestRoutingRules": [ + { + "etag": "W/\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"", + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/requestRoutingRules/rule1", + "name": "rule1", + "properties": { + "backendAddressPool": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/backendAddressPools/appGatewayBackendPool", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + }, + "backendHttpSettings": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/backendHttpSettingsCollection/appGatewayBackendHttpSettings", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + }, + "httpListener": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxxxx/httpListeners/appGatewayHttpListener", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + }, + "priority": 1001, + "provisioningState": "Succeeded", + "ruleType": "Basic" + }, + "resourceGroup": "myVMSSResourceGroupxxxxxx", + "type": "Microsoft.Network/applicationGateways/requestRoutingRules" + } + ], + "resourceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "rewriteRuleSets": [], + "routingRules": [], + "sku": { + "capacity": 2, + "family": "Generation_1", + "name": "Standard_v2", + "tier": "Standard_v2" + }, + "sslCertificates": [], + "sslProfiles": [], + "trustedClientCertificates": [], + "trustedRootCertificates": [], + "urlPathMaps": [] + } +} +``` + +## Create a Virtual Machine Scale Set + +> [!IMPORTANT] +>Starting November 2023, VM scale sets created using PowerShell and Azure CLI will default to Flexible Orchestration Mode if no orchestration mode is specified. For more information about this change and what actions you should take, go to [Breaking Change for VMSS PowerShell/CLI Customers - Microsoft Community Hub]( +https://techcommunity.microsoft.com/t5/azure-compute-blog/breaking-change-for-vmss-powershell-cli-customers/ba-p/3818295) + +Now create a Virtual Machine Scale Set with [az vmss create](/cli/azure/vmss). The following example creates a zone redundant scale set with an instance count of *2* with public IP in subnet $MY_VM_SN_NAME within your resource group $MY_RESOURCE_GROUP_NAME, integrates the Application Gateway, and generates SSH keys. Make sure to save the SSH keys if you need to log into your VMs via ssh. + +```bash +az vmss create --name $MY_VMSS_NAME --resource-group $MY_RESOURCE_GROUP_NAME --image $MY_VM_IMAGE --admin-username $MY_USERNAME --generate-ssh-keys --public-ip-per-vm --orchestration-mode Uniform --instance-count 2 --zones 1 2 3 --vnet-name $MY_VNET_NAME --subnet $MY_VM_SN_NAME --vm-sku Standard_DS2_v2 --upgrade-policy-mode Automatic --app-gateway $MY_APPGW_NAME --backend-pool-name appGatewayBackendPool -o JSON + ``` + +Results: + +```json +{ + "vmss": { + "doNotRunExtensionsOnOverprovisionedVMs": false, + "orchestrationMode": "Uniform", + "overprovision": true, + "platformFaultDomainCount": 1, + "provisioningState": "Succeeded", + "singlePlacementGroup": false, + "timeCreated": "20xx-xx-xxTxx:xx:xx.xxxxxx+00:00", + "uniqueId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", + "upgradePolicy": { + "mode": "Automatic", + "rollingUpgradePolicy": { + "maxBatchInstancePercent": 20, + "maxSurge": false, + "maxUnhealthyInstancePercent": 20, + "maxUnhealthyUpgradedInstancePercent": 20, + "pauseTimeBetweenBatches": "PT0S", + "rollbackFailedInstancesOnPolicyBreach": false + } + }, + "virtualMachineProfile": { + "networkProfile": { + "networkInterfaceConfigurations": [ + { + "name": "myvmsa53cNic", + "properties": { + "disableTcpStateTracking": false, + "dnsSettings": { + "dnsServers": [] + }, + "enableAcceleratedNetworking": false, + "enableIPForwarding": false, + "ipConfigurations": [ + { + "name": "myvmsa53cIPConfig", + "properties": { + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGW7xxxxx/backendAddressPools/appGatewayBackendPool", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + ], + "privateIPAddressVersion": "IPv4", + "publicIPAddressConfiguration": { + "name": "instancepublicip", + "properties": { + "idleTimeoutInMinutes": 10, + "ipTags": [], + "publicIPAddressVersion": "IPv4" + } + }, + "subnet": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxx/providers/Microsoft.Network/virtualNetworks/myVNetxxxxx/subnets/myVMSN7xxxxx", + "resourceGroup": "myVMSSResourceGroupxxxxxxx" + } + } + } + ], + "primary": true + } + } + ] + }, + "osProfile": { + "adminUsername": "azureuser", + "allowExtensionOperations": true, + "computerNamePrefix": "myvmsa53c", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "enableVMAgentPlatformUpdates": false, + "provisionVMAgent": true, + "ssh": { + "publicKeys": [ + { + "keyData": "ssh-rsa xxxxxxxx", + "path": "/home/azureuser/.ssh/authorized_keys" + } + ] + } + }, + "requireGuestProvisionSignal": true, + "secrets": [] + }, + "storageProfile": { + "diskControllerType": "SCSI", + "imageReference": { + "offer": "0001-com-ubuntu-server-jammy", + "publisher": "Canonical", + "sku": "22_04-lts-gen2", + "version": "latest" + }, + "osDisk": { + "caching": "ReadWrite", + "createOption": "FromImage", + "diskSizeGB": 30, + "managedDisk": { + "storageAccountType": "Premium_LRS" + }, + "osType": "Linux" + } + }, + "timeCreated": "20xx-xx-xxTxx:xx:xx.xxxxxx+00:00" + }, + "zoneBalance": false + } +} +``` + +### Install ngnix with Virtual Machine Scale Sets extensions + +The following command uses the Virtual Machine Scale Sets extension to run a [custom script](https://github.com/Azure-Samples/compute-automation-configurations/blob/master/automate_nginx.sh) that installs ngnix and publishes a page that shows the hostname of the Virtual Machine that your HTTP requests hits. + +```bash +az vmss extension set --publisher Microsoft.Azure.Extensions --version 2.0 --name CustomScript --resource-group $MY_RESOURCE_GROUP_NAME --vmss-name $MY_VMSS_NAME --settings '{ "fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx.sh"], "commandToExecute": "./automate_nginx.sh" }' -o JSON +``` + +Results: + +```json +{ + "additionalCapabilities": null, + "automaticRepairsPolicy": null, + "constrainedMaximumCapacity": null, + "doNotRunExtensionsOnOverprovisionedVMs": false, + "extendedLocation": null, + "hostGroup": null, + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myVMSSxxxxx", + "identity": null, + "location": "eastus", + "name": "myVMSSxxxx", + "orchestrationMode": "Uniform", + "overprovision": true, + "plan": null, + "platformFaultDomainCount": 1, + "priorityMixPolicy": null, + "provisioningState": "Succeeded", + "proximityPlacementGroup": null, + "resourceGroup": "myVMSSResourceGroupxxxxx", + "scaleInPolicy": null, + "singlePlacementGroup": false, + "sku": { + "capacity": 2, + "name": "Standard_DS2_v2", + "tier": "Standard" + }, + "spotRestorePolicy": null, + "tags": {}, + "timeCreated": "20xx-xx-xxTxx:xx:xx.xxxxxx+00:00", + "type": "Microsoft.Compute/virtualMachineScaleSets", + "uniqueId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", + "upgradePolicy": { + "automaticOsUpgradePolicy": null, + "mode": "Automatic", + "rollingUpgradePolicy": { + "enableCrossZoneUpgrade": null, + "maxBatchInstancePercent": 20, + "maxSurge": false, + "maxUnhealthyInstancePercent": 20, + "maxUnhealthyUpgradedInstancePercent": 20, + "pauseTimeBetweenBatches": "PT0S", + "prioritizeUnhealthyInstances": null, + "rollbackFailedInstancesOnPolicyBreach": false + } + }, + "virtualMachineProfile": { + "applicationProfile": null, + "billingProfile": null, + "capacityReservation": null, + "diagnosticsProfile": null, + "evictionPolicy": null, + "extensionProfile": { + "extensions": [ + { + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": null, + "forceUpdateTag": null, + "id": null, + "name": "CustomScript", + "protectedSettings": null, + "protectedSettingsFromKeyVault": null, + "provisionAfterExtensions": null, + "provisioningState": null, + "publisher": "Microsoft.Azure.Extensions", + "settings": { + "commandToExecute": "./automate_nginx.sh", + "fileUris": [ + "https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx.sh" + ] + }, + "suppressFailures": null, + "type": null, + "typeHandlerVersion": "2.0", + "typePropertiesType": "CustomScript" + } + ], + "extensionsTimeBudget": null + }, + "hardwareProfile": null, + "licenseType": null, + "networkProfile": { + "healthProbe": null, + "networkApiVersion": null, + "networkInterfaceConfigurations": [ + { + "deleteOption": null, + "disableTcpStateTracking": false, + "dnsSettings": { + "dnsServers": [] + }, + "enableAcceleratedNetworking": false, + "enableFpga": null, + "enableIpForwarding": false, + "ipConfigurations": [ + { + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxx/providers/Microsoft.Network/applicationGateways/myAPPGWxxxx/backendAddressPools/appGatewayBackendPool", + "resourceGroup": "myVMSSResourceGroupxxxxxx" + } + ], + "applicationSecurityGroups": null, + "loadBalancerBackendAddressPools": null, + "loadBalancerInboundNatPools": null, + "name": "myvmsdxxxIPConfig", + "primary": null, + "privateIpAddressVersion": "IPv4", + "publicIpAddressConfiguration": null, + "subnet": { + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxx/providers/Microsoft.Network/virtualNetworks/myVNetxxxxx/subnets/myVMSNxxxxx", + "resourceGroup": "myVMSSResourceGroupaxxxxx" + } + } + ], + "name": "myvmsxxxxxx", + "networkSecurityGroup": null, + "primary": true + } + ] + }, + "osProfile": { + "adminPassword": null, + "adminUsername": "azureuser", + "allowExtensionOperations": true, + "computerNamePrefix": "myvmsdxxx", + "customData": null, + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "enableVmAgentPlatformUpdates": false, + "patchSettings": null, + "provisionVmAgent": true, + "ssh": { + "publicKeys": [ + { + "keyData": "ssh-rsa xxxxxxxx", + "path": "/home/azureuser/.ssh/authorized_keys" + } + ] + } + }, + "requireGuestProvisionSignal": true, + "secrets": [], + "windowsConfiguration": null + }, + "priority": null, + "scheduledEventsProfile": null, + "securityPostureReference": null, + "securityProfile": null, + "serviceArtifactReference": null, + "storageProfile": { + "dataDisks": null, + "diskControllerType": "SCSI", + "imageReference": { + "communityGalleryImageId": null, + "exactVersion": null, + "id": null, + "offer": "0001-com-ubuntu-server-jammy", + "publisher": "Canonical", + "sharedGalleryImageId": null, + "sku": "22_04-lts-gen2", + "version": "latest" + }, + "osDisk": { + "caching": "ReadWrite", + "createOption": "FromImage", + "deleteOption": null, + "diffDiskSettings": null, + "diskSizeGb": 30, + "image": null, + "managedDisk": { + "diskEncryptionSet": null, + "securityProfile": null, + "storageAccountType": "Premium_LRS" + }, + "name": null, + "osType": "Linux", + "vhdContainers": null, + "writeAcceleratorEnabled": null + } + }, + "userData": null + }, + "zoneBalance": false, + "zones": [ + "1", + "2", + "3" + ] +} +``` + +## Define an autoscale profile + +To enable autoscale on a scale set, first define an autoscale profile. This profile defines the default, minimum, and maximum scale set capacity. These limits let you control cost by not continually creating VM instances and balance acceptable performance with a minimum number of instances that remain in a scale-in event. +The following example sets the default, minimum capacity of two VM instances, and a maximum capacity of 10: + +```bash +az monitor autoscale create --resource-group $MY_RESOURCE_GROUP_NAME --resource $MY_VMSS_NAME --resource-type Microsoft.Compute/virtualMachineScaleSets --name autoscale --min-count 2 --max-count 10 --count 2 +``` + +Results: + +```json +{ + "enabled": true, + "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxx/providers/microsoft.insights/autoscalesettings/autoscale", + "location": "eastus", + "name": "autoscale", + "namePropertiesName": "autoscale", + "notifications": [ + { + "email": { + "customEmails": [], + "sendToSubscriptionAdministrator": false, + "sendToSubscriptionCoAdministrators": false + }, + "webhooks": [] + } + ], + "predictiveAutoscalePolicy": { + "scaleLookAheadTime": null, + "scaleMode": "Disabled" + }, + "profiles": [ + { + "capacity": { + "default": "2", + "maximum": "10", + "minimum": "2" + }, + "fixedDate": null, + "name": "default", + "recurrence": null, + "rules": [] + } + ], + "resourceGroup": "myVMSSResourceGroupxxxxx", + "systemData": null, + "tags": {}, + "targetResourceLocation": null, + "targetResourceUri": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myVMSSxxxxxx", + "type": "Microsoft.Insights/autoscaleSettings" +} +``` + +## Create a rule to autoscale out + +The following command creates a rule that increases the number of VM instances in a scale set when the average CPU load is greater than 70% over a 5-minute period. When the rule triggers, the number of VM instances increases by three. + +```bash +az monitor autoscale rule create --resource-group $MY_RESOURCE_GROUP_NAME --autoscale-name autoscale --condition "Percentage CPU > 70 avg 5m" --scale out 3 +``` + +Results: + +```json +{ + "metricTrigger": { + "dimensions": [], + "dividePerInstance": null, + "metricName": "Percentage CPU", + "metricNamespace": null, + "metricResourceLocation": null, + "metricResourceUri": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myVMSSxxxxxx", + "operator": "GreaterThan", + "statistic": "Average", + "threshold": "70", + "timeAggregation": "Average", + "timeGrain": "PT1M", + "timeWindow": "PT5M" + }, + "scaleAction": { + "cooldown": "PT5M", + "direction": "Increase", + "type": "ChangeCount", + "value": "3" + } +} +``` + +## Create a rule to autoscale in + +Create another rule with `az monitor autoscale rule create` that decreases the number of VM instances in a scale set when the average CPU load then drops below 30% over a 5-minute period. The following example defines the rule to scale in the number of VM instances by one. + +```bash +az monitor autoscale rule create --resource-group $MY_RESOURCE_GROUP_NAME --autoscale-name autoscale --condition "Percentage CPU < 30 avg 5m" --scale in 1 +``` + +Results: + +```json +{ + "metricTrigger": { + "dimensions": [], + "dividePerInstance": null, + "metricName": "Percentage CPU", + "metricNamespace": null, + "metricResourceLocation": null, + "metricResourceUri": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMSSResourceGroupxxxxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myVMSSxxxxxx", + "operator": "LessThan", + "statistic": "Average", + "threshold": "30", + "timeAggregation": "Average", + "timeGrain": "PT1M", + "timeWindow": "PT5M" + }, + "scaleAction": { + "cooldown": "PT5M", + "direction": "Decrease", + "type": "ChangeCount", + "value": "1" + } +} +``` + +### Test the page + +The following command shows you the public IP of your Application Gateway. Paste the IP address into a browser page for testing. + +```bash +az network public-ip show --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_APPGW_PUBLIC_IP_NAME --query [ipAddress] --output tsv +``` + +## Clean up resources (optional) + +To avoid Azure charges, you should clean up unneeded resources. When you no longer need your scale set and other resources, delete the resource group and all its resources with [az group delete](/cli/azure/group). The `--no-wait` parameter returns control to the prompt without waiting for the operation to complete. The `--yes` parameter confirms that you wish to delete the resources without another prompt to do so. This tutorial cleans up resources for you. + +## Next steps +- [Learn how to create a scale set in the Azure portal.](flexible-virtual-machine-scale-sets-portal.md) +- [Learn about Virtual Machine Scale Sets.](overview.md) +- [Automatically scale a Virtual Machine Scale Set with the Azure CLI](tutorial-autoscale-cli.md) From 0fbc559463d969cec0f652f4df309f07c6a1da2a Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:02 -0700 Subject: [PATCH 07/25] Update metadata for all files --- scenarios/metadata.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/scenarios/metadata.json b/scenarios/metadata.json index 11f21445e..2428a5354 100644 --- a/scenarios/metadata.json +++ b/scenarios/metadata.json @@ -53,7 +53,7 @@ } }, { - "status": "inactive", + "status": "active", "key": "azure-docs/articles/mysql/flexible-server/tutorial-deploy-wordpress-on-aks.md", "title": "Tutorial: Deploy WordPress on AKS cluster by using Azure CLI", "description": "Learn how to quickly build and deploy WordPress on AKS with Azure Database for MySQL - Flexible Server.", @@ -465,5 +465,17 @@ "configurations": { "region": "westeurope" } + }, + { + "status": "active", + "key": "azure-compute-docs/articles/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-cli.md", + "title": "Create virtual machines in a Flexible scale set using Azure CLI", + "description": "Learn how to create a Virtual Machine Scale Set in Flexible orchestration mode using Azure CLI.", + "stackDetails": "", + "sourceUrl": "https://raw.githubusercontent.com/MicrosoftDocs/executable-docs/main/scenarios/azure-compute-docs/articles/virtual-machine-scale-sets/flexible-virtual-machine-scale-sets-cli.md", + "documentationUrl": "", + "configurations": { + "region": "EastUS" + } } ] \ No newline at end of file From 071d47f925b9b07699d2b5a6f69941829e3c7d36 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:06 -0700 Subject: [PATCH 08/25] Updated localized metadata for cs-CZ From 0fff3014a9d0ef0cb55db2f3e5fc5ec5fa3171c2 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:07 -0700 Subject: [PATCH 09/25] Updated localized metadata for de-DE From db05fe6c278f4e0ed65d37dc95dee8728aeea750 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:09 -0700 Subject: [PATCH 10/25] Updated localized metadata for es-ES From 7c8da3811df3f882560fe3ba767686a1f8ea8bd7 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:11 -0700 Subject: [PATCH 11/25] Updated localized metadata for fr-FR From 155475ce281bcaa39ce81a9b200bf1c46a845b52 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:12 -0700 Subject: [PATCH 12/25] Updated localized metadata for hu-HU From 0e764a92641e4311b5a397d870323f0f626ad64f Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:14 -0700 Subject: [PATCH 13/25] Updated localized metadata for id-ID From 36bc3ffadfb2a8d891acda0d0dc725487378020a Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:16 -0700 Subject: [PATCH 14/25] Updated localized metadata for it-IT From 9d1478c4dee147a2652502ef73717e7a5b25faf4 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:17 -0700 Subject: [PATCH 15/25] Updated localized metadata for ja-JP From 1d09be5febffd5d861c2d726639a1b28279d88d2 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:19 -0700 Subject: [PATCH 16/25] Updated localized metadata for ko-KR From c8d6d503282a08c7648deaeeed5d46b0a3567b5f Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:21 -0700 Subject: [PATCH 17/25] Updated localized metadata for nl-NL From b0a4117059fe55ee0f3ad9194616b31fd02d1330 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:22 -0700 Subject: [PATCH 18/25] Updated localized metadata for pl-PL From c9951ed144d92d180fe3a696a3cf1bbdd00f2b4b Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:24 -0700 Subject: [PATCH 19/25] Updated localized metadata for pt-BR From 94432401195251602e763e0bacf44a6f209782a3 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:26 -0700 Subject: [PATCH 20/25] Updated localized metadata for pt-PT From 16eea32a77b1d28bf4b472408788133b5e1b6de4 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:27 -0700 Subject: [PATCH 21/25] Updated localized metadata for ru-RU From 7872eb4dc980ec0464eac1f75cef4532120eafed Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:29 -0700 Subject: [PATCH 22/25] Updated localized metadata for sv-SE From 94c77fdb49f5fc5d30a1273d72fdac5f5ea71fb7 Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:30 -0700 Subject: [PATCH 23/25] Updated localized metadata for tr-TR From 96b8f806ff6b8614f436f83631f661846236c33e Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:32 -0700 Subject: [PATCH 24/25] Updated localized metadata for zh-CN From b28aee47cd869ac660b10620477c3b1a1184f51a Mon Sep 17 00:00:00 2001 From: naman-msft <146123940+naman-msft@users.noreply.github.com> Date: Fri, 25 Oct 2024 08:06:34 -0700 Subject: [PATCH 25/25] Updated localized metadata for zh-TW