Windows CloudFormation Script, команды MetaData не работают
Ниже приведен мой шаблон CloudFormation для создания экземпляра Windows EC2 с установленными на нем Java и Tomcat. Однако ничего из метаданных не выполняется. Я вхожу в созданный экземпляр EC2, и ни одна из указанных папок в метаданных не может быть найдена. Чего не хватает в моем скрипте CloudFormation?
Спасибо
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Script to create Windows AMI",
"Metadata": {
"AWS::CloudFormation::Designer": {
"94153bdc-589b-4aa8-b859-5e84a1051a50": {
"size": {
"width": 60,
"height": 60
},
"position": {
"x": 280,
"y": 110
},
"z": 1,
"embeds": []
}
}
},
"Parameters": {},
"Rules": {},
"Mappings": {},
"Resources": {
"JavaTomcatEC2Instance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"ImageId": "ami-06b19063",
"InstanceType": "t2.micro",
"KeyName": "WindowsTest"
},
"Metadata": {
"AWS::CloudFormation::Init": {
"configSets": {
"config": [
"setup"
]
},
"setup": {
"Install-Java-Tomcat-set-env-variables-paths": {
"files": {
"c:\\cfn\\modules\\jdk-8u151-windows-x64.exe": {
"source": "https://s3.amazonaws.com/windows-ami-software/jdk-8u151-windows-x64.exe"
},
"c:\\cfn\\modules\\apache-tomcat-8.5.23.exe": {
"source": "https://s3.amazonaws.com/windows-ami-software/apache-tomcat-8.5.23.exe"
},
"c:\\cfn\\scripts\\Install-Java-JDK.ps1": {
"content": {
"Fn::Join": [
"",
[
"Set-Location C:\\cfn\\modules;",
".\\jdk-8u151-windows-x64.exe /s ADDLOCAL=\"ToolsFeature,SourceFeature,PublicjreFeature\"",
"\n"
]
]
}
},
"c:\\cfn\\scripts\\Install-Tomcat8.ps1": {
"content": {
"Fn::Join": [
"",
[
"Set-Location C:\\cfn\\modules;",
".\\apache-tomcat-8.5.23.exe /S",
"\n"
]
]
}
},
"c:\\cfn\\scripts\\Set-Java-Tomcat8-Paths-Homes.ps1": {
"content": {
"Fn::Join": [
"",
[
"$oldPath=(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment' -Name PATH).Path;",
"$addedFolder = 'C:\\Program Files\\Java\\jdk1.8.0_151\\bin; C:\\Program Files\\Apache Software Foundation\\Tomcat 8.5\\bin';",
"$newPath = $oldPath +';'+$addedFolder;",
"Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment' -Name PATH -Value $newPath ;",
"[Environment]::SetEnvironmentVariable('CATALINA_HOME', 'C:\\Program Files\\Apache Software Foundation\\Tomcat 8.5\\', 'Machine');",
"[Environment]::SetEnvironmentVariable('JAVA_HOME', 'C:\\Program Files\\Java\\jdk1.8.0_151\\', 'Machine');",
"Restart-Computer -Force;",
"\n"
]
]
}
},
"c:\\cfn\\scripts\\Install-Tomcat8-Service.ps1": {
"content": {
"Fn::Join": [
"",
[
"Set-Location 'C:\\Program Files\\Apache Software Foundation\\Tomcat 8.5\\bin';",
".\\service.bat install;",
"Set-Service Tomcat8 -StartupType Automatic;",
"Start-Service Tomcat8;",
"\n"
]
]
}
}
},
"commands": {
"a-Install-Java-JDK": {
"command": "powershell.exe -ExecutionPolicy RemoteSigned -Command c:\\cfn\\scripts\\Install-Java-JDK.ps1",
"waitAfterCompletion": "30"
},
"b-Install-Tomcat8": {
"command": "powershell.exe -ExecutionPolicy RemoteSigned -Command c:\\cfn\\scripts\\Install-Tomcat8.ps1",
"waitAfterCompletion": "30"
},
"c-Set-Java-Tomcat8-Paths-Homes": {
"command": "powershell.exe -ExecutionPolicy RemoteSigned -Command c:\\cfn\\scripts\\Set-Java-Tomcat8-Paths-Homes.ps1",
"waitAfterCompletion": "forever"
},
"d-Install-Tomcat8-Service": {
"command": "powershell.exe -ExecutionPolicy RemoteSigned -Command c:\\cfn\\scripts\\Install-Tomcat8-Service.ps1",
"waitAfterCompletion": "30"
}
}
}
}
},
"AWS::CloudFormation::Designer": {
"id": "94153bdc-589b-4aa8-b859-5e84a1051a50"
}
}
}
}
}
2 ответа
Есть две вещи, которые нужно проверить:
Проверьте, создаются ли эти сценарии в папке C:\cfn\scripts --IF not, затем проверьте, в чем проблема
Если эти сценарии созданы там, то вызовите отдельно шаг
"commands"
вconfigSets
(строка № 33-34). Я подозреваю, что это проблема, когда реальные скрипты не вызывают.
Вместо использования блока "setup", попробуйте что-то вроде этого. Вот как я использовал.
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"files": {
"c:\\cfn\\modules\\jdk-8u151-windows-x64.exe": {
"source": "https://s3.amazonaws.com/windows-ami-software/jdk-8u151-windows-x64.exe"
},
"c:\\cfn\\modules\\apache-tomcat-8.5.23.exe": {
"source": "https://s3.amazonaws.com/windows-ami-software/apache-tomcat-8.5.23.exe"
},
"c:\\cfn\\scripts\\Install-Java-JDK.ps1": {
"content": {
"Fn::Join": [
"",
[
"Set-Location C:\\cfn\\modules;",
".\\jdk-8u151-windows-x64.exe /s ADDLOCAL=\"ToolsFeature,SourceFeature,PublicjreFeature\"",
"\n"
]
]
}
},
"c:\\cfn\\scripts\\Install-Tomcat8.ps1": {
"content": {
"Fn::Join": [
"",
[
"Set-Location C:\\cfn\\modules;",
".\\apache-tomcat-8.5.23.exe /S",
"\n"
]
]
}
},
"c:\\cfn\\scripts\\Set-Java-Tomcat8-Paths-Homes.ps1": {
"content": {
"Fn::Join": [
"",
[
"$oldPath=(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment' -Name PATH).Path;",
"$addedFolder = 'C:\\Program Files\\Java\\jdk1.8.0_151\\bin; C:\\Program Files\\Apache Software Foundation\\Tomcat 8.5\\bin';",
"$newPath = $oldPath +';'+$addedFolder;",
"Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment' -Name PATH -Value $newPath ;",
"[Environment]::SetEnvironmentVariable('CATALINA_HOME', 'C:\\Program Files\\Apache Software Foundation\\Tomcat 8.5\\', 'Machine');",
"[Environment]::SetEnvironmentVariable('JAVA_HOME', 'C:\\Program Files\\Java\\jdk1.8.0_151\\', 'Machine');",
"Restart-Computer -Force;",
"\n"
]
]
}
},
"c:\\cfn\\scripts\\Install-Tomcat8-Service.ps1": {
"content": {
"Fn::Join": [
"",
[
"Set-Location 'C:\\Program Files\\Apache Software Foundation\\Tomcat 8.5\\bin';",
".\\service.bat install;",
"Set-Service Tomcat8 -StartupType Automatic;",
"Start-Service Tomcat8;",
"\n"
]
]
}
}
},
"commands": {
"a-Install-Java-JDK": {
"command": "powershell.exe -ExecutionPolicy RemoteSigned -Command c:\\cfn\\scripts\\Install-Java-JDK.ps1",
"waitAfterCompletion": "30"
},
"b-Install-Tomcat8": {
"command": "powershell.exe -ExecutionPolicy RemoteSigned -Command c:\\cfn\\scripts\\Install-Tomcat8.ps1",
"waitAfterCompletion": "30"
},
"c-Set-Java-Tomcat8-Paths-Homes": {
"command": "powershell.exe -ExecutionPolicy RemoteSigned -Command c:\\cfn\\scripts\\Set-Java-Tomcat8-Paths-Homes.ps1",
"waitAfterCompletion": "forever"
},
"d-Install-Tomcat8-Service": {
"command": "powershell.exe -ExecutionPolicy RemoteSigned -Command c:\\cfn\\scripts\\Install-Tomcat8-Service.ps1",
"waitAfterCompletion": "30"
}
}
}
}
}
Супер старый... но кто угодно!
cfn-init никогда не вызывается. Обычно это делается один раз через UserData.
UserData:
Fn::Base64:
!Sub |
<PowerShell>
cfn-init.exe -v -s ${AWS::StackName} -r <resourceref> --configsets MyConfigSet --region ${AWS::Region}
</PowerShell>
Затем в своем init вы также настроите службу cfn-hup для мониторинга пары файлов конфигурации.
AWS::CloudFormation::Init:
configSets:
MyConfigSet:
- configureCfn
configureCfn:
files:
c:\\cfn\\cfn-hup.conf:
content: !Sub |
[main]
stack=${AWS::StackName}
region=${AWS::Region}
c:\\cfn\\hooks.d\\cfn-auto-reloader.conf:
content: !Sub |
[cfn-auto-reloader-hook]
triggers=post.update
path=Resources.UiPathRobot.Metadata.AWS::CloudFormation::Init
action=cfn-init.exe -v -s ${AWS::StackName} -r <resourceref> --configsets MyConfigSet --region ${AWS::Region}
services:
windows:
cfn-hup:
enabled: true
ensureRunning: true
files:
- c:\cfn\cfn-hup.conf
- c:\cfn\hook.d\cfn-auto-reloader.conf
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-windows-stacks-bootstrapping.html