{"id":91350,"date":"2021-06-16T20:28:43","date_gmt":"2021-06-16T20:28:43","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/?p=91350"},"modified":"2021-06-16T20:28:43","modified_gmt":"2021-06-16T20:28:43","slug":"autoscaling-in-microsoft-azure","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/cloud\/azure\/autoscaling-in-microsoft-azure\/","title":{"rendered":"Autoscaling in Microsoft Azure"},"content":{"rendered":"<p>Autoscaling is one of the basic and useful features offered by cloud computing. The cloud\u2019s elastic nature combined with automation makes this feature possible. However, using this feature in the right way is challenging in real time. Almost all cloud providers offer this essential feature. In AWS, this feature is available as an \u201cAutoScalingGroup (ASG)\u201d; in Microsoft Azure, it is enabled with \u201cVirtual Machine Scale Set (VMSS)\u201d, and in Google Cloud, it is available as \u201cManaged Instance Groups (MIG)\u201d. This article focuses on Microsoft Azure\u2019s \u201cVirtual Machine Scale Set (VMSS)\u201d and how to use it in various use-cases.<\/p>\n<h2>What is autoscaling?<\/h2>\n<p>Autoscaling provides the capability to run your application or workload with the required resources (resources, in this case, are virtual machines) without interruption. It assures you that the virtual machines you requested for your application are always available and up. If the virtual machines are interrupted, autoscaling replaces those faulty virtual machines with new ones.<\/p>\n<h2>Types of autoscaling<\/h2>\n<p>In general, there are two types of autoscaling &#8211;<\/p>\n<ul>\n<li>Time-Based Autoscaling.<\/li>\n<li>Metrics-Based Autoscaling.<\/li>\n<\/ul>\n<p>Time-Based autoscaling is nothing but scaling based on the scheduled time. This type needs some extent of manual prediction of your demand. For example, suppose you know that your application experiences high traffic during certain times of the day, week or month and the number of virtual machines needed to meet that demand. In that case, you can configure the rules to spin up and shut down those needed virtual machines only during that specific time period. On the other hand, Metrics-Based autoscaling enables the scaling activity to be based on the key performance metrics of your resource like CPU, Memory, Thread Count, etc.<\/p>\n<h2>Autoscaling in action<\/h2>\n<p>Let us start some experimentation with autoscale settings. The first example demonstrates the Time-Based autoscale settings, followed by Metrics-Based autoscale settings.<\/p>\n<h3>Time-Based Autoscaling<\/h3>\n<p>As I mentioned above, configuring the Time-Based autoscaling is straightforward. It is something like configuring the cron jobs in Unix or task scheduler in Windows. I will use the Cloud Shell to create the Virtual Machine Scale Set (VMSS) and attach the time-based rules.<\/p>\n<p>The first step is creating a resource group before creating other resources. The command below creates the resource group called \u201cautoscalingrg\u201d.<\/p>\n<pre class=\"lang:c# theme:vs2012\">$ az group create --location westus --name autoscalingrg --subscription &lt;your subscription id&gt;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1013\" height=\"235\" class=\"wp-image-91351\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/text-description-automatically-generated.png\" alt=\"Text\n\nDescription automatically generated\" \/><\/p>\n<p>The next step is to create the virtual machine scale set, and the command below creates the virtual machine scale set in the us-west region with one RHEL virtual machine under the resource group created in step 1.<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$az vmss create --resource-group autoscalingrg --name timebasedvmss --image RHEL --upgrade-policy-mode automatic --instance-count 1 --admin-username maheadmin --generate-ssh-keys<\/pre>\n<p>You can view the virtual machine scale set details using the command below or through the Azure portal, as shown in Figure 1<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$ az vmss list --resource-group autoscalingrg<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1551\" height=\"880\" class=\"wp-image-91352\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-37.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 1. Virtual Machine Scale Set<\/strong><\/p>\n<p>Next, you need to create the default autoscale profile and attach it to the virtual machine scale set created in the previous step. This command will create the profile:<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$  az monitor autoscale create --count 1 --max-count 2 --min-count 1 --name timebasedasg --resource timebasedvmss --resource-group autoscalingrg --resource-type Microsoft.Compute\/virtualMachineScaleSets<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1275\" height=\"749\" class=\"wp-image-91353\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/text-description-automatically-generated-1.png\" alt=\"Text\n\nDescription automatically generated\" \/><\/p>\n<p>The next step is to create one autoscaling profile to scale out and another one to scale in the virtual machine scale set based on a time schedule. I am scaling out the VMSS every day at 12:25 PM PST and scaling in every day at 12:40 PM PST. This means that the virtual machine scale set scales from one (1) instance into two (2) instances every day between 12:25 and 12:40 PM PT. The reason to create two (2) profiles is that the recurrence profile only has the start time. Even though you specify the end time, it is not used in the recurrence profile. Feel free to modify the times so that you can see the autoscaling actions more quickly.<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$az monitor autoscale profile create --resource-group autoscalingrg --autoscale-name timebasedasg --count 2 --name daily-scaleout --recurrence week sat sun mon tue wed thu fri --timezone \"Pacific Standard Time\" --start 12:25 --end 12:35<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1668\" height=\"634\" class=\"wp-image-91354\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/text-description-automatically-generated-2.png\" alt=\"Text\n\nDescription automatically generated\" \/><\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$az monitor autoscale profile create --resource-group autoscalingrg --autoscale-name timebasedasg --count 1 --name daily-scalein --recurrence week sat sun mon tue wed thu fri --timezone \"Pacific Standard Time\" --start 12:40 --end 12:45<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1667\" height=\"632\" class=\"wp-image-91355\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/text-description-automatically-generated-3.png\" alt=\"Text\n\nDescription automatically generated\" \/><\/p>\n<p>You can verify these settings through the Azure Portal, as shown in Figure 2. Note that it may take a few minutes for these details to show up, or you may have to refresh the page.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"813\" height=\"910\" class=\"wp-image-91356\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-38.png\" \/><\/p>\n<p class=\"caption\">Figure 2. Attaching the Autoscale Profiles to the Virtual Machine Scale Set<\/p>\n<p>Figure 3 shows the autoscale profile \u201cdaily-scaleout\u201d scaled out the stack from 1 instance to 2 instances.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1677\" height=\"451\" class=\"wp-image-91357\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-39.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 3. Autoscale Profile scaling out the stack from 1 instance to 2 instances<\/strong><\/p>\n<p>Figure 4 shows the autoscale profile \u201cdaily-scalein\u201d scaled in the stack from 2 instances to 1 instance.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1666\" height=\"448\" class=\"wp-image-91358\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-40.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 4. Autoscale Profile Scaling in the stack from 2 instances to 1 instance<\/strong><\/p>\n<p>You can also list the instances using the command-line after scale-out and scale-in, as shown in Figure 5<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">az vmss list-instances --resource-group autoscalingrg --name timebasedvmss | grep name<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"904\" height=\"404\" class=\"wp-image-91359\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-41.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 5. Verifying the number of instances through command line<\/strong><\/p>\n<h4>Use cases of Time-Based autoscaling<\/h4>\n<p>There are several reasons that Time-Based autoscaling can be useful. Here are two use cases of Time-Based autoscaling \u2013<\/p>\n<ul>\n<li>Development environments \u2013 Mostly, the development environments are used only during weekday business hours (9 AM \u2013 5 PM). They are not used during the weekends. The Time-Based autoscaling settings launch the development environments only when they are mainly used and automatically shut down the instances when they are not needed.<\/li>\n<li>Production Environments \u2013 If you could predict your application\u2019s demand based on the history of its usage, you can scale out the stack only during the high-demand window and scale in the stack when least used.<\/li>\n<\/ul>\n<h3>Metrics-Based Autoscaling<\/h3>\n<p>Now, let create a new autoscale setting and attach some rules to scale the virtual machine scale set based on the virtual machine\u2019s average CPU utilization.<\/p>\n<p>I deleted the previously created time based autoscale setting \u2013 \u201ctimebasedasg\u201d and created the new metric based autoscaling setting called \u201cmetricbasedasg\u201d.<\/p>\n<p>To delete the previously created \u201ctimebasedasg\u201d autoscale setting , use this command:<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$ az monitor autoscale delete --resource-group autoscalingrg --name timebasedasg<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1378\" height=\"112\" class=\"wp-image-91360\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-42.png\" \/><\/p>\n<p>To create the new metric based autoscale settings, run the next command:<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$az monitor autoscale create --resource-group autoscalingrg --name metricbasedasg --count 1 --max-count 4 --min-count 1 --resource timebasedvmss --resource-type Microsoft.Compute\/virtualMachineScaleSets<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1668\" height=\"709\" class=\"wp-image-91361\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/a-picture-containing-text-description-automatical.png\" alt=\"A picture containing text\n\nDescription automatically generated\" \/><\/p>\n<p>The next step is to create the scaling rules to scale out and scale in the virtual machine scale sets.<\/p>\n<ul>\n<li>Scale-out rule &#8211; when the average CPU utilization goes above 75% for 5 minutes, scale out the stack to 2 instances.<\/li>\n<li>Scale-in rule \u2013 when the average CPU utilization goes below 40% for 5 minutes, scale in the stack by 1 instance.<\/li>\n<\/ul>\n<p>Use these commands to create the rules:<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$ az monitor autoscale rule create --resource-group autoscalingrg --autoscale-name metricbasedasg --scale out 2 --condition \"Percentage CPU &gt; 75 avg 5m\"<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1416\" height=\"404\" class=\"wp-image-91362\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/text-description-automatically-generated-with-med.png\" alt=\"Text\n\nDescription automatically generated with medium confidence\" \/><\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$ az monitor autoscale rule create --resource-group autoscalingrg --autoscale-name metricbasedasg --scale in 1 --condition \"Percentage CPU &lt; 40 avg 5m\"<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1416\" height=\"368\" class=\"wp-image-91363\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/a-picture-containing-graphical-user-interface-des.png\" alt=\"A picture containing graphical user interface\n\nDescription automatically generated\" \/><\/p>\n<p>To test the autoscaling activity, you need to run some process to trigger the CPU spike on the virtual machine created as part of the virtual machine scale set. Initially, I created 1 virtual machine. I am using the RHEL image to launch the virtual machines. To trigger the CPU spike, I am using the \u201cstress\u201d utility. You can use the following commands to install the stress utility and to trigger the CPU spike. You need to SSH into the virtual machine and then run the below commands on the virtual machine. Please follow the below instructions to SSH into the Virtual Machine.<\/p>\n<p>When you created the virtual machine scale set, you created it with the admin account and the generate SSH keys option. To retrieve those details, you can use the below command \u2013<\/p>\n<pre class=\"lang:c# theme:vs2012\">$ az vmss list --resource-group autoscalingrg<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1425\" height=\"403\" class=\"wp-image-91364\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/text-description-automatically-generated-4.png\" alt=\"Text\n\nDescription automatically generated\" \/><\/p>\n<p>Now to SSH into the above, you need to retrieve the public IP of that instance. You can also retrieve it from the azure portal console, as show in Figure 6. The value of KeyData in the above output is the SSH public key from where you issued the vmss create command.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1250\" height=\"526\" class=\"wp-image-91365\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/graphical-user-interface-text-application-email.png\" alt=\"Graphical user interface, text, application, email\n\nDescription automatically generated\" \/><\/p>\n<p class=\"caption\"><strong>Figure 6. Find the IP and front end port<\/strong><\/p>\n<p>Here, I have the inbound NAT rule enabled, so I should use the port 50000 instead of using the standard port 22. From the cloudshell, issue the below command, replacing the IP address, to ssh into the virtual machine.<\/p>\n<pre class=\"lang:c# theme:vs2012\">$ ssh maheadmin@13.91.17.65 -p 50000<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"523\" height=\"94\" class=\"wp-image-91366\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/text-description-automatically-generated-with-med-1.png\" alt=\"Text\n\nDescription automatically generated with medium confidence\" \/><\/p>\n<p>Now, install the stress utility and run it.<\/p>\n<pre class=\"lang:ps theme:powershell-ise\">$ wget <a href=\"https:\/\/download-ib01.fedoraproject.org\/pub\/epel\/7\/x86_64\/Packages\/s\/stress-1.0.4-16.el7.x86_64.rpm\">https:\/\/download-ib01.fedoraproject.org\/pub\/epel\/7\/x86_64\/Packages\/s\/stress-1.0.4-16.el7.x86_64.rpm<\/a>\r\n$ sudo yum install stress-1.0.4-16.el7.x86_64.rpm\r\n$ stress -c 2<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1644\" height=\"224\" class=\"wp-image-91367\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/a-screenshot-of-a-computer-description-automatica.png\" alt=\"A screenshot of a computer\n\nDescription automatically generated with medium confidence\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1662\" height=\"693\" class=\"wp-image-91368\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/a-picture-containing-text-monitor-screen-indoor.png\" alt=\"A picture containing text, monitor, screen, indoor\n\nDescription automatically generated\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"644\" height=\"70\" class=\"wp-image-91369\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/text-description-automatically-generated-5.png\" alt=\"Text\n\nDescription automatically generated\" \/><\/p>\n<p>Once you execute the stress command, you can check the CPU utilization of the virtual machine either using the \u201ctop\u201d command on the instance or through the Azure Portal, as shown in Figure 7.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1380\" height=\"634\" class=\"wp-image-91370\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-43.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 7. CPU spike on the virtual machine as we execute the stress command on the instance<\/strong><\/p>\n<p>You can see the CPU getting spiked to around 100%, as shown in Figure 8. The autoscaling rule scaled out the stack from 1 instance to 3 instances as shown in Figure 9 and then from 3 instances to 4 instances as shown in Figure 10.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1653\" height=\"530\" class=\"wp-image-91371\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-44.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 8. Autoscaling rule scaling out the stack from 1 instance to 3 instances.<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1670\" height=\"538\" class=\"wp-image-91372\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-45.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 9. Autoscaling rule scaling out the stack from 3 instance to 4 instances<\/strong><\/p>\n<p>After scaling out to 4 instances, the average CPU utilization of the stack came down to below 40%, as shown in Figure 9<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1379\" height=\"632\" class=\"wp-image-91373\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-46.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 10. The Average CPU utilization of the stack fell below 40%<\/strong><\/p>\n<p>The scale-in autoscaling rule was triggered when the average CPU utilization reached below 40%, and it scaled in the stack from 4 instances to 3 instances, as shown in Figure 11.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1673\" height=\"408\" class=\"wp-image-91374\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-47.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 11. Autoscaling rule scaled in the stack from 4 instances to 3 instances.<\/strong><\/p>\n<p>The scale-in rule did not stop there. When I stopped the stress command, the average CPU utilization of the stack reduced further, as shown in Figure 12, and the scale-in rule kicked in step by step until the stack size reached the default instance count of 1, as shown in Figure 13 and Figure 14.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1380\" height=\"641\" class=\"wp-image-91375\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-48.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 12. The Average CPU utilization of the stack reduced further after stopping the stress command<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1673\" height=\"529\" class=\"wp-image-91376\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-49.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 13. Autoscaling rule scaled in the stack from 3 instances to 2 instances.<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1671\" height=\"567\" class=\"wp-image-91377\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2021\/06\/word-image-50.png\" \/><\/p>\n<p class=\"caption\"><strong>Figure 14. Autoscaling rule scaled in the stack from 2 instances to 1 instance.<\/strong><\/p>\n<h4>Factors to consider when using Metrics-Based Autoscaling<\/h4>\n<p>Configuring the Metrics-Based Autoscaling is a little tricky, and you need to consider various factors and vigorous testing before using it in production environments. Below are the factors you need to consider at a high level.<\/p>\n<ul>\n<li>Identifying the Key Performance Indicator (KPI) of your application is important. Some applications are CPU intensive; some are memory intensive; some services would be both.<\/li>\n<li>The application should be stateless.<\/li>\n<li>The virtual machine should be gracefully shut down, and the health checks of the application should be fine-tuned. When the autoscaling rule shuts down or starts up the virtual machines, it will not cause any customer impact.<\/li>\n<li>The Minimum, Default and Maximum settings of autoscaling profile should be carefully considered so that the application will not run out of instances during normal situations nor will too many instances spin up and increase your costs.<\/li>\n<\/ul>\n<h4>Use cases of Metrics-Based Autoscaling<\/h4>\n<p>Below are some use cases of Metrics-Based autoscaling.<\/p>\n<ul>\n<li>Web servers that are CPU intensive \u2013 If you could get the CPU utilization of your web and application servers from the historical data, you can use the Metrics-Based autoscaling rules to scale out the stack during unexpected demands.<\/li>\n<li>Caching servers \u2013 If you are running caching servers like Memcached or Redis on virtual machines, you can configure the Metrics-Based autoscaling rules based on memory utilization.<\/li>\n<li>Application Servers \u2013 If your application is stateless and you could get the historical data of the KPIs, you can use the Metrics-Based autoscaling rules to scale out and scale in the stack.<\/li>\n<\/ul>\n<h2>Autoscaling in Microsoft Azure<\/h2>\n<p>Autoscaling is an essential feature of the cloud and should be used to ensure that your application is always ON and available for customers. It also helps to reduce your monthly bill \ud83d\ude0a.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The ability to scale up and down without maintaining extra hardware is one of the best cloud computing features. In this article, Mahendran Purushothaman explains autoscaling in Microsoft Azure.&hellip;<\/p>\n","protected":false},"author":333672,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[137091,53],"tags":[143572,5842],"coauthors":[124088],"class_list":["post-91350","post","type-post","status-publish","format-standard","hentry","category-azure","category-featured","tag-autoscale-azure-vm","tag-sql-monitor"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/91350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/333672"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=91350"}],"version-history":[{"count":7,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/91350\/revisions"}],"predecessor-version":[{"id":91380,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/91350\/revisions\/91380"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=91350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=91350"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=91350"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=91350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}