AWS CodeDeploy:修订间差异
(→外部機器) |
(→外部機器) |
||
第59行: | 第59行: | ||
=== 外部機器 === | === 外部機器 === | ||
當機器不在[[EC2]]上時,有幾種方法可以註冊到CodeDeploy的系統上,會被稱為On-Premises Instance。這邊我們介紹的方法是一台機器給一個IAM user的方式: | 當機器不在[[EC2]]上時,有幾種方法可以註冊到CodeDeploy的系統上,會被稱為On-Premises Instance。這邊我們介紹的方法是一台機器給一個IAM user的方式 。先在一般的機器上產生出對應的權限與設定檔(不需要在需要註冊的機器上) : | ||
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session"> | ||
$ aws deploy register --instance-name api-example-1 --region us-east-1 | $ aws deploy register --instance-name api-example-1 --region us-east-1 | ||
第67行: | 第66行: | ||
然後把生出的<code>.yml</code>檔案傳到要註冊的機器上: | 然後把生出的<code>.yml</code>檔案傳到要註冊的機器上: | ||
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session"> | ||
$ scp codedeploy.onpremises.yml api-example-1:/tmp/ | $ scp codedeploy.onpremises.yml api-example-1:/tmp/ | ||
第72行: | 第72行: | ||
然後在要註冊的機器上執行<code>aws deploy install</code>: | 然後在要註冊的機器上執行<code>aws deploy install</code>: | ||
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session"> | ||
$ cd /tmp | $ cd /tmp |
2018年5月10日 (四) 02:47的版本
AWS CodeDeploy是AWS提供的服务之一,用于发布服务器端的软件。
简介
AWS CodeDeploy是一套服务器软件布署的服务,跟其他软件布署不同的点主要在于:
- 非SSH由外部连入更新,是由服务器端主动取得档案并且布署。
这点在云端时代特别重要。布署发起人不容易知道现在线上有哪些机器,甚至有可能在开新机器时(如Auto Scaling)有race condition,而导致布署发起人不知道有新机器需要布署。
安装
在服务器端需要安装Agent,这只Agent会负责取得档案并且执行设定的步骤[1]。以Ubuntu的环境为例子来说[2],会需要先安装Ruby 2.0(在14.04下)或Ruby 2.3(在16.04下)后,取得安装设定档执行:
$ sudo apt install ruby2.3
$ cd /tmp
$ wget https://aws-codedeploy-us-east-1.s3.amazonaws.com/latest/install
$ chmod 755 install
$ sudo ./install auto
在非EC2的机器上可能会跑比较久(需要等169.254.169.254
的timeout,在EC2上时这个IP会有HTTP服务提供资讯给Instance)。
然后看Agent是否有启动:
$ sudo service codedeploy-agent status
如果没有的话可以用start
启动:
$ sudo service codedeploy-agent start
设定
软件本身有两段设定,一段是Deploy的发起端透过awscli呼叫,另外一段是在appspec.yml
定义在服务器上的行为。
发起端
通常会有两个指令:
- 将现在的目录打包起来传到S3上。可能会使用
--ignore-hidden-files
避免.git
或是.svn
被包进去,但这个方式会使得.htaccess
不会被包进去,对于使用Apache的使用者来说要注意。 - 要求CodeDeploy送指令到各机器上抓档案。
$ aws deploy push --application-name "${APPLICATIO_NAME}" --region us-east-1 --s3-location s3://${S3_BUCKET}/${GIT_BRANCH}-${GIT_HASH}
$ aws deploy create-deployment --application-name "${APPLICATION_NAME}" --deployment-group-name "${DEPLOYMENT_GROUP_NAME}" --region us-east-1 --s3-location bucket="${S3_BUCKET},key=${GIT_BRANCH}-${GIT_HASH},bundleType=zip"
服务器端
在appspec.xml
内最简单的设定就是指定要将这包档案解到哪边:
version: 0.0
os: linux
files:
- source: /
destination: /srv/www.example.com
外部机器
当机器不在EC2上时,有几种方法可以注册到CodeDeploy的系统上,会被称为On-Premises Instance。这边我们介绍的方法是一台机器给一个IAM user的方式。先在一般的机器上产生出对应的权限与设定档(不需要在需要注册的机器上):
$ aws deploy register --instance-name api-example-1 --region us-east-1
然后把生出的.yml
档案传到要注册的机器上:
$ scp codedeploy.onpremises.yml api-example-1:/tmp/
然后在要注册的机器上执行aws deploy install
:
$ cd /tmp
$ sudo aws deploy install --config-file codedeploy.onpremises.yml --region us-east-1
上面的指令目前会因为他想装ruby2.0
而烂掉(不知道什么时候才会修好),我们只是要他把设定档塞进系统。请照上面的方式改装us-east-1
的install
档案即可(这边的指令与上面是一样的,为了方便这边复制一份过来):
$ sudo apt install ruby2.3
$ cd /tmp
$ wget https://aws-codedeploy-us-east-1.s3.amazonaws.com/latest/install
$ chmod 755 install
$ sudo ./install auto