ec2-instance
Terraform module for ec2-instance on aws
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
- Inputs - All input parameters
- Outputs - Output values
- Examples - Usage examples
- Use Cases - Common use cases
- Demonstrations - Step-by-step guides
Registry
Inputs
Name tag for the EC2 instance. Appears in the AWS Console for identification.
AMI ID for the instance. AMI IDs are region-specific. Use data sources instead of hardcoded AMI IDs.
EC2 instance type. Common types: t3.micro (dev), t3.small (small apps), t3.medium (general purpose), m5.large (production).
Subnet ID for the instance. Use private subnets for backend services, public subnets for internet-facing instances.
Outputs
ID of the EC2 instance. Use this for resource references.
Public IP address of the instance (if applicable).
Private IP address of the instance.