AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 Go 应用程序部署到 AWS Elastic Beanstalk

本教程将演练创建 Go 应用程序并将其部署到 AWS Elastic Beanstalk 环境的过程。

先决条件

本教程假设您对基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台有一定了解。如果尚不了解,请按照开始使用 Elastic Beanstalk 中的说明启动您的第一个 Elastic Beanstalk 环境。

为了遵循本指南中的步骤,您需要命令行终端或外壳,以便运行命令。命令显示在列表中,以提示符 ($) 和当前目录名称(如果有)开头:

~/eb-project$ this is a command this is output

在 Linux 和 macOS 中,可使用您首选的外壳程序和程序包管理器。在 Windows 10 中,您可以安装 Windows Subsystem for Linux,获取 Ubuntu 和 Bash 与 Windows 集成的版本。

本教程使用 Elastic Beanstalk 命令行界面 (EB CLI)。有关安装和配置 EB CLI 的详细说明,请参阅使用安装脚本安装 EB CLI配置 EB CLI

创建 Go 应用程序

创建项目目录。

~$ mkdir eb-go ~$ cd eb-go

接下来,创建您将使用 Elastic Beanstalk 部署的应用程序。我们会创建一个“Hello World”RESTful Web 服务。

本示例输出根据访问服务所使用的路径而变化的自定义问候语。

在此目录中创建名为 application.go 的文本文件,包含以下内容:

~/eb-go/application.go

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { fmt.Fprintf(w, "Hello World! Append a name to the URL to say hello. For example, use %s/Mary to say hello to Mary.", r.Host) } else { fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:]) } } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":5000", nil) }

使用 EB CLI 部署 Go 应用程序

接下来,创建应用程序环境并使用 Elastic Beanstalk 部署已配置的应用程序。

创建环境并部署 Go 应用程序

  1. 使用 eb init 命令,初始化 EB CLI 存储库。

    ~/eb-go$ eb init -p go go-tutorial --region us-west-2 Application go-tutorial has been created.

    此命令创建名为 go-tutorial 的应用程序,并配置本地存储库,以最新的 Go 平台版本创建环境。

  2. (可选)再次运行 eb init 以配置默认密钥对,以便使用 SSH 连接到运行您的应用程序的 EC2 实例。

    ~/eb-go$ eb init Do you want to set up SSH for your instances? (y/n): y Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]

    如果您已有密钥对,请选择一个,或按提示创建一个。如果您没有看到提示或需要以后更改设置,请运行 eb init -i

  3. 使用 eb create 创建环境并将应用程序部署到此环境中。Elastic Beanstalk 会自动为应用程序构建二进制文件,并在端口 5000 上启动它。

    ~/eb-go$ eb create go-env

环境创建大约需要 5 分钟,将创建以下资源:

  • EC2 实例 – 配置来在您选择的平台上运行 Web 应用程序的 Amazon Elastic Compute Cloud (Amazon EC2) 虚拟机。

    各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 nginx 作为 Web 应用程序前的反向代理,向其转发请求、提供静态资产以及生成访问和错误日志。

  • 实例安全组 – 配置 Amazon EC2 安全组以允许端口 80 上的入站流量。通过此资源,HTTP 流量可以从负载均衡器到达运行您的 Web 应用程序的 EC2 实例。默认情况下,其他端口不允许流量进入。

  • 负载均衡器 – 配置来向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。

  • 负载均衡器安全组 – 配置 Amazon EC2 安全组以允许端口 80 上的入站流量。利用此资源,HTTP 流量可从 Internet 到达负载均衡器。默认情况下,其他端口不允许流量进入。

  • Auto Scaling 组 – 配置来在实例终止或不可用时替换实例的 Auto Scaling 组。

  • Amazon S3 存储桶 – 使用 Elastic Beanstalk 时创建的源代码、日志和其他项目的存储位置。

  • Amazon CloudWatch 警报 – 用于监控环境中的实例负载的两个 CloudWatch 警报,在负载过高或过低时触发。警报触发后,您的 Auto Scaling 组会扩展或收缩进行响应。

  • AWS CloudFormation 堆栈 – Elastic Beanstalk 使用 AWS CloudFormation 启动您的环境中的资源并传播配置更改。这些资源在您可通过 AWS CloudFormation 控制台查看的模板中定义。

  • 域名 – 一个域名,它以下面的形式路由到您的 Web 应用程序:subdomain.region.elasticbeanstalk.com

Elastic Beanstalk 管理所有这些资源。当您终止环境时,Elastic Beanstalk 会终止其包含的所有资源。

注意

Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息,请参阅 将 Elastic Beanstalk 用于 Amazon S3

当环境创建过程完成时,请使用 eb open 打开网站。

~/eb-go$ eb open

这将使用为应用程序创建的域名打开一个浏览器窗口。

如果您没有看到应用程序运行,或者出现错误消息,请查看排查部署问题以获取有关如何确定错误原因的帮助。

如果您确实看到应用程序在运行,那么恭喜,您已使用 Elastic Beanstalk 部署了 Go 应用程序!

清除

Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk 会终止与环境关联的所有 AWS 资源,例如 Amazon EC2 实例数据库实例负载均衡器、安全组和警报

终止 Elastic Beanstalk 环境

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Actions (操作),然后选择 Terminate Environment (终止环境)

  4. Confirm Termination (确认终止) 对话框中,输入环境名称,然后选择 Terminate (终止)

利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。

或者,使用 EB CLI,请执行以下操作。

~/eb-go$ eb terminate