运行 CloudFormation 模板中的 PowerShell 命令

Running PowerShell commands in CloudFormation template

我有一个 CloudFormation 模板,它以 Java 和 Tomcat 运行 作为服务启动 Windows 个实例。 我必须在注册表中为 Tomcat 设置最大内存池大小的值。我准备了一个 PowerShell 命令,它在命令行中运行良好。 然后我尝试了 3 种不同的方式 运行 它们作为 CloudFormation 模板的一部分,其中 none 有效。

Windows EventLog 和 C:\Program Files\Amazon\Ec2ConfigService\Logs 中的文件都没有给我提供任何关于它为什么不起作用的线索。

1

"LaunchConfig" : {
    "Type" : "AWS::AutoScaling::LaunchConfiguration",
    "Properties" : {
        --- some props removed ---,
        "UserData" : {
            "Fn::Base64" : {
                "Fn::Join" : [
                    "",
                    [
                        "<powershell>\n",
                            "Set-ItemProperty -Path \"HKLM:\Software\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat8\Parameters\Java\" -Name JvmMx -Value 5000 \n",
                            "Restart-Service Tomcat8 \n",
                        "</powershell>"
                    ]
                ]
            }
        }
    }
}

2

"LaunchConfig" : {
    "Type" : "AWS::AutoScaling::LaunchConfiguration",
    "Properties" : {
        --- some props removed ---,
        "UserData" : {
            "Fn::Base64" : {
                "Fn::Join" : [
                    "",
                    [
                        "<script>\n",
                            "PowerShell -Command \"& {Set-ItemProperty -Path 'HKLM:\Software\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat8\Parameters\Java' -Name JvmMx -Value 5000}\" \n",
                            "PowerShell -Command \"& {Restart-Service Tomcat8}\" \n",
                        "</script>"
                    ]
                ]
            }
        }
    }
}

3

"LaunchConfig" : {
    "Type" : "AWS::AutoScaling::LaunchConfiguration",
    "Properties" : {
        --- some props removed ---,
        "UserData" : {
            "Fn::Base64" : {
                "Fn::Join" : [
                    "",
                    [
                        "<script>\n",
                            "cfn-init.exe -v -s ", {"Ref" : "AWS::StackId"}, " -r LaunchConfig --region ", {"Ref" : "AWS::Region"}, "\n",
                        "</script>"
                    ]
                ]
            }
        }
    },
    "Metadata" : {
        "AWS::CloudFormation::Init" : {
            "config" : {
                "commands" : {
                    "1-heapsize" : {
                        "command" : "PowerShell -Command \"& {Set-ItemProperty -Path 'HKLM:\Software\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat8\Parameters\Java' -Name JvmMx -Value 5000}\""
                    },
                    "2-restart" : {
                        "command" : "PowerShell -Command \"& {Restart-Service Tomcat8}\""
                    }
                }
            }
        }
    }
}
必须在 EC2 实例中启用

User Data 才能应用 cfn-init 和其他用户数据注入脚本/运行.

您需要打开EC2ConfigurationService-勾选启用用户数据,停止实例并获取AMI,请使用新创建的AMI。

详细信息可以在亚马逊文档中找到Link - http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html