DEV Community

Cover image for From Zero to Automation: Setting Up Puppet Master & Agent on AWS EC2
Krisha Arya
Krisha Arya

Posted on

From Zero to Automation: Setting Up Puppet Master & Agent on AWS EC2

πŸ”Ή What is Puppet?

Puppet is an open-source configuration management and automation tool used to manage infrastructure at scale.
It helps you:

  • Automate software installation
  • Enforce system configuration
  • Manage thousands of servers consistently
  • Reduce manual repetitive tasks

Using Puppet, you define your server state in manifests (written in Puppet DSL), and Puppet ensures your system always stays in that state.

In this guide, we’ll set up:
βœ”οΈ Puppet Master
βœ”οΈ Puppet Agent
βœ”οΈ A demo module that installs NGINX and serves a custom webpage

All using AWS EC2 Ubuntu 22.04 instances.

Step 1: Launch Two AWS EC2 Instances

You need:

1 Puppet Master
1 Puppet Agent
Use Ubuntu 22.04 and open required ports (SSH, HTTP).

Step 2: Configure the Puppet Master (puppetmaster)

(Open your window powershell)
βœ” SSH into master

ssh -i "C:\Users\User\Downloads\nagios.pem" ubuntu@15.206.178.143
Enter fullscreen mode Exit fullscreen mode

Note: "C:\Users\User\Downloads\nagios.pem" is your nagios.pem file path and "15.206.178.143" is AWS EC2 instance of puppetmaster.

βœ” Set hostname

sudo hostnamectl set-hostname puppetmaster
Enter fullscreen mode Exit fullscreen mode

βœ” Update /etc/hosts

sudo nano /etc/hosts
Enter fullscreen mode Exit fullscreen mode

Add:

<ip-address-of-puppetmaster-ec2-instance> puppetmaster puppet
<ip-address-of-puppetagent-ec2-instance> puppetagent
Enter fullscreen mode Exit fullscreen mode

Install Puppet Server

wget https://apt.puppet.com/puppet8-release-jammy.deb
sudo dpkg -i puppet8-release-jammy.deb
sudo apt update
sudo apt install puppetserver -y
Enter fullscreen mode Exit fullscreen mode

βœ” Enable + start service:

sudo systemctl enable puppetserver
sudo systemctl start puppetserver
sudo systemctl status puppetserver
Enter fullscreen mode Exit fullscreen mode

Sign Agent Certificate (Will be used later)

sudo /opt/puppetlabs/bin/puppetserver ca list
sudo /opt/puppetlabs/bin/puppetserver ca sign -all
Enter fullscreen mode Exit fullscreen mode

Step 3: Configure Puppet Agent (puppetagent)

(Open another window powershell)

βœ” SSH into agent

ssh -i "C:\Users\User\Downloads\nagios.pem" ubuntu@3.108.65.97
Enter fullscreen mode Exit fullscreen mode

Note: "C:\Users\User\Downloads\nagios.pem" is your nagios.pem file path and "15.206.178.143" is AWS EC2 instance of puppetagent.

βœ” Set hostname

sudo hostnamectl set-hostname puppetagent
Enter fullscreen mode Exit fullscreen mode

βœ” Update /etc/hosts

sudo nano /etc/hosts
Enter fullscreen mode Exit fullscreen mode

Add:

<ip-address-of-puppetmaster-ec2-instance> puppetmaster puppet
<ip-address-of-puppetagent-ec2-instance> puppetagent
Enter fullscreen mode Exit fullscreen mode

Install Puppet Agent

wget https://apt.puppet.com/puppet8-release-jammy.deb
sudo dpkg -i puppet8-release-jammy.deb
sudo apt update
sudo apt install puppet-agent -y
Enter fullscreen mode Exit fullscreen mode

Update Puppet Configuration (puppet.conf)

sudo nano /etc/puppetlabs/puppet/puppet.conf
Enter fullscreen mode Exit fullscreen mode

Add:

[main]
certname = puppetagent
server = puppet
environment = production
Enter fullscreen mode Exit fullscreen mode

β–Ά Start Puppet Agent

sudo systemctl enable puppet
sudo systemctl start puppet
sudo /opt/puppetlabs/bin/puppet agent -t #this command send request for certificate signup to master
Enter fullscreen mode Exit fullscreen mode

Step 4: Create a Puppet Module (sample_nginx)

sudo nano /etc/puppetlabs/code/environments/production/modules/sample_nginx
Enter fullscreen mode Exit fullscreen mode

Folder Structure:

sample_nginx/
β”œβ”€β”€ manifests
β”‚ └── nginx.pp
└── templates
└── index.erb

nginx.pp (Manifest File)

class sample_nginx::nginx {
  package { 'nginx':
    ensure => installed,
  }

  file { '/var/www/html/index.html':
    ensure  => file,
    content => template('sample_nginx/index.erb'),
  }

  service { 'nginx':
    ensure => running,
    enable => true,
    require => Package['nginx'],
  }
}
Enter fullscreen mode Exit fullscreen mode

Step 5: Update site.pp to Apply This Class

sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
Enter fullscreen mode Exit fullscreen mode

Add:

node default {
  include sample_nginx::nginx
}

Enter fullscreen mode Exit fullscreen mode

Step 6: Write Template File (index.erb)

<h1>Hello from Puppet NGINX!</h1>
<p>This is a custom page managed by Puppet.</p>
Enter fullscreen mode Exit fullscreen mode

Step 7: Restart Master and Run Agent

On Master

sudo systemctl restart puppetserver
Enter fullscreen mode Exit fullscreen mode

On Agent

sudo /opt/puppetlabs/bin/puppet agent -t
Enter fullscreen mode Exit fullscreen mode

On Master

sudo /opt/puppetlabs/bin/puppetserver ca list
sudo /opt/puppetlabs/bin/puppetserver ca sign --all
Enter fullscreen mode Exit fullscreen mode

If everything is correct:

βœ” NGINX will be installed
βœ” Custom page will appear at /var/www/html/index.html
βœ” Puppet will manage service β†’ auto-start + running

πŸŽ‰ Final Output

You can now visit:

πŸ‘‰ http://AGENT_PUBLIC_IP
You will see:

Hello from Puppet NGINX!
This is a custom page managed by Puppet.

Top comments (0)