Amogh
Amogh

Reputation: 305

Not able to install codedeploy-agent.msi using Cloudformation

I am trying to deploy codedeploy-agent.msi to an ec2 instance (win 2012). Its behind a private subnet with NO NAT gateway, but with S3 endpoint, i tested this powershell.exe -Command Read-S3Object -BucketName aws-codedeploy-us-west-2 -Key latest/codedeploy-agent.msi -File codedeploy-agent.msi is working. agent is being downloaded through powershell from the ec2 instance.

However, with below cloudfromation script the instance gets created without the agent installed. There is no c:\cfn folder and cfn-init.log files are missing. What could be the issue???

"WorkerInstance": {
            "Type": "AWS::EC2::Instance",
            "Metadata": {
                "AWS::CloudFormation::Init": {
                    "config": {
                        "commands": {
                            "00-download-host-agent": {
                                "command": {
                                    "Fn::Join": [
                                        "",
                                        [
                                            "powershell.exe -Command \"Read-S3Object ",
                                            "-BucketName aws-codedeploy-us-west-2 ",
                                            "-Key latest/codedeploy-agent.msi ",
                                            "-File codedeploy-agent.msi\""
                                        ]
                                    ]
                                },
                                "cwd": "C:/cfn",
                                "waitAfterCompletion" : 0
                            },
                            "01-install-host-agent": {
                                "command": "C:\\cfn\\codedeploy-agent.msi /quiet /l C:\\cfn\\host-agent-install-log.txt",
                                "ignoreErrors": "true",
                                "waitAfterCompletion" : 0
                            },
                            "02-signal-ready": {
                                "command": {
                                    "Fn::Join": [
                                        "",
                                        [
                                            "\"C:\\Program Files\\Amazon\\cfn-bootstrap\\cfn-signal\"",
                                            " -e 0 \"",
                                            "\""
                                        ]
                                    ]
                                }
                            }
                        },
                        "services": {
                            "windows": {
                                "codedeploy-agent": {
                                    "enabled": "true",
                                    "ensureRunning": "true",
                                    "commands": [
                                        "01-install-host-agent"
                                    ]
                                }
                            }
                        }
                    }
                }
            },
            "Properties": {
                "DisableApiTermination": "false",
                "InstanceInitiatedShutdownBehavior": "stop",
                "IamInstanceProfile": {
                            "Ref": "IAMRole"
                        },
                "ImageId": "ami-c55089bd",
                "InstanceType": "t2.medium",
                "KeyName": "mykey",
                "Monitoring": "true",
                "Tags": [{
                        "Key": "CodeDeployGroup",
                        "Value": {
                            "Fn::Join": ["-", ["app", {
                                        "Ref": "EnvType"
                                    }, {
                                        "Ref": "EnvVersion"
                                    }, "CodeDeployGroup"
                                ]]
                        }
                    }, {
                        "Key": "Name",
                        "Value": {
                            "Fn::Join": ["-", ["App", {
                                        "Ref": "EnvType"
                                    }, {
                                        "Ref": "EnvVersion"
                                    }, "Worker"
                                ]]
                        }
                    }
                ],
                        "NetworkInterfaces": [{
                        "DeleteOnTermination": "true",
                        "Description": "Primary network interface",
                        "DeviceIndex": 0,
                        "SubnetId": "subnet-70234568",
                        "GroupSet": ["sg-8affd7", "sg-fdffsfsd4"]
                    }
                ]
            }
        }

Upvotes: 1

Views: 777

Answers (2)

Amogh
Amogh

Reputation: 305

Im not sure, why it dint work. I finally got it to work by putting it as userdata script.

"UserData": {
                    "Fn::Base64": {
                            "Fn::Join": ["", ["<script>\n", "mkdir c:\\cfn\n", "mkdir c:\\cfn\\log\n",
                                "powershell.exe Read-S3Object -BucketName aws-codedeploy-us-west-2/latest -Key codedeploy-agent.msi -File c:\\cfn\\codedeploy-agent.msi\n",
                                "c:\\cfn\\codedeploy-agent.msi /quiet /l c:\\cfn\\host-agent-install-log.txt\n",
                                "c:\\\"Program Files\"\\Amazon\\cfn-bootstrap\\cfn-init.exe -s ", {
                                    "Ref": "AWS::StackName"
                                }, " --region ", {
                                    "Ref": "AWS::Region"
                                }, " > c:\\cfn\\log\\cfn-call-log 2>&1", "</script>"]]                      
                    }
                },

This installs the agent as well as enables and starts the service.

Upvotes: 2

Deblina Gupta
Deblina Gupta

Reputation: 190

The command looks fine. You can try specifying an execution policy for the powershell command. This CFN templates works for me:

        "WorkerInstance" : {
            "Type" : "AWS::EC2::Instance",
            "Metadata" : {
                "AWS::CloudFormation::Init" : {
                    "config" : {
                        "commands" : {
                            "00-download-host-agent" : {
                                "command" : {"Fn::Join" : [ "", [
                                    "powershell.exe -executionpolicy remotesigned -Command \"Read-S3Object ",
                                    "-BucketName aws-codedeploy-us-west-2 ",
                                    "-Key latest/codedeploy-agent.msi ",
                                    "-File codedeploy-agent.msi\""
                                ]]},
                                "cwd" : "C:/cfn",
                                "waitAfterCompletion" : 0
                            },
                            "01-install-host-agent" : {
                                "command" : "C:\\cfn\\codedeploy-agent.msi /quiet /l C:\\cfn\\host-agent-install-log.txt",
                                "ignoreErrors" : "true",
                                "waitAfterCompletion" : 0
                            },
                            "02-signal-ready" : {
                                "command" : {
                                    "Fn::Join" : [ "", [
                                        "\"C:\\Program Files\\Amazon\\cfn-bootstrap\\cfn-signal\"",
                                        " -e 0 \"",
                                        { "Ref" : "WaitHandle" },
                                        "\""
                                    ]]
                                },
                                "waitAfterCompletion" : 0
                            }
                        },
                        "services" : {
                            "windows" : {
                                "codedeploy-agent" : {
                                    "enabled" : "true",
                                    "ensureRunning" : "true",
                                    "commands" : [ "01-install-host-agent" ]
                                }
                            }
                        }
                    }
                }
            },

Upvotes: 2

Related Questions