DevOps Classroom Series – 07/Jun/2020

Packer

  • Packer is a tool for creating machine images for multiple platforms
  • In the case of AWS we call this machine images as AMI and in the case of Azure we call it as VM Image. Preview Preview
  • Some of the other machine image formats are
    • VMDK/VMX (Vmware)
    • OVF
    • VHD (HyperV)

Use Cases

  • Continuous Delivery: For every release a machine image is created using packer which will be used by terraform to create virtual machines Preview
  • Packer is used in Demo Environmets as it consists of machine images

Becoming Effective with Packer

  • Understand how to create machine image manually
  • Be effective with json format

Basic Packer Terms

  • Builder: Builder lets you select the virtual environment (aws, azure, vmware etc) to create machine images
    • Popular Builders are:
      • Amazon EC2
      • Azure
      • Digital Ocean
      • Alicloud ECS
      • Hyper-V
      • Virtual Box
      • VmWare
      • OpenStack
  • Provisioner: Are built-in and third-party software to install and configure the machine images. Popular provisioners
    • Ansible
    • Chef
    • Salt
    • puppet
    • Shell
    • Windows Shell

Machine image creation (Manual)

  • Lets try to create a machine image for lamp stack.
  • For lamp stack steps refer here
  • Linux Steps
sudo apt-get update
sudo apt install apache2 -y
sudo apt install php libapache2-mod-php php-mysql php-cli -y
sudo systemctl restart apache2
sudo nano /var/www/html/info.php
sudo systemctl enable apache2
sudo systemctl restart apache2

###
<?php
phpinfo();
?>

http://<publicip>/info.php

Preview

How to create a AMI in AWS

  • Create a EC2 instance
  • Install/Configure your application
  • Create image (AMI) from EC2 instance and then use the image (AMI) create for creating further machines
  • Delete the Ec2 instance created in step 1 (Optional) Preview Preview Preview Preview

How to create a VM Image in Azure

  • Create an Azure VM
  • Install/Configure your application
  • Create vm image from azure vm and then use the vm create for creating further machines
    • While creating the VM Image, Azure deallocates (Stops) vm and generalize vm (Removing specific user configuration)
  • Delete the Azure VM created in step1 as this vm becomes unusable Preview Preview Preview Preview

Installing Packer

  • Download Packer from here and add it to the path variable
  • If you have choco installed
choco install packer -y

Machine image creation Using Packer

AWS AMI Creation

  • Lets get started with basic json
{

}
  • Now add builders section
{
    "builders": [
        
    ]
}
  • Now since we are using aws, lets find aws builders Refer Here
{
    "builders": [
        {
            "type": "amazon-ebs",
            "access_key": "",
            "secret_key": "",
            "region": "us-west-2",
            "ami_name": "mylampv1.0",
            "source_ami": "ami-003634241a8fcdec0",
            "instance_type": "t2.micro",
            "ssh_username": "ubuntu"

        }
    ]
}
{
    "builders": [
        {
            "type": "amazon-ebs",
            "access_key": "",
            "secret_key": "",
            "region": "us-west-2",
            "ami_name": "mylampv1.0",
            "source_ami": "ami-003634241a8fcdec0",
            "instance_type": "t2.micro",
            "ssh_username": "ubuntu"

        }
    ],
    "provisioners": [
        {
            "type": "shell",
            "inline": [
                "sudo apt-get update",
                "sudo apt install apache2 -y",
                "sudo apt install php libapache2-mod-php php-mysql php-cli -y",
                "sudo systemctl restart apache2",
                "echo '<?php phpinfo(); ?>'/var/www/html/info.php ",
                "sudo systemctl enable apache2",
                "sudo systemctl restart apache2"

            ]
        }
    ]
}
  • Now execute the following commands
packer --help
packer validate --help
packer validate aws.json
packer inspect aws.json

Preview

  • Now lets create amazon ami by executing packer build aws.json and if you want to execute step by step packer build -debug aws.json Preview
  • Now lets add variables refer here
{
    "variables": {
        "aws_secret_key": "",
        "aws_access_key": "",
        "source_ami": "ami-003634241a8fcdec0"
    },
    "builders": [
        {
            "type": "amazon-ebs",
            "access_key": "{{user `aws_access_key`}}",
            "secret_key": "{{user `aws_secret_key`}}",
            "region": "us-west-2",
            "ami_name": "mylamp {{timestamp}}",
            "source_ami": "{{user `source_ami`}}",
            "instance_type": "t2.micro",
            "ssh_username": "ubuntu"

        }
    ],
    "provisioners": [
        {
            "type": "shell",
            "inline": [
                "sudo apt-get update",
                "sudo apt install apache2 -y",
                "sudo apt install php libapache2-mod-php php-mysql php-cli -y",
                "sudo systemctl restart apache2",
                "echo '<?php phpinfo(); ?>'/var/www/html/info.php ",
                "sudo systemctl enable apache2",
                "sudo systemctl restart apache2"

            ]
        }
    ]
}
  • Now execute packer packer build -var "aws_secret_key=xxxxx" -var "aws_access_key=xxxx" aws.json
  • To the packer script we can add functions Refer Here

Creating VM image in Azure using Packer

Exercise:

  • Write a Packer template to create nop Commerce image on aws or azure and then use that image in terraform Preview

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

About learningthoughtsadmin