web-dev-qa-db-fra.com

Comment changer la taille EBS racine par défaut dans cloudformation? [AWS]

Étant donné qu'il y a moins de documentation et de solutions en ligne pour cloudformation, j'ai décidé de résoudre un problème courant concernant la modification de la taille par défaut des volumes EBS lancés via le modèle cloudformation

Par défaut, les instances lancées ont une taille de 8 Go et si vous vous demandez comment pouvez-vous changer cela en quelque chose selon vos préférences, vous avez atterri pour corriger la solution.

Il existe deux façons d'éviter le problème

Solution 1: créer un nouveau volume avec VolumeAttachment (manière incorrecte)

"EBS" : {
   "Type" : "AWS::EC2::Volume",
   "Properties" : {
      "Size" : "100",
      "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ] }
   }
},

"MountPoint" : {
   "Type" : "AWS::EC2::VolumeAttachment",
   "Properties" : {
      "InstanceId" : { "Ref" : "EC2Instance" },
      "VolumeId"  : { "Ref" : "EBS" },
      "Device" : "/dev/sda1"
   }
}

Ici, j'ai créé un nouveau volume et fatigué de le joindre à une instance qui n'a pas fonctionné. (Le modèle CF n'a pas pu être lancé)

Solution 2. Bloquer le mappage des périphériques (La bonne façon)

Utiliser BlockDeviceMappings est la bonne façon d'aborder

 "BlockDeviceMappings": [
          {
            "DeviceName": "/dev/xvda",
            "Ebs": {
              "VolumeType": "io1",
              "Iops": "300",
              "DeleteOnTermination": "false",
              "VolumeSize": "30"
            }
          }
        ],

Ne conservez pas le nom de l'appareil sous/dev/xvda1 sinon cela ne fonctionnera pas. Au lieu de cela, définissez la propriété "DeviceName" du mappage de périphérique de bloc sur "/ dev/xvda" si le système d'exploitation sélectionné est Amazon Linux, sinon pour Ubuntu ou CentOS, définissez-le sur "/ dev/sda1"

21
Bhargav Amin

Donc, la solution finale étant donné que vous avez plusieurs systèmes d'exploitation et que vous souhaitez augmenter la taille par défaut du volume EBS, utilisez Fn :: If fonction intrinsèque pour définir la propriété "DeviceName" du bloc mappage de l'appareil vers "/dev/xvda "si le système d'exploitation sélectionné est Amazon Linux, sinon il le définira sur" /dev/sda1 "pour l'autre OS.

L'extrait ressemblerait à ceci:

 "BlockDeviceMappings": [
          {
            "DeviceName": {
              "Fn::If": [
                "Amazon-AMI",    // condition satisfying that if Amazon is OS then use /dev/xvda or else /dev/sda1
                "/dev/xvda",
                "/dev/sda1"
              ]
            },
            "Ebs": {
              "VolumeType": "io1",
              "Iops": "300",
              "DeleteOnTermination": "false",
              "VolumeSize": "100"
            }
          }
        ]

Cela devrait permettre à votre cloudformation de fonctionner sans aucune erreur. Si vous avez encore des erreurs, veuillez vérifier votre modèle et le valider correctement

19
Bhargav Amin