AWSCloudFormation - cfn-init无法运行命令

时间:2016-07-18 09:43:57

标签: amazon-cloudformation

我正在使用cloudformation来安装elasticsearch。 我正在下载并提取tar.gz. 以下是我的EC2实例部分:

 "masterinstance": {
        "Type": "AWS: : EC2: : Instance",
        "Metadata": {
            "AWS: : CloudFormation: : Init": {

                  "configSets" : {
                    "ascending" : [ "config1" , "config2" ]

                    },
                "config1": {
                    "sources": {
                        "/home/ubuntu/": "https: //s3.amazonaws.com/xxxxxxxx/elasticsearch.tar.gz"
                    },
                    "files": {
                        "/home/ubuntu/elasticsearch/config/elasticsearch.yml": {
                            "content": {
                                "Fn: : Join": [
                                    "",
                                    [
                                        xxxxxxxx
                                    ]
                                ]
                            }
                        }
                    }

                },

                    "config2" : {
                        "commands": {
                        "runservice": {
                         "command": "~/elasticsearch/bin/elasticsearch",
                         "cwd" : "~",
                         "test" : "~/elasticsearch/bin/elasticsearch > test.txt",
                         "ignoreErrors" : "false"
                        }
                    }
                }
            }
        },
        "Properties": {
            "ImageId": "ami-xxxxxxxxxx",
            "InstanceType": {
                "Ref": "InstanceTypeParameter"
            },
            "Tags": [
                xxxxxxxx
            ],
            "KeyName": "everybody",
            "NetworkInterfaces": [
                {
                    "GroupSet": [
                        {
                            "Ref": "newSecurity"
                        }
                    ],
                    "AssociatePublicIpAddress": "true",
                    "DeviceIndex": "0",
                    "SubnetId": {
                        "Ref": "oneSubnet"
                    }
                }
            ],
            "UserData": {
                "Fn: : Base64": {
                    "Fn: : Join": [
                        "",
                        [
                            "#!/bin/bash\n",

                            "sudo add-apt-repository-yppa: webupd8team/java\n",
                            "sudo apt-get update\n",
                            "echo'oracle-java8-installershared/accepted-oracle-license-v1-1selecttrue'|sudo debconf-set-selections\n",
                            "sudo apt-getinstall-yoracle-java8-installer\n",

                            "apt-get update\n",
                            "apt-get-y installpython-setuptools\n",
                            "easy_installhttps: //s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n",
                            "/usr/local/bin/cfn-init",
                            "--stack Elasticsearch",
                            "--resource masterinstance",
                            "--configsets ascending",
                            "-v\n"

                        ]
                    ]
                }
            }

}     }

我正在使用AWS::CloudFormation::Init进行配置和其他设置。 提取tar后,我想开始弹性搜索,我正在通过command中的AWS::CloudFormation::Init部分进行操作,但是, 当我进入我的实例时,在完全创建堆栈之后,我无法看到我的elasticsearch服务正在运行。 所有其他的东西,如提取tar和创建文件都正常工作。

我已经浏览了cfn-init.log,它给了我以下信息:

2016-07-19 05:53:15,776 P2745 [INFO] Test for Command runservice
2016-07-19 05:53:15,778 P2745 [INFO] -----------------------Command Output-----------------------
2016-07-19 05:53:15,778 P2745 [INFO]    /bin/sh: 1: ~/elasticsearch/bin/elasticsearch: not found
2016-07-19 05:53:15,778 P2745 [INFO] ------------------------------------------------------------
2016-07-19 05:53:15,779 P2745 [ERROR] Exited with error code 127
~

如果我直接在我的实例上触发上述命令~/elasticsearch/bin/elasticsearch,那么它就能正常工作。

我在这里做错了什么。

谢谢。

1 个答案:

答案 0 :(得分:1)

我猜测主目录(〜)在尝试运行ES时正在评估其他用户(而不是Ubuntu)。我认为CFN-Init作为root用户而不是ubuntu / ec2-user运行。尝试将config2命令块中的路径更改为完全限定的路径(/ home / ubuntu / elasticsearch)。