【问题标题】:Deploying Golang Applications to AWS OPSWORKS将 Golang 应用程序部署到 AWS OPSWORKS
【发布时间】:2014-09-25 03:22:15
【问题描述】:

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

根据我收集到的信息,这是我编译成功的 Go 部署所需要的:

  • 在 EC2 盒子上安装 go
  • 从 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

部署期间处理依赖关系的正确方法是什么?

是否有任何将 Go 与 Chef 一起部署到 AWS 的既定做法?

【问题讨论】:

  • 仅部署二进制文件(而不是在服务器上构建)的哪一部分似乎不适用于团队? Push ,提交后挂钩构建,然后使用 Chef/whatever 将二进制文件推出。或者将其推送到 S3 并让服务器将其拉下。

标签: deployment go cloud chef-infra aws-opsworks


【解决方案1】:

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

然后在持续集成服务上

  1. 添加 github 提交后挂钩。
  2. 测试/构建二进制文件
  3. 将 zip 文件创建为工件

此时,您可以使用 AWS 命令​​行和从该版本创建的 zip 文件在 Elastic Beanstalk 上创建一个新版本。

venv/bin/aws elasticbeanstalk create-application-version ...

然后只需从 EB 仪表板中选择要部署的版本。

对于使用 Chef 的简单服务,恕我直言。 Docker 提供了一个简单的工作流程。

【讨论】:

    【解决方案2】:

    使用 Docker 容器选项,然后使用 elastic beanstalk 的命令行客户端在项目根目录中初始化您的环境,然后您可以在同一个地方简单地执行“git aws.push”。

    在您的项目中正确配置 Dockerfile 并推送到 eb,EBS 的 docker 容器应用程序将拉取安装了 golang 的正确映像,然后对您的项目依赖项执行 go get,然后编译并运行您的应用程序。这听起来要复杂得多,但实际上非常简单。

    下面是我为在 EBS 上运行一个简单的 golang webapp 所做的视频演练的链接。上传项目的方法没有使用git。相反,我将其压缩并上传,但建议使用 git 方法(我也这样做了)用于自动化部署。

    YouTube: How to run a go web app on Amazon's Elastic Beanstalk

    【讨论】:

      【解决方案3】:

      我在使用 Elastic Beanstalk 和 Go 设置良好的构建过程时也遇到了一些问题。我不想使用 Docker,而且似乎所有人都在朝着这个方向前进。所以。你可以采取看这个项目:https://github.com/battle-arena/heimdall

      在那里你会发现一个使用BuildfileProcfile的自定义设置..我依靠CI系统来构建发布包......

      基本上我会做以下事情:

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

      我觉得效果还不错,可以和任何 CI 工具一起使用。

      【讨论】:

        猜你喜欢
        • 2017-08-16
        • 2016-12-12
        • 2015-02-09
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        • 2018-07-07
        • 2014-11-11
        • 2014-04-25
        相关资源
        最近更新 更多