AWS CodeDeploy是AWS提供的一项服务,可以帮助客户快速可靠地将应用部署到亚马逊EC2实例或本地服务器中。想要了解此项服务的更多信息,请登录AWS CodeDeploy主页或是查阅AWS CodeDeploy文档。
当你使用AWS CodeDeploy服务部署应用时,部署过程涉及一系列预先定义好的名为deployment lifecycle events(部署周期事件)的阶段。这些事件为你提供一个机会来运行脚本(或挂钩),构成部署过程的一部分。想要了解更多关于如何指定与周期事件相对应的脚本的信息,请参见AppSpec File Reference中的hooks部分。在本博客中,我们将会聚焦于如何使用环境变量来自定义这些脚本。
环境变量
客户们一直在寻求一种方法来提供关于部署的,并可被脚本使用的上下文信息。AWS CodeDeploy环境变量可以使你找到这一方法。AWS CodeDeploy目前支持以下环境变量:
1. LIFECYCLE_EVENT : This variable contains the name of the lifecycle event associated with the script. 2. DEPLOYMENT_ID : This variables contains the deployment ID of the current deployment. 3. APPLICATION_NAME : This variable contains the name of the application being deployed. This is the name the user sets in the console or AWS CLI. 4. DEPLOYMENT_GROUP_NAME : This variable contains the name of the deployment group. A deployment group is a set of instances associated with an application that you target for a deployment.
在执行脚本时,AWS CodeDeploy主机代理将会替代所有指向这些环境变量的引用。环境变量的一个典型的使用场景是根据部署组名称配置端口号。让我们以适用于AWS CodeDeploy的Linux样例应用为例来进行说明。该样例应用可以从GitHub和S3获得。该样例安装了Apache,并将一个简单的index.html文件拷贝到了根目录下。假设你有两个部署组:Staging和Production。你想将一个修正部署到Staging部署组中,并在将该应用推入到Production部署组前对其进行测试。但是,在Staging部署组中,Apache在端口9090运行,在Production部署组中在端口80运行。你不用创建两个包含不同安装脚本的修正,只需在脚本中根据部署组使用环境变量来自定义Apache端口。你将会在install_dependencies.sh挂钩脚本中使用到下面的代码片段。将以下各行行添加到yum install -y httpd之后。
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ] then sed -i -e 's/Listen 80/Listen 9090/g' /etc/httpd/conf/httpd.conf fi
环境变量的再一个使用场景就是根据部署组设置日志级别。你需要使用下面的代码片段:
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ] then sed -i -e 's/LogLevel warn/LogLevel debug/g' /etc/httpd/conf/httpd.conf fi
让我们来进一步展示一下,如何使用环境变量来自定义index.html文件。要实现这一过程,我们需要一个AfterInstall脚本,如下图所示:
#!/usr/bin/python import os strToSearch="This application was deployed using AWS CodeDeploy.
" strToReplace="This page for "+os.environ['APPLICATION_NAME']+" application and "+os.environ['DEPLOYMENT_GROUP_NAME']+" deployment group was generated by a "+os.environ['LIFECYCLE_EVENT']+" script during "+os.environ['DEPLOYMENT_ID']+" deployment.
" fp=open("/var/www/html/index.html","r") buffer=fp.read fp.close fp=open("/var/www/html/index.html","w") fp.write(buffer.replace(strToSearch,strToReplace)) fp.close
在Scripts文件夹中,将该文件保存为AfterInstall.py。你也必须修改appspec.yml文件来适配这一新的挂钩脚本。在包含ApplicationStop:的这一行前面添加如下所示的各行:
AfterInstall: - location: scripts/AfterInstall.py timeout: 300 runas: root
分发证书
环境变量是根据上下文信息(例如,应用名称或部署组名称)自定义脚本的好方法。环境变量的设计初衷并不是传递AWS证书或其他敏感数据。本帖是AWS Security Blog中的一篇,旨在向你展示如何使用IAM角色安全地将AWS证书分发到亚马逊EC2实例中。
原文链接:
http://blogs.aws.amazon.com/application-management/post/Tx1PX2XMPLYPULD/Using-CodeDeploy-Environment-Variables?adbsc=
social_launches_20150529_46690356&adbid=604403221826686976&adbpl=tw&adbpr=66780587
( 翻译/吕东梅 责编/王鑫贺 )
订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!
AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。