部署到 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.go
、Procfile
、Buildfield
和 build.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?