部署到 Elastic Beanstalk 时如何安装 Go 依赖项?

Posted

技术标签:

【中文标题】部署到 Elastic Beanstalk 时如何安装 Go 依赖项?【英文标题】:How do you install Go dependencies when deploying to Elastic Beanstalk? 【发布时间】:2016-08-23 02:21:17 【问题描述】:

我有一个应用程序被分成几个不同的文件,但我在部署它时遇到了问题。我关注了this documentation,但我得到了以下信息:

application.go:7:5: cannot find package "github.com/gorilla/handlers" in any of:

我假设我需要安装我在 $GOPATH 中使用的库作为部署过程的一部分,但我不知道该怎么做,也没有找到任何示例。使用 Procfile 似乎很有希望,但我的所有搜索都不断将我引向 Heroku 资源。

【问题讨论】:

看看我对类似问题的回答:***.com/questions/36103362/… 【参考方案1】:

您可以使用供应商工具将所有依赖项存储在供应商文件夹中。

我使用govendor。

Steps:
 1. go get -u github.com/kardianos/govendor
 2. cd $GOPATH/yourProject
 3. govendor init
 4. govendor add +external

现在目录 'yourProject' 可以在任何机器上独立构建,只要它位于 $GOPATH 中。

注意:需要 Go 1.6+ 或 1.5 且 GO15VENDOREXPERIMENT=1。

编辑: 根据fl0cke 的评论。如果 Elastic Beanstalk 仅支持 Go 1.4,则可能的选项是:

交叉编译二进制文件并将其部署到 Elastic Beanstalk。 创建一个安装了 Go 1.6+ 的 custom AMI.. 按照fl0cke's answer创建Docker Image图像。

【讨论】:

【参考方案2】:

我遇到了同样的问题,并且能够使用 eb client 解决它。

仅涵盖基础知识:

    主文件的名称应为application.go

    确保您的应用正在侦听端口 5000。

    您需要在主根目录中使用Procfile

    web: bin/application
    

    你需要一个Buildfile

    make: ./build.sh
    

    最后你需要一个 build.sh 文件

    #!/usr/bin/env bash
    # Stops the process if something fails
    set -xe
    
    # All of the dependencies needed/fetched for your project.
    # This is what actually fixes the problem so that EB can find your dependencies. 
    # FOR EXAMPLE:
    go get "github.com/gin-gonic/gin"
    
    # create the application binary that eb uses
    GOOS=linux GOARCH=amd64 go build -o bin/application -ldflags="-s -w"
    

然后,如果您运行 eb deploy(在创建初始 eb 存储库之后),它应该可以工作。我认为您可以通过压缩 application.goProcfileBuildfieldbuild.sh 脚本并将其加载到 Elastic Beanstalk 控制台来获得相同的结果,但我还没有尝试过。

我编写了一个完整的教程,用于在 EB here 上部署 Gin 应用程序。专门关于使用 Elastic Beanstalk 进行部署的部分是 here。

【讨论】:

【参考方案3】:

截至 2019 年年中,这对我有效。要点是编译本地并上传你的二进制文件。从你的项目根目录运行:

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

然后将此二进制文件包含在您上传到 EB 控制台的应用程序 zip 中。

【讨论】:

以上是关于部署到 Elastic Beanstalk 时如何安装 Go 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

当您拥有私有 NPM 包时,如何使用 CLI 部署到 Elastic Beanstalk?

如何使用TFS 2017部署到Elastic Beanstalk?

如何将 Spring Boot 应用程序战争部署到 AWS Elastic Beanstalk?

如何使用 TFS 2017 部署到 Elastic Beanstalk?

如何在部署时使用 Elastic Beanstalk 指定敏感环境变量

发生故障时如何查看 AWS Elastic Beanstalk 部署过程日志