AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Comment résoudre les problèmes liés aux appels d'API Amazon EC2 RunInstances qui échouent en raison de l'erreur « InvalidBlockDeviceMapping » ?
Je souhaite résoudre l'erreur « InvalidBlockDeviceMapping » que je reçois lorsque j'utilise l'appel d'API RunInstances dans Amazon Elastic Compute Cloud (Amazon EC2).
Résolution
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.
Si les périphériques de stockage en mode bloc ne sont pas correctement configurés, les appels d'API RunInstances Amazon EC2 échouent avec l'erreur « InvalidBlockDeviceMapping ». Pour résoudre le problème, utilisez les étapes suivantes en fonction du message d'erreur reçu :
Erreurs de chiffrement
Si vous lancez des instances à partir d'Amazon Machine Images (AMI) chiffrées, vous recevez un message d'erreur similaire au suivant :
« An error occurred (InvalidBlockDeviceMapping) when calling the RunInstances operation: Cannot create unencrypted volume from encrypted snapshot snap-1234567890abcdef0 »
Amazon EC2 ne peut pas créer de volumes non chiffrés à partir d'instantanés chiffrés. Lorsque vous lancez des instances à partir d'AMI chiffrées, vous devez définir explicitement l'indicateur chiffré sur True dans le paramètre de votre périphérique de stockage en mode bloc.
Pour résoudre cette erreur, définissez l'indicateur chiffré sur True dans votre appel d'API RunInstances, utilisez le paramètre mappages de périphériques de stockage en mode bloc.
aws ec2 run-instances --image-id IMAGE-ID --instance-type t3.micro \ --key-name KEY-PAIR \ --block-device-mappings '{"DeviceName":"/dev/sda1","Ebs":{"Encrypted":true,"DeleteOnTermination":true,"Iops":3000,"KmsKeyId":"arn:aws:KMS-KEY/1234abcd-12ab-34cd-56ef-1234567890ab","VolumeSize":8,"VolumeType":"gp3","Throughput":125}}' \ --network-interfaces '{"AssociatePublicIpAddress":true,"DeviceIndex":0,"Groups":["sg-SECURITY-GROUP-ID"]}'
Remarque : remplacez IMAGE-ID par l’ID de l’AMI et KEY-PAIR par le nom de la paire de clés. Remplacez KMS-KEY par l’ARN de la clé AWS Key Management Service (AWS KMS) et SECURITY-GROUP-ID par l'ID du groupe de sécurité.
Erreurs de partage d'AMI intercompte
Vous ne pouvez pas partager d’AMI adossées à des instantanés chiffrés avec des clés gérées par AWS entre plusieurs comptes. Si vous adossez des AMI à des instantanés chiffrés à l'aide de clés gérées par AWS, vous recevez un message d'erreur similaire au suivant :
« An error occurred (InvalidBlockDeviceMapping) when calling the RunInstances operation: The KMS key used to encrypt the volume is not accessible across accounts. Please verify KMS key permissions »
Pour résoudre cette erreur, créez une clé AWS KMS gérée par le client pour les instantanés AMI. Copiez l'AMI à l'aide d'une clé gérée par le client, puis partagez les autorisations relatives à l'AMI et à la clé AWS KMS avec le compte de destination.
Remarque : vérifiez que le rôle Gestion des identités et des accès AWS (AWS IAM) est autorisé à accéder à la clé AWS KMS de l'instantané chiffré. Pour l'accès intercompte, consultez la section Autoriser les utilisateurs d'autres comptes à utiliser une clé KMS.
Pour créer une clé AWS KMS gérée par le client et partager des AMI entre plusieurs comptes, procédez comme suit :
- Pour créer une clé KMS gérée par le client dans le compte source, exécutez la commande create-key de l’AWS CLI suivante :
Remarque : enregistrez l'ID de clé de la sortie pour l'utiliser dans les étapes suivantes.aws kms create-key --description "Cross-account AMI sharing key" --key-usage ENCRYPT_DECRYPT - Pour créer une stratégie de clé qui autorise l'accès intercompte, exécutez la commande put-key-policy de l'AWS CLI suivante :
Remarque : remplacez KEY-ID par l'ID de la clé KMS gérée par le client à l'étape 1, SOURCE-ACCOUNT-ID par l'ID du compte source et DESTINATION-ACCOUNT-ID par l'ID du compte de destination.`aws kms put-key-policy --key-id KEY-ID --policy-name default --policy '{ "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::SOURCE-ACCOUNT-ID:root"}, "Action": "kms:*", "Resource": "*"` },` { "Sid": "Allow cross-account access", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::DESTINATION-ACCOUNT-ID:root"}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] }'` - Pour copier l'AMI avec la clé gérée par le client, exécutez la commande copy-image de l'AWS CLI suivante :
Remarque : remplacez SOURCE-IMAGE-ID par l’ID de l’AMI source, REGION par la région AWS et KEY-ID par l'ID de la clé KMS gérée par le client à l'étape 1.aws ec2 copy-image --source-image-id SOURCE-IMAGE-ID --source-region REGION --name "Cross-account-AMI" --kms-key-id KEY-ID `1234abcd-12ab-34cd-56ef-1234567890ab` - Pour partager l'AMI avec le compte de destination, exécutez la commande modify-image-attribute de l'AWS CLI suivante :
Remarque : remplacez SOURCE-IMAGE-ID par l'ID de l’AMI source copiée à l'étape 3 et DESTINATION-ACCOUNT-ID par l'ID du compte de destination.aws ec2 modify-image-attribute --image-id `SOURCE-IMAGE-ID` --launch-permission "Add=[{UserId=DESTINATION-ACCOUNT-ID}]" - Dans le compte de destination, créez une politique IAM qui autorise l'accès à la clé KMS partagée :
Remarque : remplacez REGION par la région AWS, SOURCE-ACCOUNT-ID par l'ID du compte source et KEY-ID par l'ID de la clé KMS gérée par le client à l'étape 1.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:REGION:SOURCE-ACCOUNT-ID:key/KEY-ID" } ] }
Pour en savoir plus, consultez la section Comment partager des AMI chiffrées entre plusieurs comptes pour lancer des instances EC2 chiffrées.
Erreurs de taille de volume
La taille du volume de votre appel d'API RunInstances doit correspondre ou dépasser la taille de l'instantané d'origine. Si la taille de volume spécifiée est inférieure à la taille de l'instantané, vous recevez un message d'erreur similaire au suivant :
« An error occurred (InvalidBlockDeviceMapping) when calling the RunInstances operation: Volume size '8' is smaller than snapshot 'snap-1234567890abcdef0' size '10' for /dev/xvda »
Remarque : Amazon Elastic Block Store (Amazon EBS) n'autorise pas la réduction de la taille du volume. Pour plus d'informations sur les limites de capacité de stockage, consultez la section Contraintes de volume Amazon EBS.
Pour résoudre cette erreur, vérifiez la taille du volume d'origine avant de créer l'instantané. Spécifiez ensuite une taille de volume qui correspond ou dépasse la taille de volume d'origine.
Procédez comme suit :
- Pour vérifier la taille d'origine du volume, exécutez la commande describe-volumes de l’AWS CLI suivante :
Remarque : remplacez VOLUME-ID par l'ID du volume.aws ec2 describe-volumes --volume-ids `VOLUME-ID` --query "Volumes.Size" - Pour vérifier la taille du volume de l'instantané, exécutez la commande describe-snapshots de l’AWS CLI suivante :
Remarque : remplacez SNAPSHOT-ID par l’ID de l’instantané.aws ec2 describe-snapshots --snapshot-ids `SNAPSHOT-ID` --query "Snapshots.VolumeSize" - Pour créer des volumes à partir de l'instantané avec la taille correcte, exécutez la commande run-instances de l’AWS CLI suivante :
Remarque : remplacez AMI-ID par l’ID de l’AMI et VOLUME-SIZE par une taille qui correspond ou dépasse la taille de volume d'origine à l'étape 1.aws ec2 run-instances --image-id `AMI-ID` --instance-type t3.micro --block-device-mappings '{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":VOLUME-SIZE,"VolumeType":"gp3"}}'
Erreurs d'identifiant d’instantané
Amazon EC2 exige que les volumes racine utilisent les ID d’instantanés associés à l'AMI. Vous ne pouvez pas modifier les ID d’instantanés du volume racine à partir des valeurs par défaut de l'AMI. Si vous modifiez les ID d’instantanés du volume racine par rapport aux valeurs par défaut de l'AMI, vous recevez un message d'erreur similaire au suivant :
« An error occurred (InvalidBlockDeviceMapping) when calling the RunInstances operation: Invalid snapshot ID snap-1234567890abcdef0 specified for root device /dev/xvda. Expected snapshot-id: snap-0987654321fedcba0 »
Pour résoudre les erreurs d'identifiant d’instantané, recherchez les ID d’instantanés appropriés associés à votre AMI, puis utilisez-les dans votre appel d'API RunInstances.
Procédez comme suit :
- Pour trouver les ID d’instantanés appropriés associés à votre AMI, exécutez la commande describe-images de l'AWS CLI suivante :
Remarque : remplacez AMI-ID par l’ID de l’AMI.aws ec2 describe-images --image-ids `AMI-ID` --query "Images[*].BlockDeviceMappings[*].Ebs.SnapshotId" - Pour utiliser les ID d’instantanés contenus dans la sortie de votre appel d'API RunInstances, exécutez la commande run-instances de l'AWS CLI suivante :
Remarque : remplacez AMI-ID par l’ID de l’AMI et SNAPSHOT-ID par l'ID de l’instantané réel renvoyé à l'étape 1. Pour les volumes racine, vous devez utiliser l'ID d’instantané exact associé à l'AMI.aws ec2 run-instances --image-id AMI-ID --instance-type t3.micro --block-device-mappings '{"DeviceName":"/dev/sda1","Ebs":{"Encrypted":true,"DeleteOnTermination":true,"SnapshotId":"SNAPSHOT-ID","VolumeSize":8,"VolumeType":"gp3"}}'
Erreurs de paramètres de débit
Les paramètres de débit s'appliquent uniquement aux types de volumes gp3. Les volumes Amazon EBS gp2 fournissent automatiquement un débit compris entre 128 Mbits/s et 250 Mbits/s et n'acceptent pas de valeurs de débit personnalisées. Si vous essayez de spécifier des valeurs de débit pour les volumes gp2, vous recevez un message d'erreur similaire au suivant :
« An error occurred (InvalidBlockDeviceMapping) when calling the RunInstances operation: Parameter throughput is not supported for gp2 volumes. Consider using gp3 volume type instead »
Pour résoudre cette erreur, supprimez le paramètre de débit des appels d'API RunInstances lorsque vous utilisez des types de volume gp2. Vous pouvez également modifier le type de volume en gp3 pour spécifier les valeurs de débit.
Procédez comme suit :
- Pour utiliser le type de volume gp2 sans paramètres de débit, exécutez la commande run-instances de l’AWS CLI suivante :
Remarque : remplacez AMI-ID par l’ID de l’AMI et VOLUME-SIZE par la taille de volume souhaitée.aws ec2 run-instances --image-id AMI-ID --instance-type t3.micro --block-device-mappings '{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":VOLUME-SIZE,"VolumeType":"gp2"}}' - Pour utiliser le type de volume gp3 avec des paramètres de débit, exécutez la commande run-instances de l’AWS CLI suivante :
Remarque : remplacez AMI-ID par l’ID de l’AMI, VOLUME-SIZE par la taille de volume souhaitée et THROUGHPUT-VALUE par la valeur de débit souhaitée (125 à 1 000 Mbits/s).aws ec2 run-instances --image-id AMI-ID --instance-type t3.micro --block-device-mappings '{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":VOLUME-SIZE,"VolumeType":"gp3","Throughput":THROUGHPUT-VALUE}}'
Pour plus d'informations, consultez la section Performances du volume gp2.
Erreurs de nom de périphérique dans le modèle de lancement
Si vous recréez un modèle de lancement avant 2024, votre modèle peut contenir des noms de périphériques NVME non valides pour les volumes de stockage d’instances. Si vos modèles de lancement contiennent des noms de périphériques NVME non valides, vous recevez un message d'erreur similaire au suivant :
« An error occurred (InvalidBlockDeviceMapping) when calling the RunInstances operation: Mappage de périphériques non valide pour les volumes de stockage d’instances. Please verify device naming convention »
Pour résoudre cette erreur, créez une nouvelle version du modèle de lancement avec des configurations de périphériques mises à jour.
Procédez comme suit :
- Pour récupérer les données de version du modèle de lancement à des fins de modification, exécutez la commande describe-launch-template-versions de l’AWS CLI suivante :
Remarque : remplacez TEMPLATE-NAME par le nom du modèle de lancement et VERSION-NUMBER par la version que vous souhaitez modifier.aws ec2 describe-launch-template-versions --launch-template-name TEMPLATE-NAME --versions '["VERSION-NUMBER"]' --query "LaunchTemplateVersions.LaunchTemplateData" > template-data.txt - Pour créer une nouvelle version du modèle de lancement avec des configurations mises à jour, exécutez la commande create-launch-template-version de l’AWS CLI suivante :
Remarque : remplacez TEMPLATE-NAME par le nom du modèle de lancement. Avant d'exécuter cette commande, assurez-vous de mettre à jour les configurations du périphérique dans le fichier template-data.txt.aws ec2 create-launch-template-version --launch-template-name TEMPLATE-NAME --launch-template-data "$(cat template-data.txt)"
- Sujets
- Compute
- Balises
- LinuxAmazon EC2
- Langue
- Français

Contenus pertinents
demandé il y a 2 ans
demandé il y a 3 ans
- Réponse acceptée
demandé il y a 7 mois
demandé il y a 3 ans