使用配置檔案自定義AWS Elastic Beanstalk

暱稱c4a%……&\r\n發表於2012-12-18

使用者現在可以通過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\
\

containercommands:containercommands 元素允許你執行容器命令。這些命令在應用和Web伺服器安裝完成、應用檔案解壓後,應用檔案部署之前執行。containercommands命令按照字典序順序執行。在自動伸縮組中,有一個作為leadr角色的例項。如果leaderonly 的值為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\
\

optionsettings:optionsettings 元素允許你定義容器的設定。這些值將以環境變數的形式存在於亞馬遜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)關注我們,並與我們的編輯和其他讀者朋友交流。

相關文章