ec2-instance

Category Compute
Latest Version 0.1.0current

Terraform module for ec2-instance on aws

Add to your Terraform configuration
module "ec2_instance" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ec2-instance/aws"
  version = "0.1.0"

  # Required inputs
  instance_name = "..."
  ami_id = "..."
  subnet_id = "..."
}

Overview

The ec2-instance module creates AWS EC2 instances with production-ready defaults including:

  • Configurable instance types from any EC2 family
  • Custom or AWS-managed AMI selection
  • VPC subnet and security group integration
  • EBS volume management with encryption
  • User data scripts for instance initialization
  • IMDSv2 enforcement for enhanced security
  • Optional spot instance support

Category: Compute Provider: AWS Latest Version: 1.5.0

Quick Start

module "web_server" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ec2-instance/aws"
  version = "1.5.0"

  instance_name = "web-server"
  instance_type = "t3.micro"
  ami_id        = data.aws_ami.amazon_linux.id
  subnet_id     = module.vpc.private_subnets[0]
}

Key Features

Flexible Instance Types

Support for all EC2 instance families from general purpose to compute-optimized:

module "compute_server" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ec2-instance/aws"
  version = "1.5.0"

  instance_name = "compute-intensive"
  instance_type = "c6i.2xlarge"
  ami_id        = data.aws_ami.amazon_linux.id
  subnet_id     = module.vpc.private_subnets[0]

  ebs_optimized = true
}

User Data Scripts

Initialize instances with custom scripts at launch:

module "app_server" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ec2-instance/aws"
  version = "1.5.0"

  instance_name = "app-server"
  instance_type = "t3.medium"
  ami_id        = data.aws_ami.amazon_linux.id
  subnet_id     = module.vpc.private_subnets[0]

  user_data = <<-EOF
    #!/bin/bash
    yum update -y
    yum install -y httpd
    systemctl start httpd
    systemctl enable httpd
  EOF
}

Security Group Integration

Attach multiple security groups for network access control:

module "secure_server" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ec2-instance/aws"
  version = "1.5.0"

  instance_name      = "secure-server"
  instance_type      = "t3.small"
  ami_id             = data.aws_ami.amazon_linux.id
  subnet_id          = module.vpc.private_subnets[0]
  security_group_ids = [aws_security_group.web.id, aws_security_group.ssh.id]
}

Documentation

Registry

View specification on Registry

Inputs

instance_name Required
string

Name tag for the EC2 instance. Appears in the AWS Console for identification.

ami_id Required
string

AMI ID for the instance. AMI IDs are region-specific. Use data sources instead of hardcoded AMI IDs.

string Default: t3.micro

EC2 instance type. Common types: t3.micro (dev), t3.small (small apps), t3.medium (general purpose), m5.large (production).

subnet_id Required
string

Subnet ID for the instance. Use private subnets for backend services, public subnets for internet-facing instances.

Outputs

instance_id

ID of the EC2 instance. Use this for resource references.

public_ip

Public IP address of the instance (if applicable).

private_ip

Private IP address of the instance.