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 ответа

Есть две вещи, которые нужно проверить:

  1. Проверьте, создаются ли эти сценарии в папке C:\cfn\scripts --IF not, затем проверьте, в чем проблема

  2. Если эти сценарии созданы там, то вызовите отдельно шаг "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

Другие вопросы по тегам