Site icon Mr. 沙先生

用 Taskcat 測試 CloudFormation

最近在寫 AWS CloudFormation Template,這些 Template 是準備給公司其他單位更快速上手專案的範本,所以當這個 Template 要被 release 之前一定要萬無一失,不然就會是災難 … 而其中重要的一環設計就是「測試」。

這段時間找了好幾個 CloudFormation 測試工具,包含 cfn_nagcfn-lint .. 等工具,最後看到官方推出的 taskcat 還蠻符合 CloudFormation Template 的測試情境

介紹 Taskcat

Taskcat 是 AWS 官方在 2019 年部落格公開的 CloudFormation Testing Tool

Up your AWS CloudFormation testing game using TaskCat

TaskCat is an open source tool developed by the AWS Quick Start team to automate the testing of AWS CloudFormation templates. It tests an AWS CloudFormation template by deploying it in multiple AWS Regions simultaneously and generates a report with a pass/fail result for each Region. You can customize the tests through a test config file. TaskCat is implemented in Python and available as a Docker container and pip module.

由 AWS QuickStart team 所開發的 Automation Tool (我最常關注的 Github Repository 之一),而 taskcat 本身涵蓋的測試:

為何選 Taskcat?

選用 taskcat 的原因是,一個好的 CloudFormation Template 少不了 Acceptance Test,尤其是像 S3 這種 Bucket 有 Unique-Id 的服務,在設計 Bucket Naming 時就必須注意到 pre-deployment 時不能重複。

可以做到 Acceptance Test 後,就可以開始嘗試情境:

確保這個 CloudFormation 在 create 或是 update 的情況都不會造成問題。

使用 Taskcat

一個 taskcat 專案的目錄結構:

.
|-- .travis.yml
|-- ci
|   |-- input.json
|   `-- taskcat.yml
`-- templates
    `-- main.yaml

Taskcat 必須由一個 taskcat.yml 作為主要設定檔

global:
  owner: shazi7804@gmail.com
  qsname: cfn-vpc-module
  regions:
    - ap-northeast-1
    - ap-northeast-2
    - ap-south-1
    - ap-southeast-1
    - ap-southeast-2
    - ca-central-1
    - eu-central-1
    - eu-west-1
    - eu-west-2
    - sa-east-1
    - us-east-1
    - us-east-2
    - us-west-1
    - us-west-2
  reporting: true
tests:
  test-scenario1:
    parameter_input: input.json
    template_file: main.yaml
    regions:
      - ap-northeast-1

在 Travis CI 跑 Taskcat

提供一個簡單的 .travis.yml 範例

language: python
services:
  - docker
install:
  - pip install -r taskcat
  - curl -s https://raw.githubusercontent.com/aws-quickstart/taskcat/master/installer/docker-installer.sh
script:
  - taskcat -c ci/taskcat.yml

由於 taskcat 會真實的佈署 CloudFormation,所以必須在 Travis CI 設定 AWS IAM User Key。

執行過程會歷經幾個階段:

  1. taskcat 跑 Test task 的 container (所以一定要有 Docker 環境)
  2. taskcat 執行 lint 測試每個 CloudFormation Template
  3. 呼叫 CloudFormation API 建立 CloudFormation Stack
  4. 等待 CloudFormation Stack Event 狀態更新
  5. 確認 CloudFormation Stack Event 成功或失敗
  6. Destory CloudFormation Stack

已知問題

參考

Exit mobile version