AWS CloudFormation을 사용하여 EBS 드라이브를 Ubuntu 상자에 탑재할 수 없음(UserData가 작동하지 않음)

AWS CloudFormation을 사용하여 EBS 드라이브를 Ubuntu 상자에 탑재할 수 없음(UserData가 작동하지 않음)

AWS 인스턴스 2 EBS 볼륨을 생성하는 다른 방법으로 작동하는 CloudFormation 템플릿이 있습니다. 볼륨은 lsblk를 통해 머신에 표시됩니다. 포맷하고 마운트하는 데 문제가 있습니다. 이는 UserData 스크립트가 전혀 실행되지 않는 것과 같습니다.

우분투 14.04 머신입니다. 내가 뭘 잘못하고 있는지 아시나요?

편집: 참조용으로 전체 템플릿을 추가했습니다.

{
    "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"
            }
        }
    }
}

답변1

대답은 다음과 같습니다. EBS를 완전히 연결해야 합니다.

"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",

관련 정보