EBS-Laufwerke können mit AWS CloudFormation nicht auf einer Ubuntu-Box gemountet werden (UserData funktioniert nicht)

EBS-Laufwerke können mit AWS CloudFormation nicht auf einer Ubuntu-Box gemountet werden (UserData funktioniert nicht)

Ich habe eine ansonsten funktionierende CloudFormation-Vorlage, die eine AWS-Instanz mit 2 EBS-Volumes erstellt. Die Volumes sind auf dem Computer über lsblk sichtbar. Ich habe nur Probleme, sie zu formatieren und zu mounten. Es ist, als ob das UserData-Skript überhaupt nicht läuft.

Es ist eine Ubuntu 14.04-Maschine. Irgendeine Idee, was ich falsch machen könnte?

BEARBEITEN: vollständige Vorlage als Referenz hinzugefügt

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": ".",
    "Parameters": {
        "KeyName": {
            "Description": "Name of an existing EC2 KeyPair to enable SSH access to the instance",
            "Type": "AWS::EC2::KeyPair::KeyName",
            "ConstraintDescription": "must be the name of an existing EC2 KeyPair.",
        },
        "InstanceType": {
            "Description": "EC2 instance type",
            "Type": "String",
            "Default": "t2.medium",
            "AllowedValues": [
                "t2.micro",
                "t2.small",
                "t2.medium",
                "c3.large",
                "c3.xlarge",
                "c4.large",
                "c4.xlarge"
            ],
            "ConstraintDescription": "must be a valid EC2 instance type."
        },
        "VpcId": {
            "Type": "AWS::EC2::VPC::Id",
            "Description": "VpcId of your existing Virtual Private Cloud (VPC)",
        },
        "SubnetId": {
            "Type": "AWS::EC2::Subnet::Id",
            "Description": "Existing Subnet ID",
        }
    },
    "Mappings": {
        "AWSInstanceType2Arch": {
            "t2.micro": {
                "Arch": "HVM64"
            },
            "t2.small": {
                "Arch": "HVM64"
            },
            "t2.medium": {
                "Arch": "HVM64"
            },
            "c3.large": {
                "Arch": "HVM64"
            },
            "c3.xlarge": {
                "Arch": "HVM64"
            },
            "c4.large": {
                "Arch": "HVM64"
            },
            "c4.xlarge": {
                "Arch": "HVM64"
            }
        },
        "AWSRegionArch2AMI": {
            "us-west-2": {
                "HVM64": "ami-7ba1b34b"
            }
        }
    },
    "Resources": {
        "EC2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "InstanceType": {
                    "Ref": "InstanceType"
                },
                "KeyName": {
                    "Ref": "KeyName"
                },
                "SecurityGroupIds": [
                    {
                        "Ref": "MySecurityGroup"
                    }
                ],
                "SubnetId": {
                    "Ref": "SubnetId"
                },
                "ImageId": {
                    "Fn::FindInMap": [
                        "AWSRegionArch2AMI",
                        {
                            "Ref": "AWS::Region"
                        },
                        {
                            "Fn::FindInMap": [
                                "AWSInstanceType2Arch",
                                {
                                    "Ref": "InstanceType"
                                },
                                "Arch"
                            ]
                        }
                    ]
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "grafana"
                    }
                ],
                "UserData": {
                    "Fn::Base64": {
                        "Fn::Join": ["",
                            [
                            "sudo mkfs -t ext4 /dev/xvdf\n",
                            "sudo mkfs -t ext4 /dev/xvdg\n",
                            "sudo mkdir /mnt/influx /mnt/db\n",
                            "sudo mount /dev/xvdf /mnt/influx\n",
                            "sudo mount /dev/xvdg /mnt/db\n",
                            "sudo echo \"/dev/xvdf /mnt/influx ext4 defaults,nofail 0 2\" >> /etc/fstab\n",
                            "sudo echo \"/dev/xvdg /mnt/db ext4 defaults,nofail 0 2\" >> /etc/fstab\n",
                            "sudo wget http://influxdb.s3.amazonaws.com/influxdb_0.9.4.1_amd64.deb\n",
                            "sudo dpkg -i influxdb_0.9.4.1_amd64.deb\n",
                            "sudo /etc/init.d/influxdb start\n",
                            "sudo wget https://grafanarel.s3.amazonaws.com/builds/grafana_2.1.3_amd64.deb\n",
                            ]
                        ]
                    }
                }
            }
        },
        "MySecurityGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "VpcId": {
                    "Ref": "VpcId"
                },
                "GroupDescription": "Security group instace",
                "SecurityGroupIngress": [
                    {
                        "IpProtocol": "tcp",
                        "FromPort": "22",
                        "ToPort": "22",
                        "CidrIp": "10.0.0.0/16"
                    }
                ]
            }
        },
        "EBSVolume1": {
            "Type": "AWS::EC2::Volume",
            "Properties": {
                "Size": 50,
                "AvailabilityZone": {
                    "Fn::GetAtt": [
                        "EC2Instance",
                        "AvailabilityZone"
                    ]
                }
            }
        },
        "EBSVolume2": {
            "Type": "AWS::EC2::Volume",
            "Properties": {
                "Size": 200,
                "AvailabilityZone": {
                    "Fn::GetAtt": [
                        "EC2Instance",
                        "AvailabilityZone"
                    ]
                }
            }
        },
        "EBSVolumeMount1": {
            "Type": "AWS::EC2::VolumeAttachment",
            "Properties": {
                "InstanceId": {
                    "Ref": "EC2Instance"
                },
                "VolumeId": {
                    "Ref": "EBSVolume1"
                },
                "Device": "/dev/sdf"
            }
        },
        "EBSVolumeMount2": {
            "Type": "AWS::EC2::VolumeAttachment",
            "Properties": {
                "InstanceId": {
                    "Ref": "EC2Instance"
                },
                "VolumeId": {
                    "Ref": "EBSVolume2"
                },
                "Device": "/dev/sdg"
            }
        }
    },
    "Outputs": {
        "InstanceId": {
            "Description": "InstanceId of the newly created EC2 instance",
            "Value": {
                "Ref": "EC2Instance"
            }
        }
    }
}

Antwort1

Hier ist die Antwort – das EBS muss vollständig angeschlossen sein.

"UserData": {
                    "Fn::Base64": {
                        "Fn::Join": ["",
                            [
                                "#!/bin/bash\n",
                                "## Wait for EBS mounts to become available\n",
                                "while [ ! -e /dev/xvdf ]; do echo waiting for /dev/xvdf to attach; sleep 10; done\n",
                                "while [ ! -e /dev/xvdg ]; do echo waiting for /dev/xvdg to attach; sleep 10; done\n",
                                "sudo mkfs -t ext4 /dev/xvdf\n",
                                "sudo mkfs -t ext4 /dev/xvdg\n",
                                "sudo mkdir /mnt/influx /mnt/db\n",

verwandte Informationen