用 Bitbucket Pipeline + CodeDeploy 部署程式到EC2

使用到的服務

  • Bitbucket pipeline
  • AWS Code Deploy
  • AWS IAM
  • Amazon S3
  • Amazon EC2

建置流程

前置步驟

  • 設定 VPC

每一階段要做的事情

  1. 設定 Auto Scaling Group
    1. 建立 S3 bucket(名稱的格式:${application-name}-codedeploy-deployment
    2. 建立 IAM instance role(給 EC2 instance 從 S3 抓程式碼)
    3. 建立 EC2 Launch Template,並選擇下面其中一種方式設定啟動 instance 的方式:
      1. 在 user data 撰寫 bash script 來安裝 CodeDeploy agent、環境等等…(範例
      2. 事先開一台 instance ,安裝 CodeDeploy agent、環境等等…,然後在 EC2 console 將 instance 做成 AMI 並設定到 Launch Template
    4. 用前一步驟的 template 建立 Auto Scaling Group(在建立 ASG 的步驟中可按需建立 Elastic Load Balancer、Target group)
  2. 建立 Code Deploy Deployment Group
    1. 建立 IAM service role(Code Deploy 用的,需要(內建)AWSCodeDeployRole policy)
    2. 建立 Code Deploy Application
    3. 建立 Code Deploy Deployment Group,設定部屬到 ASG 中,按需勾選「啟用負載平衡」
  3. 建立 Bitbucket Pipeline
    1. 在 Codebase 根目錄撰寫 bitbucket-pipeline.yml、appspec.yml
    2. 建立 IAM user(Bitbucket Pipeline 用的,至少需要內建 AWSCodeDeployDeployerAccess policy、自建有 S3 bucket putObject 權限的 policy)
    3. 設定 S3 access policy,允許 IAM user 寫入(範例
    4. 到 Bitbucket 你想要的 Repository 左側的 Pipeline tab,點下去設定,並貼上環境參數如:
      1. AWS_ACCESS_KEY_ID
      2. AWS_SECRET_ACCESS_KEY
      3. AWS_DEFAULT_REGION
      4. APPLICATION_NAME:Code Deploy Application 的名稱
      5. DEPLOYMENT_GROUP:Code Deploy Deployment Group 的名稱
    5. git push

需要考量的點

  • Code Deploy Deployment Group 的部屬策略、ASG 內 instance 的常駐數量會影響到 deploy 成功與否(舉例:使用 OneAtATime 策略,它要求「最小狀況良好的主機數目值」為 1。若是 ASG 內部通常只開 0 ~ 1 台 instance,則 CodeDeploy 會警告因為開始 deploy 後會違反「最小狀況良好的主機數目值」,所以不允許部屬)

服務花費

Code Deploy不花費
S3儲存、get 費用
Bitbucket Pipeline每個方案有附贈 build times 額度
若超過可以 $10/month for 1000 mins 來購買

參考資料


日期

作者

分類

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *