【问题标题】:Windows CloudFormation Script, MetaData commands are not runningWindows CloudFormation 脚本,元数据命令未运行
【发布时间】:2018-04-26 14:53:58
【问题描述】:

下面是我的 CloudFormation 模板,用于创建安装了 Java 和 Tomcat 的 Windows EC2 实例。但是,正在执行 MetaData 中的任何内容。我登录到创建的 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"
            }
        }
    }
}

}

【问题讨论】:

    标签: windows amazon-ec2 amazon-cloudformation amazon-ami


    【解决方案1】:

    超级老...但是任何人!

    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

    【讨论】:

      【解决方案2】:

      不要使用“设置”块,而是尝试这样的事情。这就是我一直在使用的方式。

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

      【讨论】:

        【解决方案3】:

        您需要检查两件事:

        1. 检查是否在位置 C:\cfn\scripts 上创建了这些脚本 --如果没有则检查问题出在哪里

        2. 如果在此处创建了这些脚本,则在 configSets(第 33-34 行)中单独调用步骤 "commands"。我怀疑这是没有调用实际脚本的问题。

        【讨论】:

          猜你喜欢
          • 2023-01-17
          • 2011-12-13
          • 1970-01-01
          • 2017-09-13
          • 2011-05-31
          • 1970-01-01
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          相关资源
          最近更新 更多