Daily Oops

使用 AWS CodeDeploy 跑起你的 WordPress - 官方教學筆記

2016-04-01

使用 AWS CodeDeploy 跑起你的 WordPress - 官方教學筆記

為何要部屬 WordPress?就因為他是 CodeDeploy Tutorial 的第一個範例。AWS Documention 有個特點,就是到處 Reference 來 Reference 去,你很難在單一流程完整跑完所有的任務,非得要搭著其它份文件一起對照。筆者英文也沒那麼好,看著看著就會漏東漏西,文件又滿滿的都是字,沒有圖片可以參考,真令人崩潰。

CodeDeploy 是 AWS 眾多部屬方案中,看起來比較單純的一種。寫好 Setup 程式的 Shell Script,再聲明好 appspec.yml,定義每個 deploy life cycle 不同的階段要跑的動作,用 AWS CLI Tool 把 repo 打包上傳到 S3,再到 CodeDeploy console 定義應用程式部屬規則、後臺發起一個 deployment(一個部屬行動),CodeDeploy Service 便會把你的 code 部屬到你設定的 Deployment Group,依照 Group 設定的機器不同,你可以在同一個機器部屬很多個 Application,或是同一個 Application 部屬到很多台機器,端看設定,啦。

當然,AWS 系列就是啥都可以用 CLI 跑,只要開好對應權限的 role 並拿到 Access ID 和 Secret Key,我們也可以交由第三方 CI 服務,比如說 CodeShip,來幫我們完成「打包程式碼並上傳 S3」、「發起部屬行動」這種的工作。

以下便大致記錄一下本日折騰的感想與流程。

概念

CodeDeploy 約略是 14 年 11 月推出的服務,在此幹一張官圖,看圖說故事。 CD

  1. 在你的開發機器上寫好 code 、設定好 appspec.yml,上傳到 github 或是打包傳到 s3
  2. 在 CodeDeploy 設定好部屬邏輯
  3. 每一台 instance 的 agent 把 codebase 從 s3 或 github 拉下來
  4. 跑部屬 script!裝裝裝

大概醬,英文版可以看,另外強烈建議 aws 系列最好都先從 Concept 開始看,要不然鐵定被無限連結地獄搞死,崩潰。

名詞解說

可以開好官方教學的分頁,淨身準備一下,接下來講解教學中會出現的名詞。其實名詞解釋放在教學開頭實在是挺不好的,我自己跑教學也是跟著實作之後才有點感覺,在還沒進行操作前做的說明都是廢話。話雖然是這樣說啦,可是這是筆記又不是演講,你翻到下面還是可以翻回來看啊,所以我還是寫在這了。呵呵。滿多中文名詞都我隨便翻的 XD,中文文件越少,我就掌握著更多的話語權(才怪),大家趕快來寫文件吧哈哈。

AWS 在各種服務開 API 開很大開不用錢的狀況下,權限的管理便十分重要,阿罵爽雲端福利社使用 IAM 角色權限管理服務,來區分出不同服務或使用者,對於 AWS 服務使用的權限隔離。舉例來說,CodeDeploy 在 AWS 裡算是一個服務(Service),雖然通通都是在 AWS 裡啦,但是你還是要給他一些對 AWS 資源的存取權限才可以,比如說當我們對好幾臺 EC2 Instances 設定了標籤(Tag),我們也要給 CodeDeploy 讀取 EC2 Intance 標籤的權限,CodeDeploy 才知道要部屬到哪幾台機器上啊,這就是權限管理的作用。

不同的權限,在 IAM 裡就叫做 Policy(方針)。當人有了多項 Policy 之後,能力越大,責任越重,你所要承擔的就是職責了(屁話),在 IAM 裡我們把他稱作角色職責 (Role)。在 AWS 裡面有不同的服務,Role 的類型也都不同,比如 EC2 Instance 的 Role 就叫 Instance Profile,用來管理 EC2 能有那些權限,在 CodeDeploy 官方教學裡,EC2 的職責是把用 agent 把 codebase 從 s3 拉下來,所以在啟動 Instance 之前,我們必須先設定好能夠存取 S3 的 Instance Profile,並在啟動(Launch) Instance 把 Role 指派給他。

不同的 Role Type。CodeDeploy 教學中用到的分別是 CodeDeploy 和 EC2 的 Role Type。

CodeDeploy 的 Service Role,直接掛上 AWS 建立好的 Policy,可以直接看出使用了那些權限。

跑教學…咦

我前面嫌的要死,就因為這次跑教學真的打死也找不到安裝 CodeDeploy agent 的步驟,反反覆覆翻了教學幾次,卻一直找不到哪裡出錯。以下來回顧一下。

首先,照著教學的說明先在 EC2 Launch 一個 Instance。他第一步教學的作用其實就是給你一個預先裝好 aws cli tools 的環境,好使用 cli 界面打包上傳 code 到 s3,用你自己的電腦其實就可以了。設定好 Keypair,透過 pem 檔 ssh 進機器後,先來安裝 codedeploy agent 到機器上。裝到一半你會發現連 agent 的 aws s3 bucket 都抓不下來,原來是我們還沒設定 EC2 的 Instance Profile,也就是 EC2 類型的 Role。請去 IAM 設定,並如同連結裡面加上 S3 的存取權限。這權限一定要開,即使現在用 wget 直接拉 bucket 的 agent install script 下來裝完,之後要從 s3 部屬時沒開也沒法抓啊。

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": [
          "s3:Get*",
          "s3:List*"
        ]
      }
    ]
  }

範例 S3 的 widecard 權限,當然還是詳細指定比較好。先新增 Policy,在建立 EC2 Type 的 Role Attach 上去,或是建立 Role 時寫成 Inline Policy。

是的。就是這兩點搞死我。第一,EC2 Role 要先設定 S3 存取權,並在 Instance 建立時掛載。第二,CodeDeploy Agent 要先裝上 Instance

教學是都搜尋的到啦,可是排成一個完整版不好嗎,都已經拆 Step by Step 了,還 Lost 一堆,崩潰啦,難怪各種 AWS 代管服務蓬勃發展啊無誤 XDDD

再跑一次

大概就這樣啦,這還只是 WordPress 而已,我要部屬的可是 Rails App 欸,之後想必有更細節的其它地方。這樣跑完了一次(還順便被雷了一下午),對 AWS 的理解就更深了,請期待之後的後續文章,哈哈哈(不要說一說就不寫了)

(完)

Prev 從 Hackpad 搬家到 Quip Next ELK 安裝筆記
Power by Hugo / Theme SK1 by J-Siu