【问题标题】:Running PowerShell commands in CloudFormation template在 CloudFormation 模板中运行 PowerShell 命令
【发布时间】:2015-08-11 19:01:41
【问题描述】:

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

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}\""
                    }
                }
            }
        }
    }
}

【问题讨论】:

    标签: powershell amazon-web-services amazon-cloudformation


    【解决方案1】:

    必须启用 EC2 实例中的User Data 才能应用/运行 cfn-init 和其他用户数据注入脚本。

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

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

    【讨论】:

    • 很久以前,我一直在用头撞墙来解决这个问题。目前 - 我遇到了用户数据问题 - 有时会被执行,而其他时间不会被执行。
    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2014-09-16
    • 2018-04-21
    • 2011-03-02
    • 2015-03-12
    相关资源
    最近更新 更多