使用配置文件自定义 AWS Elastic Beanstalk

  • 2012-12-17
  • 本文字数:2017 字

    阅读完需:约 7 分钟

用户现在可以通过 YAML 配置文件来自定义 AWS 的 Elastic Beanstalk 的配置了。你可以通过配置来进行如下操作:下载并安装包、下载并解压文件、创建文件、创建用户 / 组、运行命令、启动 / 停止服务、定义容器的设置等。 过去,你只能通过创建自定义的亚马逊系统镜像(AMI)来配置 Elastic Beanstalk 环境,或者修改你的应用使其能够在部署时自动配置。自定义的 AMI 创建后,需要进行维护,因为它不会对操作系统、应用或 AWS Elastic Beanstalk 主机管理器进行任何更新。相比之下,配置文件是更好的选择。

在 Tomat 6/7、Python 2.6 和 Ruby 1.8.7/1.9.3 等环境中都可以使用 Elastic Beanstalk 配置文件。亚马逊虽然计划支持 PHP 和.NET 的环境,但并未透露具体计划。如果你有安装了 Tomcat 的 Elastic Beanstalk 的环境,那你需要进行迁移以获得Elastic Beanstalk 配置文件的特性。你需要登陆AWS 控制台查看环境的容器类型,来验证你当前的环境的容器类型是否满足需求。

Elastic Beanstalk 配置文件的扩展名必须是.config。你可以在.ebextensions 目录下建立多个.config 文件,这是应用程序目录的一级目录。.ebextensions 目录和 Java 中 WAR 文件的 WEB-INF 目录一样,都是一级目录。

Elastic Beanstalk 配置文件基于 YAML,其中的元素有:

packages:packages 元素支持下载安装已打包好的应用和组件。它支持的包管理器有 apt,yum,rubygems,python 和 rpm。下面是使用 yum 添加 logwatch 的例子:


packages:
 yum:
   logwatch: [7.3.6]

sources:sources 元素允许你下载并解压包。你可以引用外部地址,或是其他软件源。它支持的格式有 tar,tar+gzip,tar+bz2 以及 zip。下面以从 GitHub 下载并解压最新版本 jQuery 为例:


sources:
 /home/ec2-user/jquery: https://github.com/jquery/jquery/zipball/master

files:files 元素允许你创建文件,文件内容可以直接写在配置中或是从指定 URL 获取。文件以词典顺序写入磁盘。下面以创建 README 文件并从外部 URL 获取内容为例:


files:
 /home/ec2-user/README.md: https://raw.github.com/jquery/jquery/master/README.md

users, groups:users 元素允许你在 EC2 的实例上创建 Linux/UNIX 的用户。groups 元素允许你创建 Linux/UNIX 组并指定组 ID。下面是 AWS 文档中的一个例子:


users:
 - myuser :
     groups:
      - group1
      - group2
     uid: 50
     homedir: "/tmp"

groups:
 - group1 : 45
 - group2 : 99
 - group3

commands:commands 元素允许你执行 shell 命令。所有命令将按照字典序顺序执行。这些命令在应用和 Web 服务器安装前以及应用文件解压缩之前运行。下面以重命名先前我们下载的文件为例:


commands:
 rename-README:
   command: mv README.md README
   cwd: /home/ec2-user

container_commands__:container_commands 元素允许你执行容器命令。这些命令在应用和 Web 服务器安装完成、应用文件解压后,应用文件部署之前运行。container_commands 命令按照字典序顺序执行。在自动伸缩组中,有一个作为 leadr 角色的实例。如果 leader_only 的值为 true,那么命令只在 leader 实例上运行。下面以在 leader 实例上使用定制的 Tomcat 的 server.xml 为例:


container_commands:
 replace-server_xml:
   command: cp .ebextensions/server.xml /etc/tomcat7/server.xml
   leader_only: true

services:services 元素允许你定义实例运行时,哪些服务要启动,哪些服务要停止。这个简直同时可以允许你指定与 source、package、file 的关联关系。下面是 AWS 文档中的一个例子。


services:
 sysvinit:
   - myservice:
       enabled: true
       ensureRunning: true

option_settings__:option_settings 元素允许你定义容器的设置。这些值将以环境变量的形式存在于亚马逊 EC2 的实例中。Python 容器支持的命名空间有 aws:elasticbeanstalk:application:environment,aws:elasticbeanstalk:container:python 和 aws:elasticbeanstalk:container:python:staticfiles 。Java 容器支持的命名空间有 aws:elasticbeanstalk:application:environment 和 aws:elasticbeanstalk:container:tomcat:jvmoptions 。Ruby 容器支持的命名空间有 aws:elasticbeanstalk:application:environment 。下面以将 Tomcat 中 JVM 的 max heap size 设置为 512MB 为例。


option_settings:
 - namespace: aws:elasticbeanstalk:container:tomcat:jvmoptions
   option_name: Xmx
   value: 512m

如需了解更多的信息,请访问自定义配置AWS Elastic Beanstalk 环境页面。对于YAML 的新用户可以使用在线YAML 解析器,对创建配置文件有很大帮助。

查看英文原文 Customize AWS Elastic Beanstalk with Configuration Files


感谢马国耀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。