Не могу вызвать скрипт powershell из шаблона Cloudformation (экземпляр windows)

Я создал AMI для Windows 2012 и создал экземпляр этого AMI с помощью шаблона CloudFormation, показанного ниже.

В этом сценарии JSON я хочу вызвать сценарий PowerShell для отключения службы (простой). Экземпляр EC2 Windows 2012 создается. Прежде чем использовать AMI, я убедился, что служба EC2Config запущена. Но сценарий PowerShell не запускается из шаблона CFN. Есть идеи почему?

{
     "AWSTemplateFormatVersion": "2010-09-09",
     "Description": "EC2 Head Node Instance ",
     "Parameters": {
       "VPC": {
        "Description": "The default VPC",
        "Type": "AWS::EC2::VPC::Id"
    },
    "AvailabilityZone": {
        "Description": "Availablity Zone",
        "Type": "String"

    },
    "Region":{
        "Description": "Dev/Test/Prod regions",
        "Type": "String"
    },
    "AMI": {
        "Description": "AMI to start virtual server",
        "Type": "String",
        "Default": "ami-19273960",
        "MaxLength": 12,
        "MinLength": 12
    },      
    "Subnet": {
        "Description": "subnet to launch virtual server in",
        "Type": "AWS::EC2::Subnet::Id"
    }

},      
"Resources": {
    "EC2Instance": {
        "Type": "AWS::EC2::Instance",
        "Metadata": {
            "AWS::Cloudformation::Init": {
                "configSets": {
                     "config": [
                     "rename",
                     "bootstrapDSC"
                      ]                 
                },
                "rename": {
                     "a-rename-computer" : {
                      "command": "powershell.exe -Command Rename-Computer -qrmawshead01 Server1 -Restart",
                      "waitAfterCompletion" : "forever"
                      }
                },
                "bootstrapDSC": {
                     "a-setpullmode" : {
                      "command": "powershell.exe -Command c:\\cfn\\scripts\\SetPullMode.ps1",
                              "waitAfterCompletion" :"0"
                      }  

                }

            }

        },
        "Properties": {
            "ImageId" : { "Ref": "AMI"},
            "SubnetId": {"Ref": "Subnet"},
            "AvailabilityZone": {"Ref": "AvailabilityZone"},
            "SecurityGroupIds" : [ "sg-b603b2cc" ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Head Node in DEV region"
                }
            ]
            }
        }

},
"Outputs": {
    "InstanceId": {
        "Value": {"Ref": "EC2Instance"},
        "Description": "ID of virtual server"
    },

    "PublicIPAddress": {
        "Value": {"Fn::GetAtt": ["EC2Instance", "PublicIp"]},
        "Description": "public IP address of virtual server"
    }
  }
 }

1 ответ

Решение

Пока вы настроили CloudFormation::Init в вашем шаблоне требуется еще один шаг для активации.

Экземпляр требует сценария пользовательских данных, который вызывает cfn-init.exe, Затем эта программа извлекает конфигурацию из шаблона CloudFormation и запускает запрошенные команды.

Например:

  "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
    "<script>\n",

    "cfn-init.exe -v -s ", { "Ref" : "AWS::StackName" },
    " -r SharePointFoundation",
    " --region ", { "Ref" : "AWS::Region" }, "\n",

    "cfn-signal.exe -e %ERRORLEVEL% ", { "Fn::Base64" : { "Ref" : "SharePointFoundationWaitHandle" }}, "\n",

    "</script>"
    ]]}}

Метод сигнализации также позволяет cfn-init сообщать об успешном / неудачном выполнении CloudFormation.

См. Начальная загрузка стеков Windows AWS CloudFormation

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