【问题标题】:Deploying golang app in cmd folder to AWS Beanstalk将 cmd 文件夹中的 golang 应用程序部署到 AWS Beanstalk
【发布时间】:2017-02-22 08:05:48
【问题描述】:

我有一个预先存在的 golang 项目,其文件夹结构如下(为了便于阅读,将文件夹最小化)。

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

现在,由于我的项目 Web 服务器位于 ./cmd/vano 中,我需要创建自定义 BuildfileProcfile。所以我就这么做了

这是我的构建文件

make: ./build.sh

build.sh 文件:

#!/usr/bin/env bash

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

最后是我的 Procfile:

web: bin/application

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

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

我使用 git 压缩源代码:

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

并将其上传到 AWS Beanstalk。我是如何不断收到错误的,而 AWS 错误似乎并不是阅读最多的。这是我的错误

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

错误信息

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

额外的错误信息:

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'

【问题讨论】:

  • 安装依赖可能失败。 /var/log/eb-activity.log 文件中的内容是什么?
  • 为什么不提供依赖项然后压缩代码。不用go get ./...
  • 工头好像失败了,你的 Procfile 有效吗?
  • @KennyGrant 我的 Procfile 大部分来自 AWS 文档
  • @MayankPatel 我可以轻松做到这一点,除非我必须从 cmd 文件夹中提供供应商,这对我来说似乎是错误的

标签: amazon-web-services go amazon-elastic-beanstalk


【解决方案1】:

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

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

你可以在本地编译它:

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

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

【讨论】:

  • 这是我不得不采用的方法,而不是我想要的方法,而且我不喜欢它向我的应用程序添加 bin 文件夹的事实,但它似乎是最简单的解决方案
  • 我个人使用这个解决方案并且对它非常满意,你可以使用最新的 Go 1.8(AWS 是在 Go 1.6 上,不是吗?),它加快了部署速度,你可以看到和在上传之前在本地修复任何错误,它可以减少您对 AWS 基础设施的依赖,因为它可以在任何地方(GC、VPS 等)使用。我不介意 bin 文件夹:)
  • 我将继续检查这个答案,它并没有完全“回答”这个问题,但它确实提供了一个可行的解决方案。
  • 这太棒了!这将允许我使用 Go 1.8!但是文件夹结构、资产等怎么样,我要保持它们一样吗?只需添加 bin/应用程序?我可以使用这种方法在相对文件夹(即./data)中写入磁盘吗?
  • 这里有点晚了,但是你可以在 build.sh 中包含上面的行,这意味着你不需要在源文件中包含二进制文件
猜你喜欢
  • 2014-09-25
  • 2015-01-25
  • 2014-05-03
  • 2021-02-11
  • 2018-12-07
  • 1970-01-01
  • 2022-06-11
  • 2018-04-21
  • 2017-04-14
相关资源
最近更新 更多