Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

EBS-Volumes von gp2 auf gp3 migrieren – mehr Performance, bis zu 20 % weniger Kosten

By VilmarApr 11, 20247 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

KI-generiertes Bild zur Veranschaulichung von Cloud-Speicher

Inhaltsverzeichnis

gp3- und gp2-Volumes im Vergleich

Im Dezember 2020 hat AWS mit gp3 eine neue Generation von SSD-basierten EBS-Volumes für allgemeine Zwecke eingeführt. Anders als beim Vorgänger ist die Basisleistung nicht mehr an die Volume-Größe gekoppelt: gp3-Volumes liefern unabhängig von der Größe mindestens 3.000 IOPS, während bei gp2 eine variable Rate von 3 IOPS/GiB galt, die direkt an die Volume-Größe gebunden war. Hinzu kommt der Preisvorteil: gp3-Volumes kosten 0,08 $/GiB pro Monat, gegenüber 0,10 $/GiB pro Monat bei gp2.

Bei gp2-Volumes hängen Basisdurchsatz und IOPS direkt von der Volume-Größe ab: 3 IOPS/GiB sowie ein Durchsatz zwischen 128 MiB/s und 250 MiB/s, je nach Größe. IOPS oder Durchsatz lassen sich bei gp2 ausschließlich durch eine größere Volume-Kapazität erhöhen. Zudem verfügen diese Volumes über ein Burst-Credit-System, mit dem sie für kurze Zeit höhere Werte erreichen.

Mit den neuen gp3-Volume-Typen lassen sich unabhängig von der Volume-Größe bis zu 16.000 IOPS und 1.000 MiB/s Durchsatz bereitstellen – zu Zusatzkosten von 0,005 $ je bereitgestellter IOPS pro Monat oberhalb der Standardbasis von 3.000 IOPS sowie 0,04 $ je bereitgestelltem MiB/s pro Monat oberhalb der Standardbasis von 125 MiB/s.

AWS stellt eine kompakte Vergleichstabelle bereit, die die Unterschiede zwischen gp2- und gp3-Volume-Typen zeigt:

Vergleichstabelle der EBS-Volume-Typen gp3 und gp2

Mit dieser neuen Generation SSD-basierter EBS-Volumes lohnt sich gp2 weder wirtschaftlich noch in puncto Leistung: gp2-Volumes sind teurer und liefern bei gleicher Größe in der Regel weniger Basis-IOPS als gp3-Volumes.

Zwar bieten gp2-Volumes ab 1 TiB mehr IOPS als die gp3-Basis, doch ist es selbst dann günstiger, bei gp3 die zusätzlichen IOPS und den zusätzlichen Durchsatz hinzuzubuchen, statt auf gp2 zu setzen. In diesen Fällen sinkt die Ersparnis zwar unter die 20 %-Marke, bleibt aber weiterhin attraktiv.

Ist Ihr EBS-Volume kleiner als 334 GiB, sparen Sie durch die Migration von gp2 auf gp3 20 % – bei gleichzeitig enormen Leistungsgewinnen.

Bei Volumes über 334 GiB, aber unter 1 TiB sparen Sie auch dann noch, wenn Sie auf gp3 migrieren und den zusätzlichen Durchsatz hinzubuchen, um die 250 MiB/s von gp2 zu erreichen – mit besserer Performance dank der höheren Basis-IOPS. Die Ersparnis bewegt sich hier je nach Volume-Größe zwischen 5 % und 15 %.

Bei Volumes über 1 TiB sparen Sie ebenfalls, wenn Sie auf gp3 wechseln und den zusätzlichen Durchsatz sowie die zusätzlichen IOPS hinzubuchen, um die 250 MiB/s und 3 IOPS pro GiB von gp2 abzubilden. Die Ersparnis liegt in diesem Bereich zwischen 7 % und 15 %.

In keinem Szenario ist gp2 besser oder günstiger als gp3. Damit ist der Wechsel zu gp3 die naheliegende Wahl – wegen der besseren Wirtschaftlichkeit und der höheren Performance.

Auch der Migrationsprozess selbst hat keine Nachteile: Er lässt sich ohne Downtime durchführen und beeinträchtigt die Performance nicht. Während der Umstellung ist die Leistung des EBS-Volumes garantiert mindestens so hoch wie die des ursprünglichen Volumes.

Wie migriert man alle gp2-Volumes auf gp3?

Eine unkomplizierte und reibungslose Migration gelingt mit dem unten stehenden Python-Skript. Es konvertiert automatisch sämtliche gp2-Volumes in allen Regionen auf gp3 und passt für Volumes über 334 GiB die IOPS und den Durchsatz entsprechend an.

Mit diesem Skript senken Sie die Kosten für jedes migrierte Volume um bis zu 20 % – und steigern dabei die Performance kleinerer Volumes erheblich bzw. erreichen bei größeren Volumes mindestens die bisherigen Leistungswerte.

Zusätzlich berechnet das Skript, wie viel Sie durch die Migration Ihrer gp2-Volumes auf gp3 einsparen, und gibt den effektiven Einsparbetrag aus.

import boto3
from botocore.exceptions import ClientError

def calculate_gp3_cost(size_gib, iops, throughput):
    # gp3 pricing
    storage_cost_per_gib = 0.08  # $0.08/GB-month
    iops_cost = 0.005  # $0.005 per IOPS over 3000 IOPS
    throughput_cost = 0.04  # $0.04 per MB/s of throughput above 125 MB/s

    storage_cost = size_gib * storage_cost_per_gib
    extra_iops_cost = (iops - 3000) * iops_cost if iops > 3000 else 0
    extra_throughput_cost = (throughput - 125) * throughput_cost if throughput > 125 else 0

    return storage_cost + extra_iops_cost + extra_throughput_cost

def calculate_gp2_cost(size_gib):
    # gp2 pricing
    storage_cost_per_gib = 0.10  # $0.10/GB-month
    return size_gib * storage_cost_per_gib

def migrate_volume(ec2_client, volume_id, size_gib, region_name):
    savings = 0
    try:
        if size_gib < 334:
            iops = 3000
            throughput = 125
        elif size_gib < 1024:
            iops = 3000
            throughput = 250
        else:
            iops = size_gib * 3
            throughput = 250

        gp2_cost = calculate_gp2_cost(size_gib)
        gp3_cost = calculate_gp3_cost(size_gib, iops, throughput)
        savings = gp2_cost - gp3_cost

        response = ec2_client.modify_volume(
            VolumeId=volume_id,
            VolumeType='gp3',
            Iops=iops,
            Throughput=throughput
        )
        print(f"Migrated volume {volume_id} of size {size_gib} GiB to gp3 in {region_name}. Savings: ${savings:.2f} per month.")
    except ClientError as e:
        print(f"An error occurred: {e}")
    return savings

def list_and_migrate_volumes_in_region(region_name):
    ec2_client = boto3.client('ec2', region_name=region_name)
    total_savings = 0
    try:
        volumes = ec2_client.describe_volumes(
            Filters=[\
                {'Name': 'volume-type', 'Values': ['gp2']}\
            ]
        )
        if not volumes['Volumes']:
            return total_savings  # Return early if no volumes to migrate

        for volume in volumes['Volumes']:
            volume_id = volume['VolumeId']
            size_gib = volume['Size']
            savings = migrate_volume(ec2_client, volume_id, size_gib, region_name)
            total_savings += savings
    except ClientError as e:
        print(f"An error occurred in {region_name}: {e}")
    return total_savings

def list_regions_and_migrate_volumes():
    ec2 = boto3.client('ec2')
    regions = [region['RegionName'] for region in ec2.describe_regions()['Regions']]
    grand_total_savings = 0
    volumes_found = False

    for region in regions:
        total_savings = list_and_migrate_volumes_in_region(region)
        grand_total_savings += total_savings
        if total_savings > 0:
            volumes_found = True
            print(f"Total savings in {region}: ${total_savings:.2f} per month.")

    if not volumes_found:
        print("No gp2 volumes to migrate.")
    else:
        print(f"Grand total savings from migrating all gp2 volumes to gp3: ${grand_total_savings:.2f} per month.")

if __name__ == "__main__":
    list_regions_and_migrate_volumes()

Voraussetzungen:

  • Python3 inklusive boto3-Modul muss installiert sein.
  • Im Pfad ~/.aws/credentials müssen AWS-Zugangsdaten hinterlegt sein, die in allen Regionen über die nötigen Berechtigungen zum Modifizieren von EBS-Volumes verfügen; ODER
  • alternativ können Sie die AWS-Zugangsdaten für eine einmalige Ausführung als Umgebungsvariablen exportieren – mit den folgenden Befehlen:
export AWS_ACCESS_KEY_ID="your_access_key_id_here"
export AWS_SECRET_ACCESS_KEY="your_secret_access_key_here"
export AWS_DEFAULT_REGION="us-east-1"

Sind alle Voraussetzungen erfüllt, speichern Sie das Skript als Datei (zum Beispiel gp2togp3.py) und führen folgenden Befehl aus:

python3 gp2togp3.py

Beispielausgabe:

❯ python3 gp2togp3.py
Migrated volume vol-0f554746c24525f01 of size 520 GiB to gp3 in eu-west-1. Savings: $5.40 per month.
Migrated volume vol-03123800cba75b18f of size 20 GiB to gp3 in eu-west-1. Savings: $0.40 per month.
Migrated volume vol-087a04f1d3d88bf07 of size 2520 GiB to gp3 in eu-west-1. Savings: $22.60 per month.
Migrated volume vol-06b09798a7b6f21d3 of size 4020 GiB to gp3 in eu-west-1. Savings: $30.10 per month.
Migrated volume vol-0b55386bde1279329 of size 4520 GiB to gp3 in eu-west-1. Savings: $32.60 per month.
Migrated volume vol-0f2935d2360fdd2ed of size 2020 GiB to gp3 in eu-west-1. Savings: $20.10 per month.
Migrated volume vol-0a686b3a9aebbbf8f of size 3020 GiB to gp3 in eu-west-1. Savings: $25.10 per month.
Migrated volume vol-0d2d709a825421233 of size 1020 GiB to gp3 in eu-west-1. Savings: $15.40 per month.
Migrated volume vol-00766065b8e2ccc14 of size 1520 GiB to gp3 in eu-west-1. Savings: $17.60 per month.
Migrated volume vol-07ff6098fc4a188f6 of size 3520 GiB to gp3 in eu-west-1. Savings: $27.60 per month.
Total savings in eu-west-1: $196.90 per month.
Migrated volume vol-0de6269b523834350 of size 1520 GiB to gp3 in us-east-1. Savings: $17.60 per month.
Migrated volume vol-05c8fffff1e48fdcb of size 3020 GiB to gp3 in us-east-1. Savings: $25.10 per month.
Migrated volume vol-0f5bd9886a18cfb22 of size 2020 GiB to gp3 in us-east-1. Savings: $20.10 per month.
Migrated volume vol-05981da5774928178 of size 4020 GiB to gp3 in us-east-1. Savings: $30.10 per month.
Migrated volume vol-0d788bce161c9978a of size 2520 GiB to gp3 in us-east-1. Savings: $22.60 per month.
Migrated volume vol-0a45ded9ba633b92a of size 520 GiB to gp3 in us-east-1. Savings: $5.40 per month.
Migrated volume vol-06d300164bf986c32 of size 20 GiB to gp3 in us-east-1. Savings: $0.40 per month.
Migrated volume vol-04a27bbad19828bbf of size 4520 GiB to gp3 in us-east-1. Savings: $32.60 per month.
Migrated volume vol-0e85c18b59e418b8c of size 1020 GiB to gp3 in us-east-1. Savings: $15.40 per month.
Migrated volume vol-0b0cafa0f49767f28 of size 3520 GiB to gp3 in us-east-1. Savings: $27.60 per month.
Total savings in us-east-1: $196.90 per month.
Grand total savings from migrating all gp2 volumes to gp3: $393.80 per month.

Weiteres Sparpotenzial bei der gp3-Migration

Dieser Artikel zeigt eine universelle Lösung – mit der Migration auf gp3 lässt sich aber unter Umständen noch mehr sparen, sofern Sie bei Volumes über 1 TiB die zusätzlichen IOPS und den zusätzlichen Durchsatz nicht benötigen.

In solchen Fällen sollten Sie das Nutzungsverhalten Ihrer Anwendung sorgfältig analysieren, um den tatsächlichen Bedarf an IOPS und Durchsatz zu ermitteln und die gp3-Volumes entsprechend anzupassen.

Benötigen größere Volumes nicht durchgängig 3 IOPS pro GiB, sparen Sie zusätzlich, indem Sie die Basis-IOPS schlicht nicht erhöhen – analog gilt das für den Durchsatz.