-
-
Save JosephMaxwell/107333cc92a4fe95e6bc2ef0efb6ff3a to your computer and use it in GitHub Desktop.
{ | |
"AWSTemplateFormatVersion": "2010-09-09", | |
"Description": "Launches a Jenkins server.", | |
"Parameters": { | |
"InstanceType": { | |
"Description": "EC2 instance type", | |
"Type": "String", | |
"Default": "t2.small", | |
"AllowedValues": [ | |
"t1.micro", | |
"t2.small", | |
"m1.small", | |
"m1.medium", | |
"m1.large", | |
"m1.xlarge", | |
"m2.xlarge", | |
"m2.2xlarge", | |
"m2.4xlarge", | |
"m3.xlarge", | |
"m3.2xlarge", | |
"c1.medium", | |
"c1.xlarge", | |
"cc1.4xlarge", | |
"cc2.8xlarge", | |
"cg1.4xlarge" | |
], | |
"ConstraintDescription": "must be a valid EC2 instance type." | |
}, | |
"SshKey": { | |
"Description": "Name of an existing EC2 keypair to enable SSH access to the instances", | |
"Default": "your-ssh-key", | |
"Type": "AWS::EC2::KeyPair::KeyName" | |
}, | |
"IPWhitelist": { | |
"Description": "IP Address to Whitelist (your IP address followed by /32)", | |
"MinLength": "9", | |
"MaxLength": "18", | |
"Type": "String", | |
"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." | |
}, | |
"EmailAddress": { | |
"Description": "What email address will receive the default Jenkins password", | |
"Type": "String", | |
"Default": "" | |
}, | |
"DnsPrefix": { | |
"Description": "Prefix for Jenkins' DNS record (<prefix>.<zone>)", | |
"Type": "String", | |
"Default": "builds" | |
}, | |
"DnsZone": { | |
"Description": "Route53-hosted zone to use for the DNS record (<prefix>.<zone>)", | |
"Type": "String", | |
"Default": "your-website.com" | |
}, | |
"S3Bucket": { | |
"Description": "Existing S3 bucket to use for Jenkins backups and restores", | |
"Type": "String", | |
"Default": "your-s3-bucket" | |
}, | |
"S3Prefix": { | |
"Description": "[Optional] Key prefix to use for Jenkins backups", | |
"Type": "String", | |
"Default": "" | |
}, | |
"Subnets": { | |
"Description": "List of VPC subnet IDs for the cluster", | |
"Type": "List<AWS::EC2::Subnet::Id>" | |
}, | |
"VpcId": { | |
"Description": "VPC associated with the provided subnets", | |
"Type": "AWS::EC2::VPC::Id" | |
}, | |
"AdminSecurityGroup": { | |
"Description": "Existing security group that should be granted administrative access to Jenkins (e.g., 'sg-123456')", | |
"Default": "Primary", | |
"Type": "AWS::EC2::SecurityGroup::Id" | |
} | |
}, | |
"Mappings": { | |
"RegionMap": { | |
"us-east-1": { | |
"AMI": "ami-6869aa05" | |
}, | |
"us-west-1": { | |
"AMI": "ami-7172b611" | |
}, | |
"us-west-2": { | |
"AMI": "ami-31490d51" | |
}, | |
"eu-west-1": { | |
"AMI": "ami-f9dd458a" | |
}, | |
"ap-southeast-2": { | |
"AMI": "ami-10918173" | |
} | |
} | |
}, | |
"Resources": { | |
"CloudFormationLogs": { | |
"Type": "AWS::Logs::LogGroup", | |
"Properties": { | |
"RetentionInDays": 7 | |
} | |
}, | |
"SwiftOtterJenkins": { | |
"Type": "AWS::IAM::User", | |
"Properties": { | |
"Policies": [ | |
{ | |
"PolicyName": "S3Access", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": "s3:*", | |
"Resource": { | |
"Fn::Join": [ | |
"", | |
[ | |
"arn:aws:s3:::", | |
{ | |
"Ref": "S3Bucket" | |
}, | |
"/*" | |
] | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"PolicyName": "IAMAccess", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"NotAction": "iam:*", | |
"Resource": "*" | |
} | |
] | |
} | |
}, | |
{ | |
"PolicyName": "EC2Access", | |
"PolicyDocument": { | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": "ec2:*", | |
"Resource": "*" | |
} | |
] | |
} | |
} | |
] | |
} | |
}, | |
"BuildRole": { | |
"Type": "AWS::IAM::Role", | |
"Properties": { | |
"AssumeRolePolicyDocument": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Principal": { | |
"Service": [ | |
"ec2.amazonaws.com" | |
] | |
}, | |
"Action": [ | |
"sts:AssumeRole" | |
] | |
} | |
] | |
}, | |
"Policies": [ | |
{ | |
"PolicyName": "root", | |
"PolicyDocument": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Effect": "Allow", | |
"Action": "*", | |
"Resource": "*" | |
} | |
] | |
} | |
} | |
] | |
} | |
}, | |
"RolePolicies": { | |
"Type": "AWS::IAM::Policy", | |
"Properties": { | |
"PolicyName": "root", | |
"PolicyDocument": { | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Action": "ec2:*", | |
"Effect": "Allow", | |
"Resource": "*" | |
}, | |
{ | |
"Effect": "Allow", | |
"Action": "elasticloadbalancing:*", | |
"Resource": "*" | |
}, | |
{ | |
"Effect": "Allow", | |
"Action": "cloudwatch:*", | |
"Resource": "*" | |
}, | |
{ | |
"Effect": "Allow", | |
"Action": "autoscaling:*", | |
"Resource": "*" | |
}, | |
{ | |
"Effect": "Allow", | |
"Action": "s3:*", | |
"Resource": "*" | |
}, | |
{ | |
"Effect": "Allow", | |
"Action": [ | |
"iam:PassRole", | |
"iam:ListInstanceProfiles", | |
"ec2:*" | |
], | |
"Resource": "*" | |
} | |
] | |
}, | |
"Roles": [ | |
{ | |
"Ref": "BuildRole" | |
} | |
] | |
} | |
}, | |
"BuildInstanceProfile": { | |
"Type": "AWS::IAM::InstanceProfile", | |
"Properties": { | |
"Path": "/", | |
"Roles": [ | |
{ | |
"Ref": "BuildRole" | |
} | |
] | |
} | |
}, | |
"HostKeys": { | |
"Type": "AWS::IAM::AccessKey", | |
"Properties": { | |
"UserName": { | |
"Ref": "SwiftOtterJenkins" | |
} | |
} | |
}, | |
"ServerGroup": { | |
"Type": "AWS::AutoScaling::AutoScalingGroup", | |
"Properties": { | |
"AvailabilityZones": { | |
"Fn::GetAZs": "" | |
}, | |
"LaunchConfigurationName": { | |
"Ref": "LaunchConfig" | |
}, | |
"MinSize": "1", | |
"MaxSize": "1", | |
"DesiredCapacity": "1", | |
"LoadBalancerNames": [ | |
{ | |
"Ref": "ElasticLoadBalancer" | |
} | |
] | |
} | |
}, | |
"LaunchConfig": { | |
"Type": "AWS::AutoScaling::LaunchConfiguration", | |
"Metadata": { | |
"AWS::CloudFormation::Init": { | |
"configSets": { | |
"install": [ | |
"installConfig", | |
"installApp", | |
"installLogs" | |
] | |
}, | |
"installConfig": { | |
"files": { | |
"/etc/cfn/cfn-hup.conf": { | |
"content": { | |
"Fn::Join": [ | |
"", | |
[ | |
"[main]\n", | |
"stack=", | |
{ | |
"Ref": "AWS::StackId" | |
}, | |
"\n", | |
"region=", | |
{ | |
"Ref": "AWS::Region" | |
}, | |
"\n" | |
] | |
] | |
}, | |
"mode": "000400", | |
"owner": "root", | |
"group": "root" | |
}, | |
"/etc/cfn/hooks.d/cfn-auto-reloader.conf": { | |
"content": { | |
"Fn::Join": [ | |
"", | |
[ | |
"[cfn-auto-reloader-hook]\n", | |
"triggers=post.update\n", | |
"path=Resources.WebServerInstance.Metadata.AWS::CloudFormation::Init\n", | |
"action=/opt/aws/bin/cfn-init -v ", | |
" --stack ", | |
{ | |
"Ref": "AWS::StackName" | |
}, | |
" --resource WebServerInstance ", | |
" --configsets install_all ", | |
" --region ", | |
{ | |
"Ref": "AWS::Region" | |
}, | |
"\n", | |
"runas=root\n" | |
] | |
] | |
} | |
} | |
}, | |
"services": { | |
"sysvinit": { | |
"cfn-hup": { | |
"enabled": "true", | |
"ensureRunning": "true", | |
"files": [ | |
"/etc/cfn/cfn-hup.conf", | |
"/etc/cfn/hooks.d/cfn-auto-reloader.conf" | |
] | |
} | |
} | |
} | |
}, | |
"installLogs": { | |
"packages": { | |
"yum": { | |
"awslogsd": [] | |
} | |
}, | |
"commands": { | |
"01_create_state_directory": { | |
"command": "mkdir -p /var/awslogs/state" | |
} | |
}, | |
"services": { | |
"sysvinit": { | |
"awslogs": { | |
"enabled": "true", | |
"ensureRunning": "true", | |
"files": [ | |
"/etc/awslogs/awslogs.conf" | |
] | |
} | |
} | |
}, | |
"files": { | |
"/etc/awslogs/awslogs.conf": { | |
"content": { | |
"Fn::Join": [ | |
"", | |
[ | |
"[general]\n", | |
"state_file= /var/awslogs/state/agent-state\n", | |
"[/var/log/cloud-init.log]\n", | |
"file = /var/log/cloud-init.log\n", | |
"log_group_name = ", | |
{ | |
"Ref": "CloudFormationLogs" | |
}, | |
"\n", | |
"log_stream_name = {instance_id}/cloud-init.log\n", | |
"datetime_format = \n", | |
"[/var/log/cloud-init-output.log]\n", | |
"file = /var/log/cloud-init-output.log\n", | |
"log_group_name = ", | |
{ | |
"Ref": "CloudFormationLogs" | |
}, | |
"\n", | |
"log_stream_name = {instance_id}/cloud-init-output.log\n", | |
"datetime_format = \n", | |
"[/var/log/cfn-init.log]\n", | |
"file = /var/log/cfn-init.log\n", | |
"log_group_name = ", | |
{ | |
"Ref": "CloudFormationLogs" | |
}, | |
"\n", | |
"log_stream_name = {instance_id}/cfn-init.log\n", | |
"datetime_format = \n", | |
"[/var/log/cfn-hup.log]\n", | |
"file = /var/log/cfn-hup.log\n", | |
"log_group_name = ", | |
{ | |
"Ref": "CloudFormationLogs" | |
}, | |
"\n", | |
"log_stream_name = {instance_id}/cfn-hup.log\n", | |
"datetime_format = \n", | |
"[/var/log/cfn-wire.log]\n", | |
"file = /var/log/cfn-wire.log\n", | |
"log_group_name = ", | |
{ | |
"Ref": "CloudFormationLogs" | |
}, | |
"\n", | |
"log_stream_name = {instance_id}/cfn-wire.log\n", | |
"datetime_format = \n", | |
"[/var/log/httpd]\n", | |
"file = /var/log/httpd/*\n", | |
"log_group_name = ", | |
{ | |
"Ref": "CloudFormationLogs" | |
}, | |
"\n", | |
"log_stream_name = {instance_id}/httpd\n", | |
"datetime_format = %d/%b/%Y:%H:%M:%S\n" | |
] | |
] | |
}, | |
"mode": "000444", | |
"owner": "root", | |
"group": "root" | |
}, | |
"/etc/awslogs/awscli.conf": { | |
"content": { | |
"Fn::Join": [ | |
"", | |
[ | |
"[plugins]\n", | |
"cwlogs = cwlogs\n", | |
"[default]\n", | |
"region = ", | |
{ | |
"Ref": "AWS::Region" | |
}, | |
"\n" | |
] | |
] | |
}, | |
"mode": "000444", | |
"owner": "root", | |
"group": "root" | |
} | |
} | |
}, | |
"installApp": { | |
"packages": { | |
"python": { | |
"awscli": [] | |
}, | |
"yum": { | |
"git-all": [] | |
} | |
}, | |
"files": { | |
"/etc/aws.conf": { | |
"content": { | |
"Fn::Join": [ | |
"\n", | |
[ | |
"[default]", | |
"aws_access_key_id={{access_key}}", | |
"aws_secret_access_key={{secret_key}}" | |
] | |
] | |
}, | |
"context": { | |
"access_key": { | |
"Ref": "HostKeys" | |
}, | |
"secret_key": { | |
"Fn::GetAtt": [ | |
"HostKeys", | |
"SecretAccessKey" | |
] | |
} | |
}, | |
"mode": "000700", | |
"owner": "root", | |
"group": "root" | |
}, | |
"/usr/local/bin/jenkins-restore": { | |
"content": { | |
"Fn::Join": [ | |
"\n", | |
[ | |
"#!/bin/bash -e", | |
"", | |
"USAGE=\"Usage: $0 S3_TARGET JENKINS_HOME\\n", | |
"\\n", | |
"Example:\\n", | |
"$0 s3://mybucket/jenkins/jenkins-201405011901.tar.gz /var/lib/jenkins\\n", | |
"\\n", | |
"If S3_TARGET is a directory, restore from the newest file. Make sure to include the trailing slash:\\n", | |
"$0 s3://mybucket/jenkins/ /var/lib/jenkins\"", | |
"", | |
"S3_TARGET=$1", | |
"JENKINS_HOME=$2", | |
"if [[ -z \"`echo $S3_TARGET|grep '^s3://'`\" ]]; then", | |
" echo -e $USAGE", | |
" exit 1", | |
"fi", | |
"", | |
"if [[ \"$S3_TARGET\" == */ ]]; then", | |
" S3_TARGET=$S3_TARGET`aws s3 ls $S3_TARGET|tail -1|awk '{print $NF}'`", | |
"fi", | |
"", | |
"LOCAL_BACKUP=/tmp/`basename $S3_TARGET`", | |
"aws s3 cp $S3_TARGET $LOCAL_BACKUP", | |
"", | |
"rm -rf $JENKINS_HOME", | |
"#if [[ -d \"$JENKINS_HOME\" ]]; then", | |
"# read -p \"Delete existing $JENKINS_HOME? (y/n) \" -n 1 -r", | |
"# echo", | |
"# if [[ $REPLY =~ ^[Yy]$ ]]; then", | |
"# rm -rf $JENKINS_HOME", | |
"# else", | |
"# echo \"Bailing out\"", | |
"# exit 1", | |
"# fi", | |
"#fi", | |
"", | |
"mkdir -p $JENKINS_HOME", | |
"tar zxf $LOCAL_BACKUP -C $JENKINS_HOME", | |
"rm -f $LOCAL_BACKUP" | |
] | |
] | |
}, | |
"mode": "000755", | |
"owner": "root", | |
"group": "root" | |
}, | |
"/usr/local/bin/jenkins-backup": { | |
"content": { | |
"Fn::Join": [ | |
"\n", | |
[ | |
"#!/bin/bash -e", | |
"", | |
"USAGE=\"Usage: $0 JENKINS_HOME S3_TARGET\\n", | |
"\\n", | |
"Examples:\\n", | |
"$0 /var/lib/jenkins s3://mybucket/jenkins/jenkins-201405011901.tar.gz\"", | |
"", | |
"JENKINS_HOME=$1", | |
"S3_TARGET=$2", | |
"if [[ -z \"`echo $S3_TARGET|grep '^s3://'`\" || ! -d \"$JENKINS_HOME\" ]]; then", | |
" echo -e $USAGE", | |
" exit 1", | |
"fi", | |
"", | |
"LOCAL_BACKUP=/tmp/`basename $S3_TARGET`", | |
"", | |
"tar -C $JENKINS_HOME -zcf $LOCAL_BACKUP .\\", | |
" --exclude \"config-history/\" \\", | |
" --exclude \"config-history/*\" \\", | |
" --exclude \"jobs/*/workspace*\" \\", | |
" --exclude \"jobs/*/builds/*/archive\" \\", | |
" --exclude \"plugins/*/*\" \\", | |
" --exclude \"plugins/*.bak\" \\", | |
" --exclude \"war\" \\", | |
" --exclude \"cache\"", | |
"", | |
"aws s3 cp $LOCAL_BACKUP $S3_TARGET", | |
"rm -f $LOCAL_BACKUP" | |
] | |
] | |
}, | |
"mode": "000755", | |
"owner": "root", | |
"group": "root" | |
}, | |
"/etc/cron.daily/jenkins": { | |
"content": { | |
"Fn::Join": [ | |
"\n", | |
[ | |
"#!/bin/bash\n", | |
"AWS_CONFIG_FILE=/etc/aws.conf\n", | |
"PATH=/bin:/usr/bin::/usr/local/bin\n", | |
"source /usr/local/bin/jenkins-backup /var/lib/jenkins s3://{{s3_bucket}}/{{s3_prefix}}jenkins-`date +\\%Y\\%m\\%d\\%H\\%M.tar.gz` >> ~/jenkins.cron.log 2>&1\n", | |
"sleep 60 && /opt/aws/bin/ec2-terminate-instances $(curl -s http://169.254.169.254/latest/meta-data/instance-id)" | |
] | |
] | |
}, | |
"context": { | |
"s3_bucket": { | |
"Ref": "S3Bucket" | |
}, | |
"s3_prefix": { | |
"Ref": "S3Prefix" | |
} | |
}, | |
"mode": "000755", | |
"owner": "root", | |
"group": "root" | |
} | |
} | |
} | |
} | |
}, | |
"Properties": { | |
"KeyName": { | |
"Ref": "SshKey" | |
}, | |
"IamInstanceProfile": { | |
"Ref": "BuildInstanceProfile" | |
}, | |
"ImageId": { | |
"Fn::FindInMap": [ | |
"RegionMap", | |
{ | |
"Ref": "AWS::Region" | |
}, | |
"AMI" | |
] | |
}, | |
"SecurityGroups": [ | |
{ | |
"Ref": "ServerSecurityGroup" | |
}, | |
{ | |
"Ref": "AdminSecurityGroup" | |
} | |
], | |
"InstanceType": { | |
"Ref": "InstanceType" | |
}, | |
"UserData": { | |
"Fn::Base64": { | |
"Fn::Join": [ | |
"", | |
[ | |
"#!/bin/bash -xe\n", | |
"# Helper function\n", | |
"function error_exit\n", | |
"{\n", | |
" cfn-signal -e 1 -r \"$1\" '", | |
{ | |
"Ref": "WaitHandle" | |
}, | |
"'\n", | |
" exit 1\n", | |
"}\n", | |
"/opt/aws/bin/cfn-init --stack ", | |
{ | |
"Ref": "AWS::StackName" | |
}, | |
" --resource LaunchConfig", | |
" --configsets install", | |
" --access-key ", | |
{ | |
"Ref": "HostKeys" | |
}, | |
" --secret-key ", | |
{ | |
"Fn::GetAtt": [ | |
"HostKeys", | |
"SecretAccessKey" | |
] | |
}, | |
" --region ", | |
{ | |
"Ref": "AWS::Region" | |
}, | |
" || error_exit 'Failed to run cfn-init'\n", | |
"# Post-cfn work\n", | |
"# Updating to Java 8\n", | |
"yum install -y java-1.8.0-openjdk.x86_64 || true \n", | |
"sudo /usr/sbin/alternatives --set java /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java || true\n", | |
"sudo /usr/sbin/alternatives --set javac /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/javac || true \n", | |
"yum remove java-1.7 || true \n", | |
"sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo\n", | |
"sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key\n", | |
"yum install -y jenkins\n", | |
"sudo mkdir -p /var/lib/jenkins\n", | |
"sudo chown -R jenkins:jenkins /var/lib/jenkins\n", | |
"# Handle case where cron doesn't detect the new /etc/cron.d file\n", | |
"#service cron restart\n", | |
"# Attempt to restore from backup\n", | |
"export AWS_CONFIG_FILE=/etc/aws.conf\n", | |
"sudo /usr/local/bin/jenkins-restore s3://", | |
{ | |
"Ref": "S3Bucket" | |
}, | |
"/", | |
{ | |
"Ref": "S3Prefix" | |
}, | |
" /var/lib/jenkins || true # ignore errors\n", | |
"sudo service jenkins start\n", | |
"sudo chown -R jenkins:jenkins /var/lib/jenkins\n", | |
"sudo chmod -R 755 /var/lib/jenkins\n", | |
"# Start Jenkins\n", | |
"sudo service jenkins restart\n", | |
"sudo chkconfig jenkins on\n", | |
"sleep 400\n", | |
"printf \"Subject: Your Jenkins Password\n\n", | |
"$(cat /var/lib/jenkins/secrets/initialAdminPassword)\n", | |
"CHANGE THIS RIGHT AWAY AT: ", | |
"http://", | |
{ | |
"Ref": "DnsRecord" | |
}, | |
"\" | sendmail -v ", | |
{ | |
"Ref": "EmailAddress" | |
}, | |
"\n", | |
"# All is well, signal success\n", | |
"./opt/aws/bin/cfn-signal --exit-code 0 --reason \"Stack setup complete\" '", | |
{ | |
"Ref": "WaitHandle" | |
}, | |
"'\n", | |
"#EOF" | |
] | |
] | |
} | |
} | |
} | |
}, | |
"LbSecurityGroup": { | |
"Type": "AWS::EC2::SecurityGroup", | |
"Properties": { | |
"GroupDescription": "Jenkins LBs", | |
"VpcId": { | |
"Ref": "VpcId" | |
}, | |
"SecurityGroupIngress": [ | |
{ | |
"IpProtocol": "tcp", | |
"FromPort": "80", | |
"ToPort": "80", | |
"CidrIp": "0.0.0.0/0" | |
} | |
] | |
} | |
}, | |
"ServerSecurityGroup": { | |
"Type": "AWS::EC2::SecurityGroup", | |
"Properties": { | |
"GroupDescription": "Jenkins servers", | |
"VpcId": { | |
"Ref": "VpcId" | |
}, | |
"SecurityGroupIngress": [ | |
{ | |
"IpProtocol": "tcp", | |
"FromPort": "8080", | |
"ToPort": "8080", | |
"CidrIp": "0.0.0.0/0" | |
}, | |
{ | |
"IpProtocol": "tcp", | |
"FromPort": "22", | |
"ToPort": "22", | |
"CidrIp": {"Ref" : "IPWhitelist"} | |
} | |
] | |
} | |
}, | |
"ElasticLoadBalancer": { | |
"Type": "AWS::ElasticLoadBalancing::LoadBalancer", | |
"Properties": { | |
"SecurityGroups": [ | |
{ | |
"Ref": "LbSecurityGroup" | |
}, | |
{ | |
"Ref": "AdminSecurityGroup" | |
} | |
], | |
"Subnets": { | |
"Ref": "Subnets" | |
}, | |
"Listeners": [ | |
{ | |
"LoadBalancerPort": "80", | |
"InstancePort": "8080", | |
"Protocol": "HTTP" | |
} | |
], | |
"HealthCheck": { | |
"Target": "TCP:8080", | |
"HealthyThreshold": "3", | |
"UnhealthyThreshold": "5", | |
"Interval": "30", | |
"Timeout": "5" | |
} | |
} | |
}, | |
"DnsRecord": { | |
"Type": "AWS::Route53::RecordSet", | |
"Properties": { | |
"HostedZoneName": { | |
"Fn::Join": [ | |
"", | |
[ | |
{ | |
"Ref": "DnsZone" | |
}, | |
"." | |
] | |
] | |
}, | |
"Name": { | |
"Fn::Join": [ | |
"", | |
[ | |
{ | |
"Ref": "DnsPrefix" | |
}, | |
".", | |
{ | |
"Ref": "DnsZone" | |
}, | |
"." | |
] | |
] | |
}, | |
"Type": "CNAME", | |
"TTL": "900", | |
"ResourceRecords": [ | |
{ | |
"Fn::GetAtt": [ | |
"ElasticLoadBalancer", | |
"DNSName" | |
] | |
} | |
] | |
} | |
}, | |
"WaitHandle": { | |
"Type": "AWS::CloudFormation::WaitConditionHandle" | |
} | |
}, | |
"Outputs": { | |
"DnsAddress": { | |
"Description": "Jenkins URL", | |
"Value": { | |
"Fn::Join": [ | |
"", | |
[ | |
"http://", | |
{ | |
"Ref": "DnsRecord" | |
} | |
] | |
] | |
} | |
} | |
} | |
} |
I used the code with out altering it. It deployed the instance, but Jenkins did not install the java or Jenkins software. Is there something that needs to be added?
I used the code with out altering it. It deployed the instance, but Jenkins did not install the java or Jenkins software. Is there something that needs to be added
Hi
I had to make a couple of changes to get this template to work
-
I had to add a new Region as I wanted it to run in London
Line:98
"eu-west-2": {
"AMI": "ami-886369ec"
} -
Because I wasn't using the "default" VPC, I had to make some changes to the ServerGroup
Line: 269
"ServerGroup": {
"Type": "AWS::AutoScaling::AutoScalingGroup",
"Properties": {
"LaunchConfigurationName": {
"Ref": "LaunchConfig"
},
"MinSize": "1",
"MaxSize": "1",
"DesiredCapacity": "1",
"VPCZoneIdentifier": {
"Ref": "Subnets"
},
"LoadBalancerNames": [
{
"Ref": "ElasticLoadBalancer"
}
]
}
}, -
Like @sachin-edufront and @neildaugherty mentioned, I found when the stack was created, Jenkins hadn't installed on the instance. To fix this I changed line 366 to
"awslogs": []
Hope this helps
This stack doesn't work in mumbai region even after providing a valid ami. Stuck at ASG bringing up the stack, using the same launch configuration We can launch the stack though.