Claude Code Plugins

Community-maintained marketplace

Feedback

Launch, configure, and manage EC2 instances with best practices

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name aws-ec2-deployment
description Launch, configure, and manage EC2 instances with best practices
sasmp_version 1.3.0
bonded_agent 02-aws-compute
bond_type PRIMARY_BOND

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