Skip to content

Instantly share code, notes, and snippets.

Created October 26, 2015 22:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/f3495f8407c25c09b1e1 to your computer and use it in GitHub Desktop.
Save anonymous/f3495f8407c25c09b1e1 to your computer and use it in GitHub Desktop.
LizardFS Ubuntu CloudFormation template
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "LizardFS CloudFormation template.",
"Parameters" : {
"DataNodeCount" : {
"Description" : "Number of data nodes to provision in cluster (2-18)",
"Type" : "Number",
"Default" : "2",
"MinValue" : "2",
"MaxValue" : "18",
"ConstraintDescription" : "must be between 2 and 18."
},
"KeyPair": {
"Description" : "Name of an existing EC2 KeyPair: https://console.aws.amazon.com/ec2/v2/home#KeyPairs:",
"Type": "String",
"MinLength": "1",
"MaxLength": "255",
"AllowedPattern" : "[\\x20-\\x7E]*",
"ConstraintDescription" : "can contain only ASCII characters."
},
"ClusterAccess" : {
"Description" : "CIDR IP range allowed to login to the cluster instances",
"Type": "String",
"MinLength": "9",
"MaxLength": "18",
"Default": "0.0.0.0/0",
"AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})",
"ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x."
},
"ClusterInstanceType" : {
"Description" : "AMI instance type: https://aws.amazon.com/ec2/instance-types/",
"Type" : "String",
"Default" : "m1.medium"
}
},
"Mappings" : {
"LinuxRegionMap" : {
"us-east-1" : { "AMI" : "ami-add38ec8" },
"us-west-2" : { "AMI" : "ami-f850b3cb" },
"us-west-1" : { "AMI" : "ami-8bd211cf" },
"eu-west-1" : { "AMI" : "ami-9f5966e8" },
"eu-central-1" : { "AMI" : "ami-0ad2de17" },
"ap-southeast-1" : { "AMI" : "ami-88c0d3da" },
"ap-southeast-2" : { "AMI" : "ami-09a0ea33" },
"ap-northeast-1" : { "AMI" : "ami-d40b66d4" },
"sa-east-1" : { "AMI" : "ami-bb1786a6" }
}
},
"Resources" : {
"ClusterSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Cluster Security Group",
"Tags" : [{ "Key" : "Name", "Value" : "Cluster Security Group" }],
"SecurityGroupIngress" : [
{
"IpProtocol" : "tcp",
"FromPort" : "22",
"ToPort" : "22",
"CidrIp" : { "Ref" : "ClusterAccess" }
}
]
}
},
"UpdateSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroupIngress",
"Properties" : {
"GroupName" : { "Ref" : "ClusterSecurityGroup" },
"SourceSecurityGroupName" : { "Ref" : "ClusterSecurityGroup" },
"IpProtocol" : "tcp",
"FromPort" : "0",
"ToPort" : "65535"
}
},
"Master1" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"InstanceType" : { "Ref" : "ClusterInstanceType" },
"SecurityGroups" : [ { "Ref" : "ClusterSecurityGroup" } ],
"KeyName" : { "Ref" : "KeyPair" },
"ImageId" : { "Fn::FindInMap" : [ "LinuxRegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
"Tags" : [{ "Key" : "Name", "Value" : "LizardFS Server" }],
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#!/bin/bash\n",
"sudo su -\n",
"apt-get update -y && apt-get install -y lizardfs-master lizardfs-chunkserver\n",
"echo 'PERSONALITY = master' >> /etc/lizardfs/mfsmaster.cfg\n",
"echo 'WORKING_USER = root' >> /etc/lizardfs/mfsmaster.cfg\n",
"echo 'WORKING_GROUP = root' >> /etc/lizardfs/mfsmaster.cfg\n",
"echo `curl -s http://169.254.169.254/latest/meta-data/local-ipv4 | cut -d '.' -f 1-2`'.0.0/16 / rw,alldirs,maproot=0' >> /etc/lizardfs/mfsexports.cfg\n",
"mv /var/lib/lizardfs/metadata.mfs.empty /var/lib/lizardfs/metadata.mfs\n",
"echo 'LIZARDFSMASTER_ENABLE=true' > /etc/default/lizardfs-master\n",
"echo 'DAEMON_OPTS=\"\"' >> /etc/default/lizardfs-master\n",
"/etc/init.d/lizardfs-master start\n",
"echo 'WORKING_USER = root' >> /etc/lizardfs/mfschunkserver.cfg\n",
"echo 'WORKING_GROUP = root' >> /etc/lizardfs/mfschunkserver.cfg\n",
"echo `curl -s http://169.254.169.254/latest/meta-data/local-ipv4`' mfsmaster' >> /etc/hosts\n",
"mkdir -p /mnt/lfschunk\n",
"echo '/mnt/lfschunk' >> /etc/lizardfs/mfshdd.cfg\n",
"echo 'LIZARDFSCHUNKSERVER_ENABLE=true' > /etc/default/lizardfs-chunkserver\n",
"echo 'DAEMON_OPTS=\"\"' >> /etc/default/lizardfs-chunkserver\n",
"/etc/init.d/lizardfs-chunkserver start"
]]}}
}
},
"Master2" : {
"Type" : "AWS::EC2::Instance",
"DependsOn" : "Master1",
"Properties" : {
"InstanceType" : { "Ref" : "ClusterInstanceType" },
"SecurityGroups" : [ { "Ref" : "ClusterSecurityGroup" } ],
"KeyName" : { "Ref" : "KeyPair" },
"ImageId" : { "Fn::FindInMap" : [ "LinuxRegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
"Tags" : [{ "Key" : "Name", "Value" : "LizardFS Server" }],
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#!/bin/bash\n",
"sudo su -\n",
"apt-get update -y && apt-get install -y lizardfs-master lizardfs-chunkserver\n",
"echo 'PERSONALITY = shadow' >> /etc/lizardfs/mfsmaster.cfg\n",
"echo 'WORKING_USER = root' >> /etc/lizardfs/mfsmaster.cfg\n",
"echo 'WORKING_GROUP = root' >> /etc/lizardfs/mfsmaster.cfg\n",
"echo `curl -s http://169.254.169.254/latest/meta-data/local-ipv4 | cut -d '.' -f 1-2`'.0.0/16 / rw,alldirs,maproot=0' >> /etc/lizardfs/mfsexports.cfg\n",
"mv /var/lib/lizardfs/metadata.mfs.empty /var/lib/lizardfs/metadata.mfs\n",
"echo 'LIZARDFSMASTER_ENABLE=true' > /etc/default/lizardfs-master\n",
"echo 'DAEMON_OPTS=\"\"' >> /etc/default/lizardfs-master\n",
"/etc/init.d/lizardfs-master start\n",
"echo 'WORKING_USER = root' >> /etc/lizardfs/mfschunkserver.cfg\n",
"echo 'WORKING_GROUP = root' >> /etc/lizardfs/mfschunkserver.cfg\n",
"echo `curl -s http://169.254.169.254/latest/meta-data/local-ipv4`' mfsmaster' >> /etc/hosts\n",
"mkdir -p /mnt/lfschunk\n",
"echo '/mnt/lfschunk' >> /etc/lizardfs/mfshdd.cfg\n",
"echo 'LIZARDFSCHUNKSERVER_ENABLE=true' > /etc/default/lizardfs-chunkserver\n",
"echo 'DAEMON_OPTS=\"\"' >> /etc/default/lizardfs-chunkserver\n",
"/etc/init.d/lizardfs-chunkserver start"
]]}}
}
},
"DataNode" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"DependsOn" : "Master2",
"Properties" : {
"InstanceType" : { "Ref" : "ClusterInstanceType" },
"SecurityGroups" : [ { "Ref" : "ClusterSecurityGroup" } ],
"KeyName" : { "Ref" : "KeyPair" },
"ImageId" : { "Fn::FindInMap" : [ "LinuxRegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#!/bin/bash\n",
"sudo su -\n",
"apt-get update -y && apt-get install -y lizardfs-client\n",
"echo '",
{ "Fn::GetAtt" : [ "Master1" , "PrivateIp" ] },
" mfsmaster' >> /etc/hosts\n",
"mkdir -p /mnt/lizardfs\n",
"mfsmount /mnt/lizardfs"
]]}}
}
},
"ClusterInit" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"AvailabilityZones" : { "Fn::GetAZs" : "" },
"LaunchConfigurationName" : { "Ref" : "DataNode" },
"MinSize" : "2",
"MaxSize" : "18",
"DesiredCapacity" : { "Ref" : "DataNodeCount" },
"Tags" : [{ "Key" : "Name", "Value" : "LizardFS Node", "PropagateAtLaunch" : "true" }]
}
}
},
"Outputs" : {
"Info" : {
"Description" : "Info",
"Value" : "Any file created on the 'LizardFS Node' instances in /mnt/lizardfs will be synced to all LizardFS Node instances."
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment