AWS Windows Server 2012R2 AMI + UserData Run
Мой скрипт упаковщика выглядит следующим образом:
{
"description": "APLP GOLD IMAGE {{isotime \"20060102\"}}",
"min_packer_version": "0.11.0",
"variables": {
"aws_region": "us-east-2",
"aws_vpc": "xxxxxx",
"aws_subnet": "xxxxxx"
},
"builders": [
{
"type": "amazon-ebs",
"profile": "nonprod",
"ami_name": "APLP (encrypted) {{isotime \"20060102\"}}",
"ami_description": "APLP Server2012R2 x86_64 HVM EBS (encrypted) {{isotime \"20060102\"}}",
"instance_type": "t2.micro",
"region": "{{user `aws_region`}}",
"vpc_id": "{{user `aws_vpc`}}",
"subnet_id": "{{user `aws_subnet`}}",
"source_ami_filter": {
"filters": {
"name": "Windows_Server-2012-R2_RTM-English-64Bit-Base-*",
"virtualization-type": "hvm"
},
"owners": ["801119661308"],
"most_recent": true
},
"communicator": "winrm",
"user_data_file":"./SetUpWinRM.ps1",
"winrm_username": "Administrator",
"winrm_use_ssl": true,
"winrm_insecure": true,
"ami_virtualization_type": "hvm",
"tags": {
"Name": "APLP Server2012R2 Gold",
"OS": "Windows Server",
"OSVER": "2012R2"
},
"encrypt_boot": true,
"launch_block_device_mappings": [
{
"device_name": "/dev/sda1",
"volume_size": 100,
"volume_type": "gp2",
"delete_on_termination": true
}
]
}
],
"provisioners": [
{
"type": "powershell",
"scripts": [
"sysprep.ps1",
"ec2config.ps1",
"defrag.ps1",
"disableuac.ps1"
]
}
]
}
Мои пользовательские данные внутри сборки просто настраивают WINRM, который был показан в нескольких местах онлайн, и это прекрасно работает. У меня также есть несколько выполняемых задач PowerShell, в частности:
$EC2SettingsFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\Config.xml"
$xml = [xml](get-content $EC2SettingsFile)
$xmlElement = $xml.get_DocumentElement()
$xmlElementToModify = $xmlElement.Plugins
foreach ($element in
$xmlElementToModify.Plugin) {
if ($element.name -eq
"Ec2SetPassword") {
$element.State = "Enabled"
}
elseif ($element.name -eq
"Ec2SetComputerName") {
$element.State = "Enabled"
}
elseif ($element.name -eq
"Ec2HandleUserData") {
$element.State = "Enabled"
}
elseif ($element.name -eq
"Ec2DynamicBootVolumeSize") {
$element.State = "Enabled"
}
}
$xml.Save($EC2SettingsFile)
После создания образа я даже создал том из снимка, чтобы убедиться, что Config.xml в настоящий момент настроен для запуска пользовательских данных. У меня проблема в том, что никогда не запускаются пользовательские данные, привязанные к новому экземпляру, который я создаю, используя мой AMI из упаковщика. Если я использую AWS clean AMI, мои пользовательские данные работают нормально, когда я запускаю те же пользовательские данные, используя свой пользовательский AMI, это не так.
Насколько я понимаю, причина, по которой я делаю изменения в config.xml в configservice, заключается в том, что userdata запускается еще раз. Я также могу открыть интерфейс ec2config внутри окон после того, как AMI будет развернут, и щелкнуть по запуску userdata при загрузке, и все будет работать как положено.
Любая помощь с благодарностью.