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.
  • 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
  • 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

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)

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

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

  • 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
  • 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

Leave a ReplyCancel reply

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

Please turn AdBlock off
Social Network Integration by Acurax Social Media Branding Company

Discover more from Direct DevOps from Quality Thought

Subscribe now to keep reading and get access to the full archive.

Continue reading

Exit mobile version
%%footer%%