Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Migrez tous vos volumes EBS de gp2 vers gp3 : plus de performance, jusqu'à 20 % d'économies

By VilmarApr 11, 20247 min read

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

Image générée par IA représentant le stockage cloud

Sommaire

Comparaison entre les volumes gp3 et gp2

En décembre 2020, AWS a lancé une nouvelle génération de volumes EBS SSD à usage général, baptisée gp3. Contrairement à son prédécesseur, ses performances de base ne dépendent pas de la taille du volume : les volumes gp3 offrent un minimum de 3 000 IOPS de base, quelle que soit leur taille, là où gp2 appliquait un ratio variable de 3 IOPS/Gio directement indexé sur la taille du volume. Les volumes gp3 sont également plus économiques, à 0,08 $/Gio-mois contre 0,10 $/Gio-mois pour les anciens volumes gp2.

Avec les volumes EBS gp2, le débit et les IOPS de base sont directement liés à la taille du volume, à raison de 3 IOPS/Gio, et entre 128 Mio/s et 250 Mio/s de débit selon la taille. Avec gp2, impossible d'augmenter les IOPS ou le débit sans augmenter la taille du volume. Ces volumes disposent toutefois d'un système de crédits de burst, qui leur permet d'atteindre des pics de performance pendant de courtes périodes.

Avec les nouveaux volumes gp3, vous pouvez provisionner jusqu'à 16 000 IOPS et 1 000 Mio/s de débit, indépendamment de la taille du volume, moyennant un coût additionnel de 0,005 $/IOPS-mois provisionné au-delà des 3 000 IOPS de base, et de 0,04 $/Mio/s-mois provisionné au-delà des 125 Mio/s de base.

AWS fournit un tableau comparatif synthétique mettant en évidence les différences entre les volumes gp2 et gp3 :

Tableau comparatif entre les types de volumes EBS gp3 et gp2

Avec l'arrivée de cette nouvelle génération de volumes EBS SSD à usage général, conserver gp2 n'est plus rentable ni avantageux côté performances : les volumes gp2 sont plus chers et offrent généralement moins d'IOPS de base que les volumes gp3 de taille équivalente.

Certes, les volumes gp2 finissent par offrir plus d'IOPS que la base de gp3 au-delà de 1 Tio, mais il reste plus économique de payer le supplément pour aligner les IOPS et le débit sur gp3 que de rester sur gp2 pour obtenir ce surplus. Dans ce cas de figure, le niveau d'économies passe sous la barre des 20 %, mais l'opération demeure avantageuse.

Si votre volume EBS fait moins de 334 Gio, migrer de gp2 vers gp3 vous fera économiser 20 %, tout en apportant des gains de performance considérables.

Pour les volumes de plus de 334 Gio mais inférieurs à 1 Tio, migrer vers gp3 et payer le débit additionnel pour égaler les 250 Mio/s de gp2 reste rentable, et vous bénéficiez de meilleures performances grâce aux IOPS de base supplémentaires. Les économies vont alors de 15 % à 5 % selon la taille du volume.

Pour les volumes supérieurs à 1 Tio, migrer vers gp3 et payer le débit et les IOPS additionnels pour égaler les 250 Mio/s et les 3 IOPS par Gio de gp2 reste également rentable, avec des économies allant de 15 % à 7 %.

Dans aucun scénario gp2 n'est meilleur ou moins cher que gp3. Cela dit, passer à gp3 s'impose comme une évidence au regard de son rapport coût-performance.

Mieux : la migration ne présente aucun inconvénient, puisqu'elle s'effectue sans interruption de service et sans dégradation des performances. Les performances du volume EBS pendant la modification sont en effet garanties au moins équivalentes à celles du volume d'origine.

Comment migrer tous les volumes gp2 vers gp3 ?

Pour une migration simple et fluide, il suffit d'exécuter le petit script Python ci-dessous. Il convertit automatiquement tous vos volumes gp2 en gp3, dans toutes les régions, en alignant leurs IOPS et leur débit pour les volumes de plus de 334 Gio.

En lançant ce script, vous économiserez sur chaque volume migré, jusqu'à 20 %, tout en améliorant nettement les performances pour les volumes plus petits, et en conservant au minimum les mêmes niveaux de performance pour les volumes plus grands.

Le script calcule également les économies générées par la migration de vos volumes gp2 vers gp3, et affiche le montant effectif des économies réalisées.

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()

Prérequis :

  • Python3 doit être installé, avec l'extension boto3 ;
  • Vous devez disposer d'identifiants AWS avec les permissions nécessaires pour modifier les volumes EBS dans toutes les régions, dans le fichier ~/.aws/credentials ; OU
  • Vous pouvez aussi exporter les identifiants AWS sous forme de variables d'environnement pour une exécution ponctuelle, à l'aide des commandes ci-dessous :
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"

Une fois tous les prérequis ci-dessus validés, enregistrez simplement le script dans un fichier (par exemple gp2togp3.py) et lancez la commande suivante :

python3 gp2togp3.py

Exemple de sortie d'exécution :

❯ 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.

Aller plus loin dans les économies après la migration vers gp3

Cet article privilégie une solution universelle, mais vous pouvez pousser les économies encore plus loin avec gp3 si vous n'avez pas réellement besoin du surplus d'IOPS et de débit sur les volumes de plus de 1 Tio.

Dans ce cas, il faudra toutefois analyser finement l'utilisation de votre application, pour comprendre combien d'IOPS et quel débit elle consomme réellement, puis ajuster les volumes gp3 en conséquence.

Lorsque les volumes plus grands n'ont pas besoin de 3 IOPS par Gio, vous pourriez économiser davantage en ne relevant tout simplement pas les IOPS de base — et il en va de même pour le débit.