Search code examples
powershellamazon-web-servicesamazon-ec2aws-cloudformationaws-code-deploy

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

Solution

  • 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.