2017-08-10 19 views
1

私はWindows 2012 serverのカスタムAMIイメージを持っています。私はいくつかのサービスを立ち上げ、そのインスタンスが現れたときにpowershellスクリプトを使っていくつかの追加作業をしたかったのです。 BTW私は、インスタンスを起動するAWSの雲のテンプレートを使用しています。雲の情報 - 2012年のWindowsインスタンスにcfnヘルパースクリプトをインストールする方法

EC2インスタンスのAMI(以下のSteveの示唆)を実行する前に、EC2Config設定の "user data"オプションをチェックしてsysopsを実行しました。 syopsを実行した後、shutdownによって自分自身がシャットダウンします。私はその段階でAMIを受けた。

クラウドフォーメーションテンプレートから呼び出すPowerShellスクリプトは機能しません。どうしてか分かりません。

{ 
    "AWSTemplateFormatVersion": "2010-09-09", 
    "Resources": { 
    "MyInstance": { 
     "Type": "AWS::EC2::Instance", 
     "Metadata" : { 
      "AWS::CloudFormation::Init" : { 
      "config" : { 
      "files" : { 
       "c:\\cfn\\cfn-hup.conf" : { 
       "content" : { "Fn::Join" : ["", [ 
       "[main]\n", 
        "stack=", { "Ref" : "AWS::StackId" }, "\n", 
        "region=", { "Ref" : "AWS::Region" }, "\n" 
        ]]} 
       }, 
       "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf" : { 
       "content": { "Fn::Join" : ["", [ 
        "[cfn-auto-reloader-hook]\n", 
        "triggers=post.update\n", 
     "path=Resources.MyInstance.Metadata.AWS::CloudFormation::Init\n", 
      "action=cfn-init.exe -v -s ", { "Ref" : "AWS::StackId" }, 
              " -r MyInstance", 
              " --region ", { "Ref" : "AWS::Region" }, "\n" 
      ]]} 
     }, 
     "c:\\scripts\\test.ps1" : { 
      "content": { "Fn::Join" : ["", [ 
      "Write-Host Hello World!\n" 
      ]]} 
     } 
     }, 
     "commands" : { 
     "1-run-script" : { 
      "command" : { "Fn::Join" : [ "", [ 
      "Powershell.exe Set-ExecutionPolicy Unrestricted -force \n", 
      "Powershell.exe C:\\PowershellScripts\\WindowsServiceManager.ps1;StopWindowsService Dnscache" 
       ]]}} 
      }, 
      "services": { 
       "windows": { 
        "cfn-hup": { 
          "enabled": "true", 
          "ensureRunning": "true", 
          "files": ["c:\\cfn\\cfn-hup.conf", "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"] 
                  } 
           } 
              } 
    }         
          } 
      }, 
"Properties": { 
    "DisableApiTermination": "FALSE", 
    "ImageId": "ami-3723c04f", 
    "InstanceType": "t2.micro", 
    "KeyName": "EC2Instances", 
    "Monitoring": "false", 
    "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ 
    "<script>\n", 
    "cfn-init.exe -v -s ", { "Ref" : "AWS::StackName" }, 
    " -r MyInstance", 
    " --region ", { "Ref" : "AWS::Region" }, "\n", 

    "cfn-signal.exe -e 0 ", { "Fn::Base64" : { "Ref" : "WindowsServerWaitHandle" }}, "\n", 

    "</script>\n" 
    ]]}}, 
    "Tags": [ 
    { 
     "Key": "Name", 
     "Value": "CloudAcademy_Instance" 
    } 
    ], 
    "NetworkInterfaces": [ 
    { 
     "DeleteOnTermination": "true", 
     "Description": "Primary network interface", 
     "DeviceIndex": 0, 
     "AssociatePublicIpAddress": "true" 
    } 
    ] 
} 

}、

 All I need is the following line to get executed: 


     "Powershell.exe C:\\PowershellScripts \\WindowsServiceManager.ps1;StopWindowsService Dnscache" 

おかげ

答えて

1

あなたがアマゾンのWindows 2012 AMIを使用している場合、それはcfn- *ヘルパースクリプトがすでにインストールされています。

もしそうでなければ、それらをインストールする必要があります。 official documentationは細部が細部です:

これらのスクリプトは、デフォルトで/ opt/aws/binの最新のAmazon Linux AMIにデフォルトでインストールされます。また、Amazon Linux AMI yumリポジトリでは、Amazon Linux AMIの以前のバージョンのほか、他のLinux/UnixディストリビューションのRPMも利用できます。 Python for Windowsを使用して、Microsoft Windows(2008以降)にスクリプトをインストールすることもできます。

ただし、EC2ConfigServiceを使用してインストールできます。注意すべき事はEC2ConfigServiceでそのCFNスクリプトがmay be disabledです:

あなたのWindows AMIを作成する前に、起動して、「E」に下るクリックしてください。 Ec2Configの設定を開きます。 "Userdata"の実行を有効にします。管理者パスワードを設定する場合は、中央のラジオボタンを選択し、パスワードを入力します。次に、 "shutdown with sysprep"を実行します。 sysprepの実行中にユーザーデータの実行が有効になっていることがわかります。マシンがダウンしたら、AMIを作成します。

+1

Thanks Steve。それは今働く。私はコード全体を投稿します – Jason

関連する問題