2017-02-13 4 views
9

Ich habe ein bereits vorhandenes Golang-Projekt mit der folgenden Ordnerstruktur (minimiert den Ordner für die Lesbarkeit).Bereitstellen von Golang-App in cmd-Ordner zu AWS Beanstalk

- postgre 
    - service.go 
- cmd 
    - vano 
     - main.go 
    - vanoctl 
     - main.go 
vano.go 

Jetzt, da mein Projekt Web-Server in ./cmd/vano ist Ich brauche eine benutzerdefinierte Buildfile und Procfile zu erstellen. Also tat ich, dass

Hier ist mein Buildfile

make: ./build.sh 

build.sh Datei:

#!/usr/bin/env bash 

# Install dependencies. 
go get ./... 
# Build app 
go build ./cmd/vano -o bin/application 

und schließlich meine procfile:

web: bin/application 

So jetzt meine Ordnerstruktur sieht aus wie dieses:

- postgre 
    - service.go 
- cmd 
    - vano 
     - main.go 
    - vanoctl 
     - main.go 
vano.go 
Buildfile 
build.sh 
Procfile 

ich zip die Quelle mit git up:

git archive --format=zip HEAD > vano.zip 

und laden Sie sie auf AWS Bohnenstange. Wie auch immer, ich bekomme immer Fehler und AWS-Fehler scheinen nicht die am meisten gelesenen zu sein. Hier ist mein Fehler

Command execution completed on all instances. Summary: [Successful: 0, Failed: 1]. 

Fehlermeldung

[Instance: i-0d8f642474e3b2c68] Command failed on instance. Return code: 1 Output: (TRUNCATED)...' Failed to execute 'HOME=/tmp /opt/elasticbeanstalk/lib/ruby/bin/ruby /opt/elasticbeanstalk/lib/ruby/bin/foreman start --procfile /tmp/d20170213-1941-1baz0rh/eb-buildtask-0 --root /var/app/staging --env /var/elasticbeanstalk/staging/elasticbeanstalk.env'. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/01_configure_application.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI. 

Zusätzliche Fehlerinfo:

Failed to execute 'HOME=/tmp /opt/elasticbeanstalk/lib/ruby/bin/ruby /opt/elasticbeanstalk/lib/ruby/bin/foreman start --procfile /tmp/d20170213-1941-1baz0rh/eb-buildtask-0 --root /var/app/staging --env /var/elasticbeanstalk/staging/elasticbeanstalk.env' 
+1

Möglicherweise wurde eine Abhängigkeit nicht installiert. Was sagt es in '/ var/log/eb-activity.log' Datei? – mass

+1

Warum händigen Sie die Abhängigkeiten aus und zippen dann den Code. Keine Notwendigkeit zu tun "gehen./...". –

+0

Es sieht aus wie Vorarbeiter scheitern, ist Ihre Procfile gültig? –

Antwort

1

Ein anderer Ansatz hier anstelle der Verwendung eines procfile etc würde sein Quer kompilieren Ihre binäre (in der Regel ziemlich schmerzlos in gehen) und laden Sie es auf diese Weise, wie nach den einfachen Anweisungen in der Anleitung:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/go-environment.html

Sie können es nur kompilieren lokal mit:

GOARCH=amd64 GOOS=linux go build -o bin/application ./cmd/vano 

Dann zip der Datei Anwendung laden und es sollte funktionieren, vorausgesetzt, nur das Setup auszuführen, um diesen eine binäre erfordert.

+0

Dies ist der Ansatz, den ich nicht so nehmen musste, wie ich es wollte und ich mag nicht die Tatsache, dass es einen bin Ordner zu meiner Anwendung hinzufügt, aber es scheint die einfachste Lösung zu sein – Rodrigo

+1

Ich benutze dies Lösung persönlich und bin ganz zufrieden damit, können Sie die neueste Go 1.8 verwenden (AWS ist auf Go 1.6, oder?), es beschleunigt Deployen, und Sie können alle Fehler lokal vor dem Upload sehen und beheben, und es macht Sie weniger abhängig von der AWS-Infrastruktur, da sie überall verwendet werden kann (GC, VPS usw.). Es stört mich nicht den bin-Ordner :) –

+0

Ich gehe weiter, um diese Antwort zu überprüfen, es nicht vollständig "beantwortet" die Frage, aber es bietet eine funktionierende Lösung. – Rodrigo

Verwandte Themen