Creating a React JS Application Image with Packer and Ansible on Alibaba Cloud

Packer is an open source tool for creating identical machine images for multiple platforms from a single source configuration. Packer is lightweight, runs on every major operating system, and is highly performant, creating machine images for multiple platforms in parallel.

Ansible is an open source software that automates software provisioning, configuration management, and application deployment. Ansible connects via SSH, remote PowerShell or via other remote APIs.

In this guide, we will talk about using Packer to build a machine image on Alibaba Cloud Elastic Compute Service (ECS), and Ansible for writing what we want our machine image to have. We will be building an image that has a react JS application and nodejs setup. Machine image in DevOps is a single static unit that contains a pre-configured operating system and installed software which is used to quickly create new running machines. Machine image formats change for each platform.


You don’t need to be an expert to follow this guide, All you need to have is an account on Alibaba Cloud and an . Click on this link to see how to create an access key on Alibaba cloud.

Step 1: Install Packer

To install packer on our system, we can follow the official installation page for packer or use a package manager, chocolatey for windows and homebrew for macOS. Using a package manager saves us from the hassle of adding environment variables to path.

To install packer on windows using chocolatey

  1. Install chocolatey package manager. To install chocolatey, Open your cmd as an administrator and paste the command below to install chocolatey package manager
  1. verify chocolatey is installed by running this command . you should get the version of chocolatey installed
  2. Install packer by running the command below
  1. To verify packer installation, run
  1. You should get the version of Packer installed.

A Gif image showing the installation process

To install packer on MacOS using homebrew

  1. Install homebrew if you don’t have it installed already. To install homebrew on your macOS, open your terminal and paste the command below
  1. Install packer by running the command below
  1. To verify packer installation, run
  1. You should get the version of Packer installed.

Gif image showing installation on MacOS

Step 2: Build Our React-Application Machine Image

To build a machine image, we need to create a template file. The template file is used to define what image we want to build. The template file is in a format and has a different set of keys configuring various components of Packer.

  1. Create a template file named example.json and paste the code below
  1. The variables section is where we defined our variables which can be used anywhere within our template file. we are getting the value of the access_key and secret_key from the environment variable by specifying the env function.
  2. The builders section contains an array of JSON objects configuring a specific builder. A builder is a component of packer that is responsible for creating a machine and turning that machine into an image.
  3. The provisioners section uses builtin and third-party software to install and configure the the machine image after booting. In this guide, we would be using ansible and shell as our provisioner.
  4. Export the and by running the command below in your terminal
  1. Create a new Ansible file named playbook.yml and paste the code below. example.json and playbook.yml are to be created in the same directory or folder.
  1. To validate our template file, run . This ensure there are no errors such as syntax error with our template file.
  2. Run to build our ReactJS image.

Step 3: Launch an Instance with Our React Image

To create an instance using the image we created earlier, follow the steps below

  1. Logon to Alibaba Cloud console
  2. Click on Elastic Compute Service on the side navigation bar of the dasboard.
  3. Click on the button with the Create Instance description or this link to create an instance
  4. In Basic Configurations, do the following:
  5. For the click on
  6. For the , click on the dropdown and select
  7. For the, click on
  8. For the , click on the button. Under , click on the dropdown menu and select the image we created which is .
  9. Click on the button
  10. For the second step, which is Networking follow the steps below
  11. For the Network` section, click on the VPC dropdown menu and select the default VPC.
  12. For the Security Group section, click on the Go to port settings to set the port for our application.
  13. Click on the Add Security Group Rule and set Port Range to 80 and Authorization Objects to Repeat this same process but set the Port Range to 3000.
    Port 80 is for the HTTP request while Port 300` is the port on which our react application is running.
  14. After setting the security group, click on the Next: System Configurations button
  15. For the third step, which is System Configurations follow the steps below
  16. Click on the Advanced (based on instance RAM roles or cloud-init) dropdown and paste the code below into the user data field box
  1. The script above runs when creating our instance so we do not need to SSH into our instance to start the application
  2. Click on the Preview button
  3. Accept the Terms of Service and click on the Create Instance button.
  4. Once your instance is up and running, copy the internet IP address and paste it into your browser address bar. You should see a React application web page.

Here is a gif image showing the process of launching an instance


Follow me to keep abreast with the latest technology news, industry insights, and developer trends.