...

воскресенье, 12 января 2014 г.

Автоконфигурация с помощью Puppet и AWS Cloud Formation


{
"AWSTemplateFormatVersion" : "2010-09-09",

"Description" : "Developers Stack",
"Parameters" : {
"KeyName" : {
"Description" : "Key-pair name",
"Type" : "String"
},
"SuffixName" : {
"Description" : "Suffix for all created resources",
"Type" : "String"
},
"FrontEndInstanceType" : {
"Type" : "String",
"Default" : "m1.small",
"AllowedValues" : [ "m1.small", "m1.medium", "m1.large", "m1.xlarge"],
"Description" : "EC2 instance type"
},
"BackEndInstanceType" : {
"Type" : "String",
"Default" : "m1.small",
"AllowedValues" : [ "m1.small", "m1.medium", "m1.large", "m1.xlarge"],
"Description" : "EC2 instance type"
},
"PuppetServer": {
"Description" : "Puppet Server URL",
"Type" : "String",
"Default" : "ec2-231-231-123-123.us-west-2.compute.amazonaws.com"
},
"Zone" : {
"Type" : "CommaDelimitedList",
"Description" : "The Availability Zone ",
"Default" : "us-west-2c"
},
"BuildVersion" : {
"Type" : "String",
"Description" : "Version of application build"
},
"RoleName" : {
"Type" : "String",
"Description" : "Instance IAM role",
"Default" : "WebInstance"
},
"SecurityGroup" : {
"Type" : "String",
"Description" : "Default security group for stack",
"Default" : "taws-security-group"
}
},
"Mappings" : {
"WindowsInstanceType" : {
"t1.micro" : { "Arch" : "64" },
"m1.small" : { "Arch" : "64" },
"m1.medium" : { "Arch" : "64" },
"m1.large" : { "Arch" : "64" },
"m1.xlarge" : { "Arch" : "64" }
},

"WindowsRegionMap" : {
"us-east-1" : { "AMI" : "ami-e55a7e8c" },
"us-west-2" : { "AMI" : "ami-1e53c82e" },
"us-west-1" : { "AMI" : "ami-b687b1f3" },
"eu-west-1" : { "AMI" : "ami-5f3ad728" },
"ap-southeast-1" : { "AMI" : "ami-96cd98c4" },
"ap-southeast-2" : { "AMI" : "ami-ab4a2daa" },
"ap-northeast-1" : { "AMI" : "ami-133fa329" },
"sa-east-1" : { "AMI" : "ami-bd3d9ba0" }
}
},
"Resources" : {
"FrontEnd" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : { "Ref" : "KeyName" },
"ImageId" : { "Fn::FindInMap" : [ "WindowsRegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
"InstanceType" : { "Ref" : "FrontEndInstanceType" },
"IamInstanceProfile" : { "Ref" : "RoleName" },
"SecurityGroups" : [{ "Ref" : "SecurityGroup" }],
"Tags" : [
{"Key" : "Name", "Value" : { "Fn::Join" : ["",[{"Ref" : "SuffixName"},"-DEV-FrontEnd"]]}}
],
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"<powershell>\n",
"$MsiUrl = \"http://ift.tt/1hd6V0I\"\n",
"$downloadPath = \"c:\\puppet.msi\"\n",
"$webClient = New-Object System.Net.WebClient\n",
"$webClient.DownloadFile($MsiUrl, $downloadPath)\n",
"$process = Start-Process -File $downloadPath -arg \"/qn /norestart\" -PassThru |wait-process\n",

"$PublicHostName = Invoke-RestMethod -Uri http://ift.tt/1hd6V0M -Method Get\n",
"Clear-Content 'C:\\ProgramData\\PuppetLabs\\puppet\\etc\\puppet.conf'\n",
"Add-Content 'C:\\ProgramData\\PuppetLabs\\puppet\\etc\\puppet.conf' \"[main]\", \"runinterval=300\", \"certname=$PublicHostName\", \"server=",{ "Ref" : "PuppetServer" },"\", \"environment=",{ "Ref" : "PuppetEnvironment" },"\"\n",
"Add-Content 'C:\\ProgramData\\PuppetLabs\\facter\\facts.d\\facts.bat' \"@echo off\", \"echo node_role=frontend\", \"echo app_version=",{ "Ref" : "BuildVersion" },"\"\n",
"Restart-Service pe-puppet\n",

"$MsiUrl = \"http://ift.tt/1adn9VO\"\n",
"$downloadPath = \"c:\\7zip.msi\"\n",
"$webClient = New-Object System.Net.WebClient\n",
"$webClient.DownloadFile($MsiUrl, $downloadPath)\n",
"$process = Start-Process -File $downloadPath -arg \"/qn \" -PassThru |wait-process\n",

"</powershell>\n"
]]}}
}
},
"BackEnd" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : { "Ref" : "KeyName" },
"ImageId" : { "Fn::FindInMap" : [ "WindowsRegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
"InstanceType" : { "Ref" : "BackEndInstanceType" },
"IamInstanceProfile" : { "Ref" : "RoleName" },
"SecurityGroups" : [{ "Ref" : "SecurityGroup" }],
"Tags" : [
{"Key" : "Name", "Value" : { "Fn::Join" : ["",[{"Ref" : "SuffixName"},"-DEV-BackEnd"]]}}
],
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"<powershell>\n",
"$MsiUrl = \"http://ift.tt/1hd6V0I\"\n",
"$downloadPath = \"c:\\puppet.msi\"\n",
"$webClient = New-Object System.Net.WebClient\n",
"$webClient.DownloadFile($MsiUrl, $downloadPath)\n",
"$process = Start-Process -File $downloadPath -arg \"/qn /norestart\" -PassThru |wait-process\n",

"$PublicHostName = Invoke-RestMethod -Uri http://ift.tt/1hd6V0M -Method Get\n",
"Clear-Content 'C:\\ProgramData\\PuppetLabs\\puppet\\etc\\puppet.conf'\n",
"Add-Content 'C:\\ProgramData\\PuppetLabs\\puppet\\etc\\puppet.conf' \"[main]\", \"runinterval=300\", \"certname=$PublicHostName\", \"server=",{ "Ref" : "PuppetServer" },"\", \"environment=",{ "Ref" : "PuppetEnvironment" },"\"\n",
"Add-Content 'C:\\ProgramData\\PuppetLabs\\facter\\facts.d\\facts.bat' \"@echo off\", \"echo node_role=backend\", \"echo app_version=",{ "Ref" : "BuildVersion" },"\"\n",
"Restart-Service pe-puppet\n",

"$MsiUrl = \"http://ift.tt/1adn9VO\"\n",
"$downloadPath = \"c:\\7zip.msi\"\n",
"$webClient = New-Object System.Net.WebClient\n",
"$webClient.DownloadFile($MsiUrl, $downloadPath)\n",
"$process = Start-Process -File $downloadPath -arg \"/qn \" -PassThru |wait-process\n",
"</powershell>\n"
]]}}
}
}
},
"Outputs" : {
"FrontEndPublicDnsName" : {
"Description" : "Public IP address of FrontEnd",
"Value" : { "Fn::Join" : ["",[{ "Fn::GetAtt" : [ "FrontEnd", "PublicDnsName" ] }]]}
},
"BackEndPublicDnsName" : {
"Description" : "Public IP address of BackEnd",
"Value" : { "Fn::Join" : ["",[{ "Fn::GetAtt" : [ "BackEnd", "PublicDnsName" ]}]]}
}
}
}





This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий