Skip to content

Compute Cost Optimization & Spot Strategies

Architectural patterns to reduce GPU and CPU infrastructure costs by up to 75% without sacrificing reliability.


The 4 Pillars of Compute Cost Efficiency

mermaid
flowchart LR
    A["1. Spot Fleets"] -->|60-70% savings| E["Optimized Compute Spend"]
    B["2. Hard Runtime Caps"] -->|Zero idle waste| E
    C["3. Snapshot & Terminate"] -->|Storage vs compute| E
    D["4. Firecracker for Code"] -->|Sub-cent execution| E

TIP

Always design your applications assuming any instance might be terminated at any time. This mindset unlocks the greatest savings.


Spot Instance Deep Dive

How the AWS Spot Market Works

Spot instances utilize spare EC2 capacity at steep discounts (typically 60-65% less than on-demand rates). AWS offers this unused capacity to users, but retains the right to reclaim it when on-demand capacity is needed.

INFO

All prices and billing in FOTOhub are 100% USD from your prepaid wallet. There are NO PLN charges and NO credit systems. You need a minimum of $0.50 USD in your wallet to provision any instance.

When the spot capacity pool in eu-central-1 (Frankfurt) drops, AWS issues a 2-minute termination notice.

The 2-Minute Termination Notice

When your instance is marked for interruption, the FOTOhub agent receives a notification via the metadata service. You have exactly 120 seconds to:

  1. Save your progress (checkpointing)
  2. Flush logs to cloud storage
  3. Gracefully shutdown application services
  4. Detach EBS volumes (if using the reserved-equivalent pattern)

WARNING

Never ignore the termination notice. Applications that do not handle this cleanly risk data corruption or lost training steps.

Interruption Handling Architecture

mermaid
sequenceDiagram
    participant AWS as AWS EC2
    participant OS as Instance OS
    participant App as Your Application
    participant Storage as S3 / EBS
    
    AWS->>OS: 2-Min Termination Notice
    OS->>App: SIGTERM / Webhook
    App->>App: Pause training/processing
    App->>Storage: Flush state (Checkpoint)
    App->>Storage: Upload logs
    App->>OS: Exit 0
    OS->>AWS: Shutdown Complete (within 120s)

Spot Savings Calculator

Understanding the formula for spot savings is crucial. Savings % = 100 * (1 - (Spot Price / On-Demand Price))

Real Examples for All Supported Families in eu-central-1

FamilyInstance TypevCPURAMGPUOn-Demand (USD/hr)Spot (USD/hr)Savings
T3t3.large28 GBNone$0.095$0.028~70%
C5c5.2xlarge816 GBNone$0.384$0.144~62%
M5m5.large28 GBNone$0.107$0.043~60%
R5r5.xlarge432 GBNone$0.284$0.088~69%
G4dng4dn.xlarge416 GB1x T4 16GB$0.53$0.20~62%
G5g5.xlarge416 GB1x A10G 24GB$1.01$0.38~62%

DANGER

Instance prices can fluctuate. The FOTOhub API endpoints reflect real-time billing constraints based on your prepaid wallet.


Checkpointing Strategies

When dealing with long-running tasks, saving state is mandatory.

How to Save Model State

For ML workloads, save your .safetensors or .ckpt files to a mounted EBS volume or upload directly to S3 every N steps or M minutes.

Resuming on a New Spot Instance

When your orchestration layer spins up a replacement instance, it should pass a resume_from_checkpoint parameter pointing to the last saved state.

python
import torch
import os

checkpoint_dir = "/mnt/persistent/checkpoints/"
latest_checkpoint = max(os.listdir(checkpoint_dir)) if os.listdir(checkpoint_dir) else None

if latest_checkpoint:
    print(f"Resuming from {latest_checkpoint}")
    model.load_state_dict(torch.load(os.path.join(checkpoint_dir, latest_checkpoint)))
else:
    print("Starting from scratch")
typescript
import * as fs from 'fs';
import * as path from 'path';

const checkpointDir = '/mnt/persistent/checkpoints/';
const getLatestCheckpoint = () => {
    const files = fs.readdirSync(checkpointDir);
    return files.length ? files.sort().reverse()[0] : null;
};
go
package main

import (
    "fmt"
    "os"
)

func main() {
    // Basic logic for finding latest checkpoint
    fmt.Println("Scanning for checkpoints in /mnt/persistent/checkpoints/")
}

Hard Runtime Caps (max_runtime_hours)

One of the most frequent causes of cloud overspending is forgotten developer instances left running over weekends.

FOTOhub enforces an mandatory max_runtime_hours parameter (default 24, range 1 to 720 hours). The backend daemon polls instance status every 5 seconds; as soon as elapsed_runtime >= max_runtime_hours, the instance automatically transitions to stopping.

How It Bills

You are only billed for the exact runtime in seconds up until termination. No hidden cleanup fees.

Setting Per-Job Runtime Caps

bash
curl -X POST https://apis.fotohub.app/compute/v1/instances   -H "Authorization: Bearer fh_live_secret"   -H "Content-Type: application/json"   -d '{
    "name": "experimental-lora-train",
    "catalog_id": "g5.xlarge",
    "spot_instance": true,
    "max_runtime_hours": 3
  }'
python
import requests

response = requests.post(
    "https://apis.fotohub.app/compute/v1/instances",
    headers={"Authorization": "Bearer fh_live_secret"},
    json={
        "name": "experimental-lora-train",
        "catalog_id": "g5.xlarge",
        "spot_instance": True,
        "max_runtime_hours": 3
    }
)

Result: Even if a developer walks away after triggering a fine-tuning job, the machine terminates after 3 hours, capping maximum spend at ~$1.14.


The "Snapshot & Terminate" Pattern

Keeping an idle GPU instance running costs $0.38 - $1.01 per hour just for the compute allocation.

Instead of keeping instances running overnight, use the Snapshot & Terminate pattern:

mermaid
flowchart TD
    A["Active Work Session Finished"] --> B["1. Create Snapshot of EBS Data Disk"]
    B --> C["2. Terminate EC2 Instance ($0.00/hr compute)"]
    C --> D["Disk preserved in AWS S3 ($0.05/GB-mo)"]
    D --> E["Next Morning: Spin up new Spot instance from snapshot"]

Cost Comparison

  • Leaving A10G running idle over weekend (60 hours):60 hours x $0.38 = $22.80
  • Snapshotting 100 GB disk and terminating:100 GB x ($0.05 / 730 hrs) x 60 hrs = $0.41
  • Total Weekend Savings: 98.2%

Complete Automation Script

Save this script and run it via cron on Fridays at 6 PM.

bash
#!/bin/bash
# snapshot_and_terminate.sh
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
VOLUME_ID=$(aws ec2 describe-volumes --filters Name=attachment.instance-id,Values=$INSTANCE_ID --query 'Volumes[0].VolumeId' --output text)

echo "Creating snapshot for volume $VOLUME_ID"
SNAPSHOT_ID=$(aws ec2 create-snapshot --volume-id $VOLUME_ID --description "Weekend snapshot" --query 'SnapshotId' --output text)

echo "Waiting for snapshot $SNAPSHOT_ID to complete..."
aws ec2 wait snapshot-completed --snapshot-ids $SNAPSHOT_ID

echo "Snapshot done. Terminating instance..."
aws ec2 terminate-instances --instance-ids $INSTANCE_ID

Auto-Scaling with Scale-to-Zero

For workloads like batch processing, you want zero instances when the queue is empty, and rapid scaling when jobs arrive.

Provision on Job Start

When a message hits your queue, a serverless function triggers the FOTOhub API to launch a spot instance.

Terminate When Done

The worker node itself should check the queue, and if it's empty, call the API to terminate itself.

python
import requests
import sys

def check_queue():
    # Placeholder for actual queue logic
    return 0

if check_queue() == 0:
    print("Queue empty, terminating self...")
    requests.delete(
        "https://apis.fotohub.app/compute/v1/instances/self",
        headers={"Authorization": "Bearer fh_live_secret"}
    )
    sys.exit(0)

Wallet Monitoring Alerts

Because FOTOhub operates on a prepaid USD wallet, running out of balance means your instances will be immediately stopped.

Polling /instances/eligibility

You can poll this endpoint to check if you have sufficient funds to launch a specific instance type for a given duration.

bash
curl "https://apis.fotohub.app/compute/v1/instances/eligibility?catalog_id=g5.xlarge&hours=24"   -H "Authorization: Bearer fh_live_secret"

Webhook-Based Low-Balance Alerts

Configure webhooks in the FOTOhub console to send a POST request to your Slack/Discord bot when your wallet drops below a threshold (e.g., $10.00).

json
{
  "event": "wallet.balance_low",
  "balance_usd": 8.50,
  "currency": "USD",
  "threshold_usd": 10.00,
  "timestamp": "2026-09-06T16:56:51Z"
}

Reserved-Equivalent Pattern

The reserved-equivalent pattern allows you to run long-lived services on spot instances by automatically recovering them when interrupted.

Mechanism

  1. Launch a spot instance.
  2. Attach a separate EBS volume containing your application state/database.
  3. If interrupted, the orchestrator immediately requests a new spot instance.
  4. The EBS volume is detached from the dying instance and reattached to the new one.
mermaid
flowchart TD
    A[Spot Instance A] -->|Interrupted| B[Detach EBS]
    B --> C[Launch Spot Instance B]
    C --> D[Attach EBS to Instance B]
    D --> E[Resume Service]

This provides the uptime of reserved instances at spot pricing, minus a ~3 minute recovery window.


Cost Breakdown Examples (Real USD Numbers)

Here are 5 common workloads and their realistic costs using the strategies outlined above in eu-central-1.

1. SDXL Image Generation Farm (100 images/day)

  • Hardware: g4dn.xlarge (T4 16GB)
  • Time to generate 100 images: ~0.5 hours
  • Strategy: Scale-to-zero spot instance triggered by API.
  • Cost calculation: 0.5 hours * $0.20/hr spot = $0.10 USD / day

2. LLM Fine-Tuning (Llama 70B, 8h training)

  • Hardware: 8x g5.xlarge (Distributed across multiple nodes)
  • Strategy: Spot instances with checkpoints every 10 minutes.
  • Cost calculation: 8 nodes * 8 hours * $0.38/hr = $24.32 USD (vs $64.64 On-Demand)

3. vLLM Inference Server (24/7 API)

  • Hardware: g5.xlarge
  • Strategy: Reserved-equivalent pattern using spot, handling 2-3 interruptions per week.
  • Cost calculation: 730 hours/month * $0.38/hr = $277.40 USD / month

4. Weekly Batch Video Processing (1000 clips)

  • Hardware: c5.2xlarge (CPU-optimized)
  • Strategy: Weekend batch processing with hard runtime caps.
  • Cost calculation: 10 hours * $0.144/hr = $1.44 USD / week

5. ComfyUI Render Pipeline (1M images/month)

  • Hardware: Fleet of 10x g4dn.xlarge
  • Strategy: 24/7 spot fleet, processing messages from SQS.
  • Cost calculation: 10 nodes * 730 hours * $0.20 = $1,460.00 USD / month (Saving over $2,400 compared to on-demand)

Dashboard Integration

Monitor your spend via the FOTOhub console and API.

/console Billing Breakdown

The web console provides a day-by-day breakdown of spend by instance family and project tag.

CSV Export

You can programmatically export your usage logs for internal chargeback:

bash
curl "https://apis.fotohub.app/compute/v1/billing/export?format=csv&month=2026-09"   -H "Authorization: Bearer fh_live_secret" > billing.csv

Monthly Reports

Enable monthly PDF reports to be emailed to your finance team, summarizing spot savings and idle waste.


Team Spending Controls

Prevent a single junior developer from bankrupting the project.

Per-User Wallet Limits

Define hard limits on how much a specific IAM user can spend per month. If they hit the limit, their POST /instances calls will return 402 Payment Required.

API Key Scope Restrictions

Restrict API keys to specific instance families or require the spot_instance: true flag.

json
{
  "key_id": "key_prod_123",
  "allowed_families": ["t3", "g4dn"],
  "require_spot": true,
  "max_budget_usd": 50.00
}

Firecracker microVMs for Script Execution

Never provision a full EC2 virtual machine just to run a 5-second Python data transformation or mathematical script.

Use the Firecracker sandbox API (POST /sandbox/exec-python):

  • Cost: Fraction of a cent per execution.
  • Startup: Booted in under 200 milliseconds.
  • Resource limit: Up to 2,048 MB RAM and 60 seconds CPU timeout.
  • Security: Hardware KVM hypervisor isolation.

Automated Idle Auto-Shutdown Daemon

To guarantee developers never incur idle charges, install this background daemon on your GPU instances. It tracks GPU load every 60 seconds and initiates a graceful instance shutdown if utilization stays below 5% for 15 consecutive minutes:

bash
#!/bin/bash
# /usr/local/bin/gpu-idle-guard.sh
IDLE_MINUTES=15
IDLE_THRESHOLD_PERCENT=5
COUNTER=0

while true; do
  # Query GPU compute utilization
  GPU_UTIL=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | head -n 1)
  
  if [ -z "$GPU_UTIL" ]; then
      GPU_UTIL=0
  fi
  
  if [ "$GPU_UTIL" -lt "$IDLE_THRESHOLD_PERCENT" ]; then
    COUNTER=$((COUNTER + 1))
    echo "GPU idle ($GPU_UTIL%) for $COUNTER / $IDLE_MINUTES checks..."
  else
    COUNTER=0
  fi
  
  if [ "$COUNTER" -ge "$IDLE_MINUTES" ]; then
    echo "GPU idle for $IDLE_MINUTES consecutive minutes. Stopping instance via API..."
    # Notify FOTOhub compute to gracefully stop instance
    sudo poweroff
    exit 0
  fi
  
  sleep 60
done

Install as a systemd service:

bash
sudo cat > /etc/systemd/system/gpu-idle-guard.service << 'EOF'
[Unit]
Description=GPU Idle Guard Auto-Shutdown
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/gpu-idle-guard.sh
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable --now gpu-idle-guard

Multi-AZ Spot Capacity Diversification

When requesting large spot fleets during high-demand European business hours, diversify requests across availability zones:

python
from fotohub import FotoHub

client = FotoHub(api_key="fh_live_...")

def launch_resilient_spot_node(name: str):
    zones = ["eu-central-1a", "eu-central-1b", "eu-central-1c"]
    for az in zones:
        try:
            instance = client.post("/compute/v1/instances", {
                "name": f"{name}-{az}",
                "catalog_id": "g5.xlarge",
                "spot_instance": True,
                "availability_zone": az
            })
            print(f"Successfully claimed Spot capacity in {az}!")
            return instance
        except Exception as err:
            print(f"AZ {az} spot pool congested, trying next zone...")
            continue

Appendix: Detailed Scenario Walkthroughs

Walkthrough 1: Handling Spot Interruption Gracefully

Here is an extended trace of an application gracefully handling a spot interruption notice. When the metadata service provides the 2-minute notice, the application enters drain mode.

log
[2026-09-06T16:56:51Z] INFO - Checking spot instance status...
[2026-09-06T16:56:51Z] INFO - HTTP 200 OK - No termination notice.
[2026-09-06T16:58:00Z] WARN - TERMINATION NOTICE RECEIVED! Action required within 120s.
[2026-09-06T16:58:01Z] INFO - Triggering application state drain...
[2026-09-06T16:58:10Z] INFO - Checkpointing epoch 145...
[2026-09-06T16:58:35Z] INFO - Checkpoint saved successfully (2.1GB uploaded to S3).
[2026-09-06T16:58:36Z] INFO - Shutting down API listener...
[2026-09-06T16:58:45Z] INFO - Unmounting EBS volume /dev/xvdf...
[2026-09-06T16:58:50Z] INFO - Graceful shutdown complete. Exiting with code 0.

Walkthrough 2: Cost Calculation Grid for AI Agents

For applications using multiple small models (e.g., embedding models, small LLMs for routing), mapping these to correct instances is key to savings.

TaskRecommended InstanceReasoningSpot CostDaily Est (8h)
Routing / Guardrailsc5.2xlargeCPU inference is sufficient for quantized models$0.144$1.15
Vector Embeddingst3.largeBurst compute capability for sporadic requests$0.028$0.22
Voice Synthesisg4dn.xlargeT4 tensor cores optimize TTS throughput$0.200$1.60
Vision Encodingg4dn.xlargeVRAM limits keep batch size small, cost low$0.200$1.60
Complex Reasoningg5.xlargeA10G required for 7B+ parameters context$0.380$3.04
Batch 01 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 02 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 03 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 04 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 05 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 06 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 07 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 08 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 09 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 10 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 11 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 12 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 13 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 14 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 15 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 16 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 17 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 18 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 19 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 20 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 21 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 22 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 23 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 24 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 25 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 26 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 27 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 28 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 29 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70
Batch 30 Analyticsr5.xlargeMemory intensive aggregation node$0.088$0.70

Comprehensive Billing Report Example

When you export your billing history, the CSV will contain extremely granular details. Below is a sample of what those rows look like:

csv
timestamp,resource_id,type,family,region,runtime_seconds,cost_usd
2026-09-01T00:00,i-001,spot,g5.xlarge,eu-central-1,3600,0.38
2026-09-01T01:00,i-001,spot,g5.xlarge,eu-central-1,3600,0.38
2026-09-01T02:00,i-002,spot,g4dn.xlarge,eu-central-1,1800,0.10
2026-09-01T01:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T02:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T03:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T04:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T05:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T06:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T07:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T08:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T09:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T10:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T11:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T12:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T13:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T14:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T15:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T16:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T17:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T18:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T19:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T20:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T21:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T22:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T23:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T00:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T01:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T02:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T03:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T04:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T05:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T06:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T07:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T08:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T09:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T10:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T11:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T12:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T13:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T14:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T15:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T16:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T17:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T18:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T19:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T20:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T21:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T22:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T23:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T00:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T01:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T02:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T03:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T04:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T05:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T06:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T07:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T08:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T09:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T10:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T11:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T12:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T13:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T14:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T15:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T16:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T17:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T18:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T19:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T20:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T21:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T22:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T23:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T00:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T01:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T02:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T03:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T04:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T05:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T06:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T07:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T08:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T09:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T10:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T11:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T12:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T13:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T14:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T15:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T16:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T17:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T18:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T19:15,i-002,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T20:15,i-003,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T21:15,i-004,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T22:15,i-005,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T23:15,i-006,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T00:15,i-007,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T01:15,i-008,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T02:15,i-009,spot,g5.xlarge,eu-central-1,900,0.095
2026-09-01T03:15,i-001,spot,g5.xlarge,eu-central-1,900,0.095

FAQ

Q: Can I use EUR instead of USD? A: No. FOTOhub compute services operate 100% in USD from the prepaid wallet. No PLN or EUR are directly accepted; currency conversion happens at funding time.

Q: What happens if my balance reaches exactly $0.00? A: All running instances immediately transition to the stopping state. You cannot provision new instances until you top up to at least $0.50 USD.

Q: Is network transfer billed? A: Within eu-central-1, transfer between nodes is free. Egress to the public internet is billed at standard rates, but this is outside the scope of instance compute cost optimization.

Q: Can I reserve capacity without paying upfront? A: No, FOTOhub does not offer zero-upfront reservations. The recommended approach is using Spot fleets with the Reserved-Equivalent pattern.


Last Updated: 2026-09-06