Comment définir les propriétés d'un volume racine d'une instance Amazon EC2 que j'ai créée à l'aide d'un modèle AWS CloudFormation ?

Dernière mise à jour : 22/05/2020

Je souhaite définir les propriétés du volume racine d'une instance Amazon Elastic Compute Cloud (Amazon EC2) que j'ai créée à l'aide d'un modèle AWS CloudFormation. Par exemple, je souhaite modifier la taille du volume racine ou activer le chiffrement du volume racine.

Brève description

Pour définir les propriétés du volume racine d'une instance EC2, vous devez identifier le nom du périphérique du volume racine de votre Amazon Machine Image (AMI). Ensuite, vous pouvez utiliser la propriété BlockDeviceMapping d'une ressource AWS::EC2::Instance pour définir les propriétés du volume racine.

Remarque : par défaut, les périphériques de stockage en mode bloc spécifiés dans le mappage de périphérique de stockage en mode bloc de l'AMI sont utilisés par l'instance EC2. Pour remplacer le mappage de périphérique de stockage en mode bloc d'une AMI, utilisez le mappage de périphérique de stockage en mode bloc d'une instance. Pour le volume racine, vous pouvez remplacer uniquement la taille du volume, le type de volume et le paramètre DeleteOnTermination. Une fois que l'instance est en cours d'exécution, vous pouvez modifier uniquement le paramètre DeleteOnTermination des volumes Amazon Elastic Block Store (Amazon EBS) attachés.

Remarque : si vous recevez des message d'erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Résolution

Identifier le nom du périphérique du volume racine de votre AMI

Pour trouver le nom du périphérique, effectuez les étapes suivantes dans la console Amazon EC2 ou l'AWS CLI.

À l'aide de la console Amazon EC2 :

1.    Ouvrez la console Amazon EC2.

2.    Dans la barre de navigation, sélectionnez la région AWS dans laquelle vous souhaitez lancer vos instances.

3.    Dans le volet de navigation, sélectionnez AMI.

4.    Utilisez l'option Filtre pour trouver votre AMI, puis sélectionnez votre AMI.

5.    Dans l'onglet Détails, recherchez le Nom du périphérique racine. C'est là que le nom de votre périphérique racine est répertorié.

A l'aide de la commande de CLI AWS :

Dans l'AWS CLI, exécutez la commande suivante :

aws ec2 describe-images \
    --region us-east-1 \
    --image-ids ami-1234567890AWSEXAMPLE

Remarque : remplacez us-east-1 par votre région. Remplacez ami-1234567890AWSEXAMPLE par votre AMI.

La sortie de la commande précédente renvoie le champ RootDeviceName, qui indique le nom du périphérique du volume racine.

Définir les propriétés du volume racine de votre instance EC2

Utilisez la propriété BlockDeviceMapping d'une ressource AWS::EC2::Instance pour définir les propriétés du volume racine de votre instance EC2.

Dans les exemples JSON et YAML suivants, AWS CloudFormation crée une instance EC2 avec la taille du volume racine définie sur 30 Go.

Dans les modèles JSON et YAML, la propriété DeleteOnTermination du volume racine est définie sur true. La propriété DeviceName est définie sur /dev/xvda, car l'AMI spécifiée est une AMI Amazon Linux 2. Enfin, la propriété Encrypted est définie sur true, ce qui permet le chiffrement par défaut sur le volume racine.

Important : dans votre modèle, remplacez /dev/xvda par la valeur de la propriété Nom du périphérique racine que vous avez identifiée précédemment. Ensuite, modifiez la propriété Ebs dans le modèle en fonction de vos besoins.

Modèle JSON :

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS CloudFormation Sample Template that shows how to increase the size of the root volume. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resource used if you create a stack from this template.",
  "Parameters": {
    "KeyName": {
      "Type": "AWS::EC2::KeyPair::KeyName",
      "Description": "Name of an existing EC2 KeyPair to enable SSH access to the EC2 instance."
    },
    "InstanceType": {
      "Description": "EC2 instance type",
      "Type": "String",
      "Default": "t2.micro",
      "ConstraintDescription": "Please choose a valid instance type."
    },
    "AMIID": {
      "Description": "The Latest Amazon Linux 2 AMI taken from the public AWS Systems Manager Parameter Store",
      "Type": "AWS::SSM::Parameter::Value<String>",
      "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
    }
  },
  "Resources": {
    "LinuxInstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "ImageId": {
          "Ref": "AMIID"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        },
        "KeyName": {
          "Ref": "KeyName"
        },
        "BlockDeviceMappings": [
          {
            "DeviceName": "/dev/xvda",
            "Ebs": {
              "VolumeType": "gp2",
              "VolumeSize": "30",
              "DeleteOnTermination":"false",
              "Encrypted": "true"
            }
          }
        ]
      }
    }
  }
}

Modèle YAML :

AWSTemplateFormatVersion: 2010-09-09
Description: >-
  AWS CloudFormation Sample Template that shows how to increase the size of the root volume. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resource used if you create a stack from this template.
Parameters:
  KeyName:
    Type: 'AWS::EC2::KeyPair::KeyName'
    Description: Name of an existing EC2 KeyPair to enable SSH access to the EC2 instance.
  InstanceType:
    Description: EC2 instance type
    Type: String
    Default: t2.micro
    ConstraintDescription: Please choose a valid instance type.
  AMIID:
    Description: >-
      The Latest Amazon Linux 2 AMI taken from the public Systems Manager
      Parameter Store
    Type: 'AWS::SSM::Parameter::Value<String>'
    Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Resources:
  LinuxInstance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: !Ref AMIID
      InstanceType: !Ref InstanceType
      KeyName: !Ref KeyName
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            VolumeType: gp2
            VolumeSize: '30'
            DeleteOnTermination: 'false'
            Encrypted: 'true'

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?