diff --git a/orchestrator/dispatch/bootstrap b/orchestrator/dispatch/bootstrap index c729b8c..22cf595 100644 Binary files a/orchestrator/dispatch/bootstrap and b/orchestrator/dispatch/bootstrap differ diff --git a/orchestrator/dispatch/function.zip b/orchestrator/dispatch/function.zip index cd30c01..5efe110 100644 Binary files a/orchestrator/dispatch/function.zip and b/orchestrator/dispatch/function.zip differ diff --git a/orchestrator/dispatch/main.go b/orchestrator/dispatch/main.go index b6b23b2..18bab80 100644 --- a/orchestrator/dispatch/main.go +++ b/orchestrator/dispatch/main.go @@ -309,6 +309,12 @@ func startSpotRunner(ctx context.Context, c cfg, label, runID string) (string, e client := ec2.NewFromConfig(awsCfg) + // Docker builds need more disk (monorepo + layers) + diskSize := int32(20) + if label == "docker" { + diskSize = 40 + } + out, err := client.RunInstances(ctx, &ec2.RunInstancesInput{ ImageId: aws.String(c.AMI), InstanceType: ec2types.InstanceType(spot.InstanceType), @@ -316,6 +322,16 @@ func startSpotRunner(ctx context.Context, c cfg, label, runID string) (string, e MaxCount: aws.Int32(1), UserData: aws.String(userData), + // Root volume — bigger for Docker builds + BlockDeviceMappings: []ec2types.BlockDeviceMapping{{ + DeviceName: aws.String("/dev/xvda"), + Ebs: &ec2types.EbsBlockDevice{ + VolumeSize: aws.Int32(diskSize), + VolumeType: ec2types.VolumeTypeGp3, + DeleteOnTermination: aws.Bool(true), + }, + }}, + // Spot request InstanceMarketOptions: &ec2types.InstanceMarketOptionsRequest{ MarketType: ec2types.MarketTypeSpot,