在过去的几个月里,我已经熟悉了与Node.js相关的AWS OpsWorks部署流程 - Go的部署似乎是另一种动物。
从我收集的内容来看,这就是我需要编译成功的Go部署:
我读到的每个地方似乎都在宣传Go部署的简易性,因为依赖项包含在二进制文件中,但这似乎意味着您正在开发环境中编译应用程序并将其推送到云端。这似乎不是一个在开发团队中运作良好的过程。
https://github.com/crowdmob/chef-golang-web-server-cookbook
我一直试图让CrowdMob的Chef Scripts工作,但无济于事。我继续得到如下错误:
[2014-08-01T16:08:22+00:00] WARN: Cookbook 'templates' is empty or entirely chefignored at /opt/aws/opsworks/current/merged-cookbooks/templates
在部署期间处理依赖关系的正确方法是什么?
是否有使用Chef部署Go到AWS的既定做法?
答案 0 :(得分:3)
使用CircleCi,Travis或您自己的设置Jenkins等持续集成服务。
在持续集成服务上
此时,您可以使用AWS命令行和从此版本创建的zip文件在Elastic Beanstalk上创建新版本。
venv/bin/aws elasticbeanstalk create-application-version ...
然后只需从EB仪表板中选择要部署的版本。
对于使用Chef的简单服务是过度的恕我直言。 Docker提供了一个简单的工作流程。
答案 1 :(得分:2)
使用Docker容器选项,然后使用弹性beanstalk的命令行客户端在项目根目录中初始化您的环境,然后您只需执行一个' git aws.push'来自同一个地方。
在项目中正确配置Dockerfile
并推送到eb,EBS' docker container app将在安装了golang的情况下获取正确的图像,然后对项目依赖项执行go get
,然后编译并运行您的应用程序。这听起来更复杂,但实际上非常容易。
以下是我在EBS上运行简单golang webapp所做的视频演练的链接。上传项目的方法不使用git
。相反,我将其压缩并上传,但建议使用git方法(我这样做)以实现自动部署。
YouTube: How to run a go web app on Amazon's Elastic Beanstalk
答案 2 :(得分:1)
我在使用Elastic Beanstalk和Go建立一个良好的构建过程时也遇到了一些问题。我不想使用Docker,所有人似乎都朝着这个方向前进..所以..你可以看看这个项目:https://github.com/battle-arena/heimdall
您可以使用Buildfile
和Procfile
找到自定义设置。我依靠CI系统来构建发布包...
基本上我做了以下事情:
install.sh
如果一切正常install.sh
将创建一个构建文件夹和一个将使用aws-cli
工具EB
后,Buildfile
将运行build.sh
,它将基本上提取具有适当结构的压缩包,并运行go get ./...
和{{1 }} go build
将运行生成的二进制文件我认为结果非常好,您可以使用任何CI工具。