Migrate Azure API Management developer portal customizations between instances

A quick overview of how to migrate developer portal customizations between API Management instances

The nice thing about the developer portal of API Management is that you get a good-looking website to access your API documentation out of the box. The default portal usually satisfies after you change some of the default stylings with the built-in visual editor.
When you have multiple instances running (e.g. staging and production) it becomes more of a hassle to change the styling by hand. Luckily for us, the API Management Team has created tooling to help us with that. This also makes it possible to version control your customizations.

Requirements

  • Azure CLI
  • Node.JS

Getting Started

First, we clone the Management developer portal repository. The repository includes everything you need to self-host the portal but also tooling to facilitate the deployment of hosted portals.

git clone https://github.com/Azure/api-management-developer-portal.git
cd api-management-developer-portal

Install the NPM packages

npm install

The relevant scripts are currently found in the scripts.v3 folder

cd .scripts.v3

The folder contains different scripts to download and deploy the developer portal.
Make sure you are logged in with az login command before going further.

Download the customizations

First, we want to download our currently deployed developer portal customizations. We use the following command:

node ./capture ^
--subscriptionId <your-subscription-ID> ^ 
--resourceGroupName <your-resource-group> ^  
--serviceName <your-instance-name>

The script creates a ..distsnapshot folder that contains two things. A json file that with all the portal customizations and a media folder with all the uploaded images.

Deploy the customizations

We need to remove the current customizations on the destination instance. This removes pages, media files and configuration. Deployed API’s will be preserved.

node ./cleanup ^
--subscriptionId <your-subscription-ID> ^ 
--resourceGroupName <your-resource-group> ^  
--serviceName <your-instance-name>

Now we import the customizations from the ..distsnapshot folder into the destination instance.

node ./generate ^
--subscriptionId <your-subscription-ID> ^ 
--resourceGroupName <your-resource-group> ^  
--serviceName <your-instance-name>

Publish the customizations

When you now go to the built-in editor of the destination portal, you will see the currently imported customizations. These customizations are not visible to end-users because the portal is not yet deployed. You can do this by adding the publish argument to the last command.

node ./generate ^
--subscriptionId <your-subscription-ID> ^ 
--resourceGroupName <your-resource-group> ^  
--serviceName <your-instance-name>
--publish true

Even after the script is finished the publishing process may take a few minutes to complete. After that, you will see that the customizations are visible to end-users.