将cmd文件夹中的golang app部署到AWS Beanstalk

Rod*_*igo 9 go amazon-web-services amazon-elastic-beanstalk

我有一个预先存在的golang项目,具有以下文件夹结构(最小化文件夹以便于阅读).

- postgre
    - service.go
- cmd
    - vano
        - main.go
    - vanoctl
        - main.go
vano.go
Run Code Online (Sandbox Code Playgroud)

现在,因为我的项目Web服务器在./cmd/vano我需要创建一个自定义BuildfileProcfile.所以我做到了

这是我的Buildfile

make: ./build.sh
Run Code Online (Sandbox Code Playgroud)

build.sh文件:

#!/usr/bin/env bash

# Install dependencies.
go get ./...
# Build app
go build ./cmd/vano -o bin/application
Run Code Online (Sandbox Code Playgroud)

最后我的Procfile:

web: bin/application
Run Code Online (Sandbox Code Playgroud)

所以现在我的文件夹结构如下所示:

- postgre
    - service.go
- cmd
    - vano
        - main.go
    - vanoctl
        - main.go
vano.go
Buildfile
build.sh
Procfile
Run Code Online (Sandbox Code Playgroud)

我使用git压缩源代码:

git archive --format=zip HEAD > vano.zip
Run Code Online (Sandbox Code Playgroud)

并将其上传到AWS Beanstalk.我如何不断收到错误,AWS错误似乎并不是最常见的.这是我的错误

Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
Run Code Online (Sandbox Code Playgroud)

错误信息

[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.
Run Code Online (Sandbox Code Playgroud)

额外错误信息:

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'
Run Code Online (Sandbox Code Playgroud)

Ken*_*ant 2

这里的另一种方法而不是使用 procfile 等是交叉编译你的二进制文件(通常在 go 中非常轻松)并按照指南中的简单说明以这种方式上传它:

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

您可以使用以下命令在本地编译它:

GOARCH=amd64 GOOS=linux go build -o bin/application ./cmd/vano 
Run Code Online (Sandbox Code Playgroud)

然后上传应用程序文件的 zip,它应该可以工作,假设您的设置只需要运行这个二进制文件。