Agent Skills: AWS EC2 Deployment Skill

Launch, configure, and manage EC2 instances with best practices

UncategorizedID: pluginagentmarketplace/custom-plugin-aws/aws-ec2-deployment

Skill Files

Browse the full folder contents for aws-ec2-deployment.

Download Skill

Loading file tree…

skills/aws-ec2-deployment/SKILL.md

Skill Metadata

Name
aws-ec2-deployment
Description
Launch, configure, and manage EC2 instances with best practices

AWS EC2 Deployment Skill

Deploy and manage EC2 instances with production-ready configurations.

Quick Reference

| Attribute | Value | |-----------|-------| | AWS Service | EC2 | | Complexity | Medium | | Est. Time | 5-15 min | | Prerequisites | VPC, Security Group, Key Pair |

Parameters

Required

| Parameter | Type | Description | Validation | |-----------|------|-------------|------------| | instance_type | string | EC2 instance type | Valid type (m6i.large) | | ami_id | string | AMI ID | ami-[a-z0-9]{17} | | subnet_id | string | Target subnet | subnet-[a-z0-9]{17} | | security_group_ids | array | Security groups | Non-empty array |

Optional

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | key_name | string | null | SSH key pair name | | iam_instance_profile | string | null | IAM role ARN | | user_data | string | null | Base64 startup script | | ebs_optimized | bool | true | EBS optimization | | monitoring | bool | true | Detailed monitoring |

Implementation

Launch Instance

aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type m6i.large \
  --subnet-id subnet-12345678 \
  --security-group-ids sg-12345678 \
  --key-name my-key \
  --iam-instance-profile Name=MyRole \
  --ebs-optimized \
  --monitoring Enabled=true \
  --metadata-options HttpTokens=required \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=MyServer}]'

User Data Script

#!/bin/bash
set -e
yum update -y
yum install -y docker
systemctl enable docker
systemctl start docker

Retry Logic

def launch_with_retry(params, max_retries=3):
    for attempt in range(max_retries):
        try:
            return ec2.run_instances(**params)
        except ec2.exceptions.InsufficientInstanceCapacity:
            params['SubnetId'] = get_alternate_subnet()
            time.sleep(2 ** attempt)
    raise Exception("Failed to launch instance")

Troubleshooting

Common Issues

| Symptom | Cause | Solution | |---------|-------|----------| | InsufficientInstanceCapacity | AZ full | Try different AZ | | InvalidAMIID | AMI not in region | Copy AMI | | Unauthorized | IAM missing | Check permissions | | Pending forever | ENI issue | Check subnet IPs |

Debug Checklist

  • [ ] AMI exists in target region?
  • [ ] Subnet has available IPs?
  • [ ] Security group allows traffic?
  • [ ] Key pair exists?
  • [ ] IMDSv2 configured?

Instance Selection Guide

| Workload | Family | Key Feature | |----------|--------|-------------| | Web/API | M6i, M7g | Balanced | | Compute | C6i, C7g | High CPU | | Memory | R6i, X2idn | High memory | | GPU/ML | P4d, G5 | NVIDIA GPU |

Cost Optimization

| Strategy | Savings | |----------|---------| | Reserved Instances | 30-60% | | Savings Plans | 30-72% | | Spot Instances | Up to 90% | | Right-sizing | 10-50% |

Test Template

def test_ec2_launch():
    # Arrange
    params = {
        "ImageId": get_latest_amazon_linux_ami(),
        "InstanceType": "t3.micro",
        "MaxCount": 1, "MinCount": 1
    }

    # Act
    response = ec2.run_instances(**params)
    instance_id = response['Instances'][0]['InstanceId']

    # Assert
    waiter = ec2.get_waiter('instance_running')
    waiter.wait(InstanceIds=[instance_id])

    # Cleanup
    ec2.terminate_instances(InstanceIds=[instance_id])

Assets

  • assets/ec2-userdata.sh - Sample user data script

References