aws-ami-builder

द्वारा hashicorp

Packer के amazon-ebs बिल्डर के साथ कस्टम Amazon Machine Images बनाएं। स्रोत AMI से HCL टेम्पलेट्स का उपयोग करके AMI निर्माण को स्वचालित करता है, जिसमें अनुकूलन के लिए प्रोविज़नर (शेल स्क्रिप्ट, फ़ाइल अपलोड, कॉन्फ़िगरेशन प्रबंधन) शामिल हैं। ami_regions के माध्यम से बहु-क्षेत्र AMI वितरण और नाम, स्वामी और वर्चुअलाइज़ेशन प्रकार के आधार पर लचीली स्रोत AMI फ़िल्टरिंग का समर्थन करता है। पर्यावरण चर, AWS क्रेडेंशियल फ़ाइल या

npx skills add https://github.com/hashicorp/agent-skills --skill aws-ami-builder

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

hashicorp की और Skills

provider-actions
hashicorp
Implement Terraform Provider actions using the Plugin Framework. Use when developing imperative operations that execute at lifecycle events (before/after…
official
new-terraform-provider
hashicorp
Use this when scaffolding a new Terraform provider with the Plugin Framework: workspace layout, go module setup, provider server main.go, and a provider.go…
official
terraform-test
hashicorp
Comprehensive guide for writing and running Terraform tests. Use when creating test files (.tftest.hcl), writing test scenarios with run blocks, validating…
official
terraform-test
hashicorp
Terraform परीक्षण लिखने और चलाने के लिए व्यापक मार्गदर्शिका, जिसमें अभिकथन, मॉकिंग और मॉड्यूल सत्यापन शामिल हैं। .tftest.hcl सिंटैक्स का उपयोग करके परीक्षण फ़ाइलें लिखें, जिनमें रन ब्लॉक हों जो प्लान या अप्लाई मोड में निष्पादित हों, अनुक्रमिक और समानांतर निष्पादन का समर्थन करते हुए वैकल्पिक स्थिति पृथक्करण के साथ। संसाधन विशेषताओं, आउटपुट और डेटा स्रोतों पर शर्तों का अभिकथन करें; अमान्य इ
official
provider-actions
hashicorp
प्लगइन फ्रेमवर्क का उपयोग करके संसाधन जीवनचक्र घटनाओं पर अनिवार्य Terraform प्रदाता क्रियाएँ लागू करें। बनाने से पहले/बाद और अपडेट करने से पहले/बाद जीवनचक्र ट्रिगर का समर्थन करता है (Terraform 1.14.0 में नष्ट करने की घटनाएँ उपलब्ध नहीं हैं)। सही फ्रेमवर्क प्रकार, संग्रह के लिए ElementType और इनपुट सत्यापन के लिए वैलिडेटर के साथ उचित स्कीमा परिभाषा की आवश्यकता है। लंबे समय तक चलने वाले संच
official
new-terraform-provider
hashicorp
Plugin Framework का उपयोग करके एक नया Terraform प्रदाता तैयार करें। मानक "terraform-provider-" नामकरण परंपरा के साथ एक नया Go मॉड्यूल वर्कस्पेस उत्पन्न करता है और आवश्यक निर्भरताओं को आरंभ करता है। HashiCorp के Plugin Framework पैटर्न का पालन करते हुए एक टेम्पलेट main.go फ़ाइल प्रदान करता है, जिसमें अनुकूलन के लिए TODO मार्कर होते हैं। बिल्ड और टेस्ट कमांड चलाकर सेटअप को मान्य करता है ताकि यह सुनिश्चित हो सके कि प्रदाता संकलित होता है और प्रारंभिक जांच पास कर
official
azure-verified-modules
hashicorp
Azure Terraform मॉड्यूल के लिए AVM अनुपालन हेतु प्रमाणन आवश्यकताएँ और सर्वोत्तम अभ्यास। प्रदाता संस्करण बाधाओं (azurerm >= 4.0, < 5.0; azapi >= 2.0, < 3.0) को लागू करता है और पिन किए गए Terraform रजिस्ट्री स्रोतों के पक्ष में git-आधारित मॉड्यूल संदर्भों को प्रतिबंधित करता है। सभी पहचानकर्ताओं के लिए लोअर स्नेक_केसिंग, सटीक चर प्रकार, एंटी-भ्रष्टाचार परत पैटर्न के माध्यम से अलग-अलग आउटपुट
official
provider-docs
hashicorp
Terraform प्रदाता दस्तावेज़ीकरण को Terraform रजिस्ट्री के लिए HashiCorp-अनुशंसित पैटर्न, tfplugindocs टेम्पलेट्स और स्कीमा का उपयोग करके बनाएं, अपडेट करें और समीक्षा करें।
official