2016-07-18 7 views
2

Ich verwende cloudformation für die Installation von elasticsearch. Ich lade und entpacke tar.gz. Hier finden Sie meinen EC2-Instanz Abschnitt:AWSCloudFormation - cfn-init konnte den Befehl nicht ausführen

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

         ] 
        ] 
       } 
      } 

} }

I AWS::CloudFormation::Init für die Konfiguration und andere Einstellungen verwenden. Nach dem Extrahieren der Teer, ich möchte elasticsearch starten, die ich durch die command Abschnitt in AWS::CloudFormation::Init bin aber, nach der vollständigen Erstellung von Stapel, wenn ich ssh in meine Instanzen, ich bin nicht in der Lage zu sehen, meine elasticsearch Service ausgeführt wird. Alle anderen Dinge wie das Extrahieren von tar und das Erstellen von Dateien funktionieren einwandfrei.

ich durch die CFN-init.log gegangen sind, gibt es mir die folgenden Informationen:

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 
~ 

Wenn ich den obigen Befehl feuern ~/elasticsearch/bin/elasticsearch direkt auf mein Beispiel dann ist es perfekt funktioniert.

Was ich hier falsch mache.

Vielen Dank.

+0

Gibt es irgendwelche Informationen in den Protokollen? – Daniel777

+0

Wenn eine Antwort unten Ihre Frage löste, vergessen Sie nicht, [Akzeptiert] zu markieren (http://meta.stackexchange.com/a/5235/327137). – wjordan

Antwort

1

Ich vermute, dass das Home-Verzeichnis (~) zu einem anderen Benutzer (nicht Ubuntu) auswertet, wenn versucht wird, ES auszuführen. Ich denke, CFN-Init läuft als root-Benutzer statt als ubuntu/ec2-Benutzer. Versuchen Sie, die Pfade im config2-Befehlsblock in vollständig qualifizierte Pfade zu ändern (/ home/ubuntu/elasticsearch).

+0

Ich habe das auch ausprobiert, aber dann wird das ES als root gestartet und dann stehe ich vor dem 'Laufzeitfehler: Elasticsearch nicht als root ausführen. Ist root ist der Benutzer, der alle Skripte und Befehle bei boottime ausführt zum Zeitpunkt der Ausführung von Benutzerdaten und cfn-init Metadaten? –

+0

Ja, alle Befehle werden standardmäßig als root ausgeführt. Sie könnten ein paar Dinge tun: Führen Sie den elasticsearch Befehl als einen bestimmten Benutzer: 'sudo -H-u Benutzername/home/ubuntu/elasticsearch/bin/elasticsearch'. Oder wickeln Sie den Befehl elasticsearch start in ein upstart/sysv-Skript und legen Sie dann die UID fest, um sie als einen bestimmten Benutzer zu starten. Ich würde vorschlagen, dies zu tun, um es einfacher zu machen, es laufen zu lassen, neu zu starten, usw., aber es ist ein bisschen mehr Zeit investiert. – louahola

+0

Vielen Dank für dieses Wissen, was ich getan habe, ist Änderungen in elasticsearch gemacht und erlaubt Service als root ausgeführt werden. Jetzt funktioniert es. Danke. –

Verwandte Themen