All skills
hashicorp avatar

/aws-ami-builder

@4451cec official
by hashicorphashicorp/agent-skills880 stars
130

Build Amazon Machine Images (AMIs) with Packer using the amazon-ebs builder. Use when creating custom AMIs for EC2 instances.

Use this Skill: https://skilld.dev/gh/hashicorp/agent-skills/aws-ami-builder

This session only. Nothing lands on disk.

SKILL.md

≈36 tokens always: the name and description. ≈873 when used: this file.

AWS AMI Builder

Build Amazon Machine Images (AMIs) using Packer's amazon-ebs builder.

Reference: Amazon EBS Builder

Note: Building AMIs incurs AWS costs (EC2 instances, EBS storage, data transfer). Builds typically take 10-30 minutes depending on provisioning complexity.

Basic AMI Template

packer {
  required_plugins {
    amazon = {
      source  = "github.com/hashicorp/amazon"
      version = "~> 1.3"
    }
  }
}

variable "region" {
  type    = string
  default = "us-west-2"
}

locals {
  timestamp = regex_replace(timestamp(), "[- TZ:]", "")
}

source "amazon-ebs" "ubuntu" {
  region        = var.region
  instance_type = "t3.micro"

  source_ami_filter {
    filters = {
      name                = "ubuntu/images/*ubuntu-jammy-22.04-amd64-server-*"
      root-device-type    = "ebs"
      virtualization-type = "hvm"
    }
    most_recent = true
    owners      = ["099720109477"] # Canonical
  }

  ssh_username = "ubuntu"
  ami_name     = "my-app-${local.timestamp}"

  tags = {
    Name      = "my-app"
    BuildDate = local.timestamp
  }
}

build {
  sources = ["source.amazon-ebs.ubuntu"]

  provisioner "shell" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get upgrade -y",
    ]
  }
}

Common Source AMI Filters

Ubuntu 22.04 LTS

source_ami_filter {
  filters = {
    name                = "ubuntu/images/*ubuntu-jammy-22.04-amd64-server-*"
    root-device-type    = "ebs"
    virtualization-type = "hvm"
  }
  most_recent = true
  owners      = ["099720109477"] # Canonical
}

Amazon Linux 2023

source_ami_filter {
  filters = {
    name                = "al2023-ami-*-x86_64"
    root-device-type    = "ebs"
    virtualization-type = "hvm"
  }
  most_recent = true
  owners      = ["amazon"]
}

Multi-Region AMI

source "amazon-ebs" "ubuntu" {
  region        = "us-west-2"
  instance_type = "t3.micro"

  source_ami_filter {
    filters = {
      name = "ubuntu/images/*ubuntu-jammy-22.04-amd64-server-*"
    }
    most_recent = true
    owners      = ["099720109477"]
  }

  ssh_username = "ubuntu"
  ami_name     = "my-app-${local.timestamp}"

  # Copy to additional regions
  ami_regions = ["us-east-1", "us-east-2", "eu-west-1"]
}

Authentication

Packer uses AWS credential resolution:

  1. Environment variables: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
  2. AWS credentials file: ~/.aws/credentials
  3. IAM instance profile (when running on EC2)
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="us-west-2"

packer build .

Build Commands

# Initialize plugins
packer init .

# Validate template
packer validate .

# Build AMI
packer build .

# Build with variables
packer build -var "region=us-east-1" .

Common Issues

SSH Timeout

  • Ensure security group allows SSH (port 22)
  • Verify subnet has internet access

AMI Already Exists

  • AMI names must be unique
  • Use timestamp in name: my-app-${local.timestamp}

Volume Size Too Small

  • Check source AMI's volume size
  • Set launch_block_device_mappings.volume_size accordingly

References

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    This skill provides templates and instructions for building Amazon Machine Images (AMIs) using HashiCorp Packer. The configurations follow standard practices for infrastructure-as-code and utilize official plugins and documentation sources.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer7mo

    1/1 file flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 4451cec. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 days ago.

Activeupdated 2 months ago
metadata
{
  "lifecycle-status": "active"
}
  • packer
  • aws
  • ami
  • ec2
  • infrastructure-as-code
  • hcl
  • provisioning
  • image-building

README badge

README badge for hashicorp/agent-skills/aws-ami-builder

Builds Amazon Machine Images (AMIs) using Packer's amazon-ebs builder, with templates for Ubuntu and Amazon Linux 2023 source AMIs. Includes multi-region replication, authentication setup, and common troubleshooting for SSH timeouts and naming conflicts. Note that AMI builds incur AWS costs and typically take 10-30 minutes.

Generated from the current SKILL.md.

Does this skill work with Packer?
Yes. This skill provides Packer HCL templates and configuration for the amazon-ebs builder, which is Packer's native integration for building AMIs.
What AWS credentials does this require?
The skill uses standard AWS credential resolution: environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY), AWS credentials file (~/.aws/credentials), or IAM instance profile if running on EC2.
Can I build AMIs in multiple regions?
Yes. The skill includes an example using ami_regions to copy the built AMI to additional AWS regions automatically.
What are the typical costs and build times?
Building AMIs incurs AWS costs for EC2 instances, EBS storage, and data transfer. Builds typically take 10-30 minutes depending on provisioning complexity.
Does this support custom provisioners beyond shell scripts?
The skill examples show shell provisioners, but Packer's amazon-ebs builder supports multiple provisioner types — refer to Packer's documentation for options like file, ansible, and chef.

Generated from the current SKILL.md. These answers refresh after source changes.