DevOps-TTAskCat을 사용하여 CloudFormation 템플릿 자동 테스트

개시하다
안녕하세요.이번에는 오픈소스인 AWS CloudFormation(CFn) 템플릿을 사용한 자동 테스트에 관한 이야기다.
CFn 템플릿을 사용하면 문법 오류 검사가 통과되었지만, 나는 네가 이런 경험을 한 적이 있다고 생각한다. 일단 운행을 시도하면 창고의 제작에서 오류가 발생할 것이다.AWS TaskCat은 많은 사람들에게 익숙하지 않은 도구라고 생각하지만, 실제로 사용하면 CFn 템플릿의 자동 테스트를 간단하게 진행할 수 있다.
이번에는 리눅스에서 개발 환경을 만드는 것부터 간단한 샘플을 사용하여 테스트를 하고 테스트 자동화를 도입하는 간단한 CI/CD 파이프라인 구축을 소개하고 싶습니다.앞으로 CFn 템플릿 개발 희망자 중 자동 테스트를 하려는 분들은 참고해주시기 바랍니다.
이른바 AWS TaskCat
AWS TaskCat은 AWS CloudFormation(CFn) 템플릿을 자동으로 테스트하는 데 사용되는 파이톤제 테스트 도구입니다.
이 도구를 사용하면 지정한 구역에서 CFn 템플릿에서 임시 추출 환경을 자동으로 생성하고, 각 구역에서 deproy가 결과를 나타낼 수 있는 보고서를 생성하며, 테스트에서 임시로 만든 환경을 삭제할 수 있습니다.
또한 AWS TackCat을 실행할 때 Docker가 필요하므로 Docker가 지원되지 않는 AWS CloudShell에서는 테스트를 수행할 수 없습니다.
AWS TaskCat을 사용해 보도록 하겠습니다.
'서문'에서 말한 바와 같이 이번에는 리눅스에서 개발 환경을 만드는 것부터 간단한 샘플을 이용한 테스트의 집행, 테스트 자동화를 결합한 간단한 CI/CD 파이프의 구축을 소개한다.
먼저 개발 환경 설정부터
그럼 리눅스에서 개발 환경을 만들고 싶습니다.우선 AWS TaskCat 설치를 위한 사전 준비로 파이톤의 가상 환경을 만들어보자.한편 이번 예에서 사용된 Linux 릴리즈는 Amazon Linux2입니다.
$ sudo yum install -y python3
$ python3 --version
Python 3.7.10
$ python3 -m venv venv37
$ . venv37/bin/activate
그런 다음 AWS TaskCat을 설치합니다.
$ python3 -m pip install taskcat
$ taskcat --version
 _            _             _
| |_ __ _ ___| | _____ __ _| |_
| __/ _` / __| |/ / __/ _` | __|
| || (_| \__ \   < (_| (_| | |_
 \__\__,_|___/_|\_\___\__,_|\__|

version 0.9.25
0.9.25
TaskCat 테스트에 필요한 docker 서비스와 다음 단계에서 사용한git를 추가합니다.
$ sudo yum install -y docker git
$ sudo systemctl start docker
마지막으로 AWS CLI 를 설정하여 개발 환경을 구축합니다.
$ aws configure
수동으로 테스트 수행
그럼 간단한 샘플로 AWS TaskCat 사용 테스트를 해보도록 하죠.이번에는 도쿄 지역(ap-northeast-1)과 오사카 지역(ap-northeast-3) 두 지역에 대해 같은 템플릿으로 창고를 만들 수 있는지 확인하고 싶습니다.
Step1. 테스트 템플릿 만들기
이번에는 VPC를 만들기 위한 아주 간단한 템플릿을 준비했습니다.
my-vpc.yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: Sample CloudFormation Template

Parameters:
  vpcIpv4CicdBlock:
    Type: String
    Default: 10.0.0.0/16
  vpcNameTag:
    Type: String

Resources:
  myVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref vpcIpv4CicdBlock
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: !Ref vpcNameTag

Outputs:
  myVpcId:
    Description: VPC ID
    Value: !Ref myVPC
    Export:
      Name: myVpcId
Step2. TaskCat의 테스트 정의 파일 만들기
그런 다음 TaskCat의 테스트 정의 파일.taskcat.yml을 만듭니다.이번 예는 도쿄 지역(ap-northeast-1)과 오사카 지역(ap-northeast-3)에서 테스트를 실시하는 것으로 정의됐다.
.taskcat.yml
project:
  name: sample-taskcat-project
  regions:
    - ap-northeast-1
    - ap-northeast-3
tests:
  test-my-vpc:
    parameters:
      vpcIpv4CicdBlock: 10.255.0.0/16
      vpcNameTag: test-vpc
    template: my-vpc.yml
Step3. 테스트를 해보도록 하겠습니다.
그럼 다음 명령으로 테스트를 수행하세요.테스트를 진행하면 스택 제작은 도쿄 지역과 오사카 지역을 병행해 수행되며, 각 구역의 스택 제작 성공 여부에 대한 결과 수집은 스택을 삭제할 때까지 자동으로 진행된다.
$ taskcat test run
 _            _             _
| |_ __ _ ___| | _____ __ _| |_
| __/ _` / __| |/ / __/ _` | __|
| || (_| \__ \   < (_| (_| | |_
 \__\__,_|___/_|\_\___\__,_|\__|

version 0.9.25
[INFO   ] : Linting passed for file: /root/aws-taskcat-sample/my-vpc.yaml
[S3: -> ] s3://tcat-sample-taskcat-project-XXXXXXX/sample-taskcat-project/my-vpc.yaml
[INFO   ] : ┏ stack Ⓜ tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f
[INFO   ] : ┣ region: ap-northeast-1
[INFO   ] : ┗ status: CREATE_COMPLETE
[INFO   ] : ┏ stack Ⓜ tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f
[INFO   ] : ┣ region: ap-northeast-3
[INFO   ] : ┗ status: CREATE_COMPLETE
[INFO   ] : Reporting on arn:aws:cloudformation:ap-northeast-1:<AWSアカウント名>:stack/tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f/XXXXXXX
[INFO   ] : Reporting on arn:aws:cloudformation:ap-northeast-3:<AWSアカウント名>:stack/tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f/XXXXXXX
[INFO   ] : Deleting stack: arn:aws:cloudformation:ap-northeast-3:<AWSアカウント名>:stack/tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f/XXXXXXX
[INFO   ] : Deleting stack: arn:aws:cloudformation:ap-northeast-1:<AWSアカウント名>:stack/tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f/XXXXXXX
[INFO   ] : ┏ stack Ⓜ tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f
[INFO   ] : ┣ region: ap-northeast-1
[INFO   ] : ┗ status: DELETE_COMPLETE
[INFO   ] : ┏ stack Ⓜ tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f
[INFO   ] : ┣ region: ap-northeast-3
[INFO   ] : ┗ status: DELETE_COMPLETE
실행하면taskcat-outputs 디렉터리에서 모든 영역의 실행 로그를 출력하기 때문에, 창고 제작의 성공 여부를 확인할 수 있습니다.
$ tree -a taskcat_outputs/
taskcat_outputs/
├── index.html
├── tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f-ap-northeast-1-cfnlogs.txt
└── tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f-ap-northeast-3-cfnlogs.txt

0 directories, 3 files
$ cat taskcat_outputs/*-ap-northeast-3-*.txt
-----------------------------------------------------------------------------
Region: ap-northeast-3
StackName: tCaT-sample-taskcat-project-test-my-vpc-d27c255f120c414fb370e9d2827a215f
*****************************************************************************
ResourceStatusReason:
Stack launch was successful
*****************************************************************************
:
다음은 로컬 환경에서 CFn 템플릿 테스트를 수행하는 방법에 대한 설명입니다.
CI/CD 파이프라인에 편입해 보세요.
다음에 한 걸음 더 나아가 원본 코드 업데이트를 터치점으로 하고 자동으로 테스트되는 CI/CD 파이프라인을 구축하여 실제 운행하는 곳으로 가고 싶습니다.또한 이번에는 AWS 자원의 제작을 간소화하기 위해 AWS의 빠른 시작을 이용하여 CI/CD 파이프라인을 구축하고 싶습니다.
또한 이번에 제작된 파이프라인은 개발 지점(예를 들어 개발자 지점)을 업데이트하면 이를 트리거로 하고 AWS TackCat을 이용한 자동 테스트를 실시하며 테스트가 성공한 후 특정 지점(예를 들어main 지점)으로 자동으로 통합한다.

Step1. GiitHub에 창고를 만들어 주세요.
일단 틀만 만들자.내용은 다음 순서에 따라 넣는다.

Step2. GiitHub을 사용한 액세스 토큰 만들기
Developer settings Personal access tokens >Generate new tokens에서 지정한 방법에 따라'repo'와'admin:repo hook'범위를 선택한 영패를 제작했습니다.

창설에 성공하면 영패는 다음과 같이 표시됩니다.스택을 만들 때 사용하기 때문에 먼저 복사하세요.또 영패 정보가 유출되면 번거롭기 때문에 절대 유출되지 않도록 주의하세요.
04-copy-github-pat.jpg
Step3. 시작 빠른 시작
그럼 빠른 시동을 활용해 환경을 구축하자.먼저 빠른 시작 웹 사이트의 빠른 시작 을 클릭합니다.

링크를 클릭하면 자동으로 스택으로 이동하여 화면을 만듭니다.만든 영역이 기본적으로 Olegon이면 적절하게 변경하고 "다음"을 누르십시오.

그런 다음 매개변수를 입력합니다.

필요에 따라 표기 등의 설정을 하고 화면에서 입력 오류가 있는지 확인한 후'창고 제작'을 실시한다.

그 다음 상태가 CREATE COMPLETE가 될 때까지 기다립니다.

이로써 CI/CD 파이프라인에 필요한 AWS 리소스 구축이 완료되었습니다.
Step4. CI/CD 파이프라인 동작 확인
그러면 GiitHub에 소스 코드를 로그인하여 CI/CD 파이프라인이 작동하는지 확인합니다.등록된 소스 코드는 방금 만든 이 파일입니다.
$ tree -a
.
├── my-vpc.yaml
└── .taskcat.yml

0 directories, 2 files
소스 코드를 창고를 만들 때 지정한 GiitHub의 감시 대상 지점 (예: 개발자 지점) 으로 밀어냅니다.
$ git init .
$ git remote add origin <GitHub上のリポジトリ>
$ git pull origin main
$ git branch develop
$ git checkout develop
$ git add .
$ git commit -m "initial commit"
$ git push origin develop
그럼 여기서부터 다시 AWS 관리 콘솔로 이동하겠습니다.방금 추선이 터치했을 때 시동이 걸렸는지 확인하기 위해 코드피플라인 화면으로 가자.CI/CD 파이프라인이 작동하는지 확인할 수 있을 것 같습니다.

이곳에서는 시추에서 건축 일지 등을 볼 수 있다.Build 관문의 CodeBuild 동작 상자의 "상세 정보"단추를 누르면 구축 로그를 확인합니다.출력 예시에서 지정한 영역에서의 테스트가 성공했음을 알 수 있습니다.
11-buildlog.png
TaskCat 테스트와 함께 제작된 CI/CD 파이프라인에 대한 설명입니다.
끝맺다
AWS TaskCat 어때요?
이번 빠른 가동으로 환경을 구축했지만 이미 파이프를 구축한 측이 창고에 추가.taskcat.yml하고 절차에 추가pip install tackcattaskcat test run만 하면 CFn 템플릿의 자동 테스트에 간단하게 편입할 수 있다.신경 쓰이는 사람 있으면 꼭 건드려.
AWS CloudFormation 템플릿 자동 테스트를 구현한'AWS TaskCat'에 대한 설명입니다.
  • AWS는 미국의 다른 나라의 아마존이다.com, Inc. 또는 그 관련 회사의 상표입니다.
  • GiitHub은 GiitHub Inc.의 상표 또는 등록 상표입니다.
  • Linux는 Linus Torvalds가 일본 및 기타 국가에서 등록한 상표나 상표이다.
  • 기타 본 자료에 기재된 회사명, 제품명은 각 회사의 등록 상품 또는 상표이다.
  • 좋은 웹페이지 즐겨찾기