공부하기싫어
article thumbnail

원래 아래 링크의 TaskCat 을 이용한 cloudformation stack 의 ci/cd 파이프라인을 만들어보려고 했으나

aws 강의를 듣던 중 SAM 프레임워크에 대해서 배웠고

이 프레임워크를 jenkins 와 ansible 을 이용해서 통합시킬 수 있을것 같아서 한번 해보려고 한다

 

https://aws-quickstart.github.io/quickstart-taskcat-ci/#_postdeployment_steps

 

TaskCat CI/CD Pipeline for AWS CloudFormation on AWS

This document is provided for informational purposes only. It represents current AWS product offerings and practices as of the date of issue of this document, which are subject to change without notice. Customers are responsible for making their own indepe

aws-quickstart.github.io

 

+ 23.03.02

SAM 프레임워크를 사용해 pipeline 을 만드려고 했으나

SAM 이 서버리스에만 중점을 두고있고 yaml 파일이 지나치게 길어질 수 있어서

CDK 를 사용해 구성해보는 것으로 변경했다

 

 

1. Goal

개발 환경 CI/CD 파이프라인의 생성 목적은 다음과 같다

 

  • cloudformation resource 로의 지속적 통합 + 배포
  • IaC 를 통한 인프라 관리
  • 로컬에서 push 후 개발용 container / Serverless Application / Prod instance 로의 배포 자동화

 

2. Work Flow - process

글로 먼저 쓰면서 생각을 정리해봤다

 

1. 코드 작성 후 깃허브로 푸시하면

2. WebHook 이 푸시를 감지하고

3. jenkins 서버에 트리거되서

4. ansible 을 통해 dev-container 로 명령들을 실행

5. 명령에 의해 dev-container 에서 git pull 이 실행, SAM 파일 패키징 실행

6. 패키징으로 인해 S3 버킷에 cloudformation template 이 저장되고

7. 해당 파일을 사용해 SAM deploy 로 스택 배포

 

정도로 이루어지게 해볼 예정이다.

 

 

3. Work Flow - flow chart

For Serverless Application

1. push

- 코드 작성 후 git repo 로 push

2. webhook

- 설정해놓은 jenkins url 로 webhook

3. run jenkinsfile

- 웹훅 트리거 후 jenkinsfile 에 따라 아래 세부 단계 진행

  3.1. git pull

    - git repo 에서 수정된 코드 pull

  3.2. sam package

    - sam 프레임워크로 sam 파일을 cloudformation template 로 변환

    - application code 를 패키징 후 s3 버킷에 저장 후 객체 uri 를 변환된 template.yaml 에 반영

  3.3. sam deploy

    - 변환된 template.yaml 을 사용해 cloudformation create/update 실행

4. stack deploy

- changeset 을 참고해 cloudformation 이 stack 에 수정사항 반영

 

For Autotrade Server

a. push

- 코드 작성 후 git repo 로 push

b. webhook

- 설정해놓은 jenkins url 로 webhook

c. run jenkinsfile

- 웹훅 트리거 후 jenkinsfile 에 따라 아래 세부 단계 진행

  c.a. 실행중인 백그라운드 프로세스 종료 + 기존 파일 삭제

  c.b. git pull + 백그라운드로 python 스크립트 실행

 

 

이렇게 구현해봐야겠다

리포지토리는 서버리스용, 온디멘드용 따로 구성하는걸로하고

업비트 api key 같은 비밀번호는 직접 scp 로 업로드 하는걸로 하자

 

 

3. Work Flow - flow chart

 

 

For Serverless Application

1. push

- 코드 작성 후 git repo 로 push

2. webhook

- 설정해놓은 jenkins url 로 webhook

3. run jenkinsfile

- 웹훅 트리거 후 jenkinsfile 에 따라 아래 세부 단계 진행

  3.1. git pull

    - git repo 에서 수정된 코드 pull

  3.2. cdk bootstrap

    - 애플리케이션을 부트스트랩하고 CloudFormation changeset 을 생성

    - 배포를 위해 사용할 필수 S3 버킷과 IAM 역할이 포함된 CDKToolkit 이라는 스택을 생성

    - cloudformation 에 사용할 template 생성 (cdk synth 명령으로 확인가능)

  3.3. cdk deploy

    - 변환된 template.yaml 을 사용해 cloudformation create/update 실행

4. stack deploy

- changeset 을 참고해 cloudformation 이 stack 에 수정사항 반영

 

For Autotrade Server

a. push

- 코드 작성 후 git repo 로 push

b. webhook

- 설정해놓은 jenkins url 로 webhook

c. run jenkinsfile

- 웹훅 트리거 후 jenkinsfile 에 따라 아래 세부 단계 진행

  c.a. 실행중인 백그라운드 프로세스 종료 + 기존 파일 삭제

  c.b. git pull + 백그라운드로 python 스크립트 실행

 

SAM 프레임워크 사용에서 CDK 를 통한 통합으로 바꿨다

AWS 강의에서 CDK 를 깊게 다루지도 않았고 JS 로 실습했지만

하나씩 찾아보면서 CDK 를 활용해 인프라를 python 코드로 작성해볼 예정이다