MicroStack
↑↓ navigate ↵ select esc close
GitHub

EC2

MicroStack's EC2 handler provides metadata-only emulation of the full EC2 API surface — instances, VPCs, subnets, security groups, EBS volumes, snapshots, key pairs, route tables, internet gateways, NAT gateways, elastic IPs, and more. No actual virtual machines are launched.

Supported Operations

Instances

  • RunInstances, DescribeInstances, TerminateInstances, StopInstances, StartInstances, RebootInstances
  • DescribeInstanceAttribute, DescribeInstanceTypes, DescribeImages

VPC and Networking

  • CreateVpc, DeleteVpc, DescribeVpcs, DescribeVpcAttribute, ModifyVpcAttribute
  • CreateSubnet, DeleteSubnet, DescribeSubnets, ModifySubnetAttribute
  • CreateInternetGateway, DeleteInternetGateway, DescribeInternetGateways, AttachInternetGateway, DetachInternetGateway
  • CreateNatGateway, DescribeNatGateways, DeleteNatGateway
  • CreateRouteTable, DeleteRouteTable, DescribeRouteTables, AssociateRouteTable, DisassociateRouteTable, CreateRoute, DeleteRoute
  • AllocateAddress, ReleaseAddress, AssociateAddress, DisassociateAddress, DescribeAddresses
  • CreateNetworkInterface, DeleteNetworkInterface, DescribeNetworkInterfaces, AttachNetworkInterface, DetachNetworkInterface
  • CreateVpcEndpoint, DeleteVpcEndpoints, DescribeVpcEndpoints, ModifyVpcEndpoint
  • CreateNetworkAcl, DescribeNetworkAcls, DeleteNetworkAcl, CreateNetworkAclEntry, DeleteNetworkAclEntry
  • CreateVpcPeeringConnection, AcceptVpcPeeringConnection, DescribeVpcPeeringConnections, DeleteVpcPeeringConnection
  • CreateFlowLogs, DescribeFlowLogs, DeleteFlowLogs
  • CreateDhcpOptions, AssociateDhcpOptions, DescribeDhcpOptions, DeleteDhcpOptions
  • CreateManagedPrefixList, DescribeManagedPrefixLists, GetManagedPrefixListEntries, ModifyManagedPrefixList, DeleteManagedPrefixList

Security Groups

  • CreateSecurityGroup, DeleteSecurityGroup, DescribeSecurityGroups, DescribeSecurityGroupRules
  • AuthorizeSecurityGroupIngress, RevokeSecurityGroupIngress
  • AuthorizeSecurityGroupEgress, RevokeSecurityGroupEgress

Key Pairs

  • CreateKeyPair, DeleteKeyPair, DescribeKeyPairs, ImportKeyPair

EBS Volumes and Snapshots

  • CreateVolume, DeleteVolume, DescribeVolumes, DescribeVolumeStatus, AttachVolume, DetachVolume, ModifyVolume
  • CreateSnapshot, DeleteSnapshot, DescribeSnapshots, CopySnapshot

Launch Templates

  • CreateLaunchTemplate, DescribeLaunchTemplates, GetLaunchTemplateData, DeleteLaunchTemplate, CreateLaunchTemplateVersion

Tags

  • CreateTags, DeleteTags, DescribeTags

Other

  • DescribeAvailabilityZones, DescribePrefixLists

Usage

var ec2 = new AmazonEC2Client(
new BasicAWSCredentials("test", "test"),
new AmazonEC2Config { ServiceURL = "http://localhost:4566" });
// Run an instance
var reservation = await ec2.RunInstancesAsync(new RunInstancesRequest
{
ImageId = "ami-00000000",
MinCount = 1,
MaxCount = 1,
InstanceType = InstanceType.T2Micro,
});
var instanceId = reservation.Reservation.Instances[0].InstanceId;
Console.WriteLine(instanceId); // i-...
// Describe the instance
var instances = await ec2.DescribeInstancesAsync(new DescribeInstancesRequest
{
InstanceIds = [instanceId],
});
var state = instances.Reservations[0].Instances[0].State.Name;
Console.WriteLine(state); // running
// Terminate it
await ec2.TerminateInstancesAsync(new TerminateInstancesRequest
{
InstanceIds = [instanceId],
});

VPC and Subnet Setup

// Create a VPC
var vpc = await ec2.CreateVpcAsync(new CreateVpcRequest
{
CidrBlock = "10.0.0.0/16",
});
var vpcId = vpc.Vpc.VpcId;
// Create a subnet inside the VPC
var subnet = await ec2.CreateSubnetAsync(new CreateSubnetRequest
{
VpcId = vpcId,
CidrBlock = "10.0.1.0/24",
AvailabilityZone = "us-east-1a",
});
// Create a security group
var sg = await ec2.CreateSecurityGroupAsync(new CreateSecurityGroupRequest
{
GroupName = "web-sg",
Description = "Web server security group",
VpcId = vpcId,
});
// Allow inbound HTTP
await ec2.AuthorizeSecurityGroupIngressAsync(new AuthorizeSecurityGroupIngressRequest
{
GroupId = sg.GroupId,
IpPermissions =
[
new IpPermission
{
IpProtocol = "tcp",
FromPort = 80,
ToPort = 80,
Ipv4Ranges = [new IpRange { CidrIp = "0.0.0.0/0" }],
},
],
});

Key Pairs

// Create a key pair
var keyPair = await ec2.CreateKeyPairAsync(new CreateKeyPairRequest
{
KeyName = "my-key",
});
Console.WriteLine(keyPair.KeyPair.KeyName);
Console.WriteLine(keyPair.KeyPair.KeyFingerprint);
// Private key material is returned only at creation time