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