У меня есть шаблон CF, который создает инстанс EC2, и я делаю некоторую загрузку там в метаданных, чтобы установить httpd и создать простой файл index.html в /var/www/html/index.html и запустить httpd.
Я также настроил помощник cfn-hup для запуска и повторного выполнения пользовательских данных при обновлении стека. После создания стека я обновил его, изменив содержимое в файле index.html, и подождал более 15 минут, чтобы увидеть изменения. Но похоже, что cfn-hup не выполнил изменения. Вот мой шаблон, не уверен, что я пропустил.
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "AWS CloudFormation Sample Template EC2InstanceWithSecurityGroupSample: Create an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based on the region in which the stack is run. This example creates an EC2 security group for the instance to give you SSH access. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resources used if you create a stack from this template.",
"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" : "WebServer EC2 instance type",
"Type" : "String",
"Default" : "t2.micro",
"AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium",
"m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge",
"m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "c1.medium", "c1.xlarge",
"c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge",
"c4.8xlarge", "g2.2xlarge", "g2.8xlarge", "r3.large", "r3.xlarge", "r3.2xlarge", "r3.4xlarge", "r3.8xlarge", "i2.xlarge",
"i2.2xlarge", "i2.4xlarge", "i2.8xlarge", "d2.xlarge", "d2.2xlarge", "d2.4xlarge", "d2.8xlarge"]
,
"ConstraintDescription" : "Must be a valid EC2 instance type."
},
"SSHLocation" : {
"Description" : "The IP address range that can be used to SSH to the EC2 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."
}
},
"Mappings" : {
"AWSInstanceType2Arch" : {
"t1.micro" : { "Arch" : "PV64" }, "t2.nano" : { "Arch" : "HVM64" }, "t2.micro" : { "Arch" : "HVM64" },
"t2.small" : { "Arch" : "HVM64" }, "t2.medium" : { "Arch" : "HVM64" }, "t2.large" : { "Arch" : "HVM64" },
"m1.small" : { "Arch" : "PV64" }, "m1.medium" : { "Arch" : "PV64" }, "m1.large" : { "Arch" : "PV64" },
"m1.xlarge" : { "Arch" : "PV64" }, "m2.xlarge" : { "Arch" : "PV64" }, "m2.2xlarge" : { "Arch" : "PV64" },
"m2.4xlarge" : { "Arch" : "PV64" }, "m3.medium" : { "Arch" : "HVM64" }, "m3.large" : { "Arch" : "HVM64" },
"m3.xlarge" : { "Arch" : "HVM64" }, "m3.2xlarge" : { "Arch" : "HVM64" }, "m4.large" : { "Arch" : "HVM64" },
"m4.xlarge" : { "Arch" : "HVM64" }, "m4.2xlarge" : { "Arch" : "HVM64" }, "m4.4xlarge" : { "Arch" : "HVM64" },
"m4.10xlarge" : { "Arch" : "HVM64" }, "c1.medium" : { "Arch" : "PV64" }, "c1.xlarge" : { "Arch" : "PV64" },
"c3.large" : { "Arch" : "HVM64" }, "c3.xlarge" : { "Arch" : "HVM64" }, "c3.2xlarge" : { "Arch" : "HVM64" },
"c3.4xlarge" : { "Arch" : "HVM64" }, "c3.8xlarge" : { "Arch" : "HVM64" }, "c4.large" : { "Arch" : "HVM64" },
"c4.xlarge" : { "Arch" : "HVM64" }, "c4.2xlarge" : { "Arch" : "HVM64" }, "c4.4xlarge" : { "Arch" : "HVM64" },
"c4.8xlarge" : { "Arch" : "HVM64" }, "g2.2xlarge" : { "Arch" : "HVMG2" }, "g2.8xlarge" : { "Arch" : "HVMG2" },
"r3.large" : { "Arch" : "HVM64" }, "r3.xlarge" : { "Arch" : "HVM64" }, "r3.2xlarge" : { "Arch" : "HVM64" },
"r3.4xlarge" : { "Arch" : "HVM64" }, "r3.8xlarge" : { "Arch" : "HVM64" }, "i2.xlarge" : { "Arch" : "HVM64" },
"i2.2xlarge" : { "Arch" : "HVM64" }, "i2.4xlarge" : { "Arch" : "HVM64" }, "i2.8xlarge" : { "Arch" : "HVM64" },
"d2.xlarge" : { "Arch" : "HVM64" }, "d2.2xlarge" : { "Arch" : "HVM64" }, "d2.4xlarge" : { "Arch" : "HVM64" },
"d2.8xlarge" : { "Arch" : "HVM64" }
}
,
"AWSRegionArch2AMI" : {
"us-east-1" : {"PV64" : "ami-2a69aa47", "HVM64" : "ami-97785bed", "HVMG2" : "ami-0a6e3770"},
"us-west-2" : {"PV64" : "ami-7f77b31f", "HVM64" : "ami-f2d3638a", "HVMG2" : "ami-ee15a196"},
"us-west-1" : {"PV64" : "ami-a2490dc2", "HVM64" : "ami-824c4ee2", "HVMG2" : "ami-0da4a46d"},
"eu-west-1" : {"PV64" : "ami-4cdd453f", "HVM64" : "ami-d834aba1", "HVMG2" : "ami-af8013d6"},
"eu-west-2" : {"PV64" : "NOT_SUPPORTED", "HVM64" : "ami-403e2524", "HVMG2" : "NOT_SUPPORTED"},
"eu-west-3" : {"PV64" : "NOT_SUPPORTED", "HVM64" : "ami-8ee056f3", "HVMG2" : "NOT_SUPPORTED"},
"eu-central-1" : {"PV64" : "ami-6527cf0a", "HVM64" : "ami-5652ce39", "HVMG2" : "ami-1d58ca72"},
"ap-northeast-1" : {"PV64" : "ami-3e42b65f", "HVM64" : "ami-ceafcba8", "HVMG2" : "ami-edfd658b"},
"ap-northeast-2" : {"PV64" : "NOT_SUPPORTED", "HVM64" : "ami-863090e8", "HVMG2" : "NOT_SUPPORTED"},
"ap-northeast-3" : {"PV64" : "NOT_SUPPORTED", "HVM64" : "ami-83444afe", "HVMG2" : "NOT_SUPPORTED"},
"ap-southeast-1" : {"PV64" : "ami-df9e4cbc", "HVM64" : "ami-68097514", "HVMG2" : "ami-c06013bc"},
"ap-southeast-2" : {"PV64" : "ami-63351d00", "HVM64" : "ami-942dd1f6", "HVMG2" : "ami-85ef12e7"},
"ap-south-1" : {"PV64" : "NOT_SUPPORTED", "HVM64" : "ami-531a4c3c", "HVMG2" : "ami-411e492e"},
"us-east-2" : {"PV64" : "NOT_SUPPORTED", "HVM64" : "ami-f63b1193", "HVMG2" : "NOT_SUPPORTED"},
"ca-central-1" : {"PV64" : "NOT_SUPPORTED", "HVM64" : "ami-a954d1cd", "HVMG2" : "NOT_SUPPORTED"},
"sa-east-1" : {"PV64" : "ami-1ad34676", "HVM64" : "ami-84175ae8", "HVMG2" : "NOT_SUPPORTED"},
"cn-north-1" : {"PV64" : "ami-77559f1a", "HVM64" : "ami-cb19c4a6", "HVMG2" : "NOT_SUPPORTED"},
"cn-northwest-1" : {"PV64" : "ami-80707be2", "HVM64" : "ami-3e60745c", "HVMG2" : "NOT_SUPPORTED"}
}
},
"Resources" : {
"EC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Metadata" : {
"AWS::CloudFormation::Init" : {
"configSets" : {
"InstallAndRun" : [ "config1", "config2" ]
},
"config1" : {
"packages" : {
"yum" : {
"httpd" : []
}
},
"files" : {
"/var/www/html/index.html" : {
"content" : { "Fn::Join" : ["", [
"<h1 align='center'>Heyyo cfn-up, oh sorry cfn-hup! :)</h1>"
]]},
"mode" : "000644",
"owner" : "apache",
"group" : "apache"
},
"/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.EC2Instance.Metadata.AWS::CloudFormation::Init\n",
"action=/opt/aws/bin/cfn-init --stack ",
{ "Ref" : "AWS::StackName" },
" --resource EC2Instance ",
" --configsets InstallAndRun ",
" --region ", { "Ref" : "AWS::Region" }, "\n",
"runas=root\n"
]]}
}
}
},
"config2" : {
"services" : {
"sysvinit" : {
"httpd" : { "enabled" : "true", "ensureRunning" : "true", "packages" : { "yum" : ["httpd"] },
"cfn-hup" : { "enabled" : "true", "ensureRunning" : "true",
"files" : ["/etc/cfn/cfn-hup.conf", "/etc/cfn/hooks.d/cfn-auto-reloader.conf"]}
}
}
}
}
}
},
"Properties" : {
"InstanceType" : { "Ref" : "InstanceType" },
"SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
"KeyName" : { "Ref" : "KeyName" },
"ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
{ "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] },
"UserData" : { "Fn::Base64" :
{ "Fn::Join" : ["", [
"#!/bin/bash -xe\n",
"yum update -y aws-cfn-bootstrap\n",
"# Install the files and packages from the metadata\n",
"/opt/aws/bin/cfn-init -v ",
" --stack ", { "Ref" : "AWS::StackName" },
" --resource EC2Instance ",
" --configsets InstallAndRun ",
" --region ", { "Ref" : "AWS::Region" }, "\n",
"# Start up the cfn-hup daemon to listen for changes to the EC2 metadata\n",
"/opt/aws/bin/cfn-hup || error_exit 'Failed to start cfn-hup'\n",
"# Signal the status from cfn-init\n",
"/opt/aws/bin/cfn-signal -e $? ",
" --stack ", { "Ref" : "AWS::StackName" },
" --resource EC2Instance ",
" --region ", { "Ref" : "AWS::Region" }, "\n"
]]}
}
},
"CreationPolicy": {
"ResourceSignal": {
"Count": "1",
"Timeout": "PT5M"
}
}
},
"InstanceSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Enable SSH access via port 22",
"SecurityGroupIngress" : [
{ "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : { "Ref" : "SSHLocation"} },
{ "IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : { "Ref" : "SSHLocation"} }
]
}
}
},
"Outputs" : {
"InstanceId" : {
"Description" : "InstanceId of the newly created EC2 instance",
"Value" : { "Ref" : "EC2Instance" }
},
"AZ" : {
"Description" : "Availability Zone of the newly created EC2 instance",
"Value" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ] }
},
"PublicDNS" : {
"Description" : "Public DNSName of the newly created EC2 instance",
"Value" : { "Fn::GetAtt" : [ "EC2Instance", "PublicDnsName" ] }
},
"PublicIP" : {
"Description" : "Public IP address of the newly created EC2 instance",
"Value" : { "Fn::GetAtt" : [ "EC2Instance", "PublicIp" ] }
}
}
}
Проверка, запущен ли демон cfn-hup
sudo service --status-all | grep cfn
cfn-hup (pid 2997) is running...
Вот /var/log/cfn-init.log
2018-08-31 09:39:46,949 [DEBUG] CloudFormation client initialized with endpoint https://cloudformation.us-east-1.amazonaws.com
2018-08-31 09:39:46,955 [DEBUG] Describing resource EC2Instance in stack EC2-CFN-Init-With-cfn-hup
2018-08-31 09:39:47,069 [INFO] -----------------------Starting build-----------------------
2018-08-31 09:39:47,070 [DEBUG] Not setting a reboot trigger as scheduling support is not available
2018-08-31 09:39:47,070 [INFO] Running configSets: InstallAndRun
2018-08-31 09:39:47,071 [INFO] Running configSet InstallAndRun
2018-08-31 09:39:47,072 [INFO] Running config config1
2018-08-31 09:39:53,478 [DEBUG] Installing/updating [u'httpd'] via yum
2018-08-31 09:39:55,430 [INFO] Yum installed [u'httpd']
2018-08-31 09:39:55,430 [DEBUG] No groups specified
2018-08-31 09:39:55,430 [DEBUG] No users specified
2018-08-31 09:39:55,430 [DEBUG] No sources specified
2018-08-31 09:39:55,430 [DEBUG] Parent directory /etc/cfn does not exist, creating
2018-08-31 09:39:55,431 [DEBUG] Writing content to /etc/cfn/cfn-hup.conf
2018-08-31 09:39:55,431 [DEBUG] Setting mode for /etc/cfn/cfn-hup.conf to 000400
2018-08-31 09:39:55,431 [DEBUG] Setting owner 0 and group 0 for /etc/cfn/cfn-hup.conf
2018-08-31 09:39:55,431 [DEBUG] Parent directory /etc/cfn/hooks.d does not exist, creating
2018-08-31 09:39:55,431 [DEBUG] Writing content to /etc/cfn/hooks.d/cfn-auto-reloader.conf
2018-08-31 09:39:55,432 [DEBUG] No mode specified for /etc/cfn/hooks.d/cfn-auto-reloader.conf. The file will be created with the mode: 0644
2018-08-31 09:39:55,432 [DEBUG] Writing content to /var/www/html/index.html
2018-08-31 09:39:55,432 [DEBUG] Setting mode for /var/www/html/index.html to 000644
2018-08-31 09:39:55,432 [DEBUG] Setting owner 48 and group 48 for /var/www/html/index.html
2018-08-31 09:39:55,432 [DEBUG] No commands specified
2018-08-31 09:39:55,432 [DEBUG] No services specified
2018-08-31 09:39:55,437 [INFO] Running config config2
2018-08-31 09:39:55,437 [DEBUG] No packages specified
2018-08-31 09:39:55,438 [DEBUG] No groups specified
2018-08-31 09:39:55,438 [DEBUG] No users specified
2018-08-31 09:39:55,438 [DEBUG] No sources specified
2018-08-31 09:39:55,438 [DEBUG] No files specified
2018-08-31 09:39:55,438 [DEBUG] No commands specified
2018-08-31 09:39:55,438 [DEBUG] Using service modifier: /sbin/chkconfig
2018-08-31 09:39:55,438 [DEBUG] Setting service httpd to enabled
2018-08-31 09:39:55,469 [INFO] enabled service httpd
2018-08-31 09:39:55,470 [DEBUG] Using service runner: /sbin/service
2018-08-31 09:39:55,518 [DEBUG] Starting service httpd as it is not running
2018-08-31 09:39:55,610 [INFO] Started httpd successfully
2018-08-31 09:39:55,611 [INFO] ConfigSets completed
2018-08-31 09:39:55,611 [DEBUG] Not clearing reboot trigger as scheduling support is not available
2018-08-31 09:39:55,611 [INFO] -----------------------Build complete-----------------------
2018-08-31 09:39:56,711 [DEBUG] CloudFormation client initialized with endpoint https://cloudformation.us-east-1.amazonaws.com
2018-08-31 09:39:56,717 [DEBUG] Signaling resource EC2Instance in stack EC2-CFN-Init-With-cfn-hup with unique ID i-0ba14cfb8f8fdb9ad and status SUCCESS
Видя последние строки /var/log/cfn-hup.log, похоже, что cfn-hup ищет изменения каждые 15 минут.
2018-08-31 09:39:56,163 [DEBUG] CloudFormation client initialized with endpoint https://cloudformation.us-east-1.amazonaws.com
2018-08-31 09:39:56,163 [DEBUG] Creating /var/lib/cfn-hup/data
2018-08-31 09:39:56,171 [INFO] No umask value specified in config file. Using the default one: 022
2018-08-31 09:54:56,353 [INFO] cfn-hup processing is alive.
2018-08-31 10:09:56,469 [INFO] cfn-hup processing is alive.
2018-08-31 10:24:56,584 [INFO] cfn-hup processing is alive.
Я ожидаю, что если я изменю html-содержимое, через 15 минут я увижу это изменение. Я что-то упустил?
"/var/www/html/index.html" : {
"content" : { "Fn::Join" : ["", [
"<h1 align='center'>Heyyo cfn-up, oh sorry cfn-hup! :)</h1>"
]]},
"mode" : "000644",
"owner" : "apache",
"group" : "apache"
}
Также, увидев / var / lib / cfn-hup / data, я вижу, что изменения в стеке были перенесены в файл metadata_db.json.