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