将Golang应用程序部署到AWS OPSWORKS

时间:2014-08-01 20:46:41

标签: deployment go cloud chef aws-opsworks

在过去的几个月里,我已经熟悉了与Node.js相关的AWS OpsWorks部署流程 - Go的部署似乎是另一种动物。

从我收集的内容来看,这就是我需要编译成功的Go部署:

  • 安装继续EC2框
  • 从GitHub中拉出私人存储库
  • 引入所有依赖项
  • 编译框的主要包
  • 使用我使用的几个标志启动二进制文件

我读到的每个地方似乎都在宣传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的既定做法?

3 个答案:

答案 0 :(得分:3)

使用CircleCi,Travis或您自己的设置Jenkins等持续集成服务。

在持续集成服务上

  1. 添加github post commit hook。
  2. 测试/构建二进制文件
  3. 将zip文件创建为工件
  4. 此时,您可以使用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

您可以使用BuildfileProcfile找到自定义设置。我依靠CI系统来构建发布包...

基本上我做了以下事情:

  • 将提交挂钩到CI系统
  • 在CI系统上,我运行测试,install.sh如果一切正常
  • install.sh将创建一个构建文件夹和一个将使用aws-cli工具
  • 发送到Elastic Beanstalk的结构
  • 发送到EB后,Buildfile将运行build.sh,它将基本上提取具有适当结构的压缩包,并运行go get ./...和{{1 }}
  • go build将运行生成的二进制文件

我认为结果非常好,您可以使用任何CI工具。