AWS DevOps 교육과정 3일차 정리

본 글을 2018년 11월 한국 AWS에서 교육받은 내용을 메모해 뒀던 글을 다시 정리하여 올린 글입니다.
용어, 한글표기 등은 시간 관계상 맞추지 않았습니다.

OpsWorks

  • 앞서 말한 EB같은 것은 1레이어 생성이 가능하다면, 보다 통합적으로 관리 할 수 있음
  • 세밀한 컨트롤 가능(Chef)
  • 개념
    • Stack : cloud formation과 동일 - 관리할 자원의 집합
    • Layer : 인스턴스, 자원의 구성 - OpsWorks(EC2 인스턴스)계층과 서비스(AWS관리형 서비스) 계층
    • Scaling :
    • Chef recipes : OpsWorks로 생성된 인스턴스에는 chef용 agent가 기본설치됨
  • OpsWorks서비스가 인스턴스의 생명주기를 관리하고 상태를 확인할 수 있음.
  • 인스턴스에 agent가 있어서 레시피를 수행하고 상태를 OpsWorks로 보고함
  • 인스턴스가 5분이상 연결이 안되면 인스턴스 재시작 가능 - auto scaling과는 살짝다름 (AS는 인스턴스 삭제후 재등록)
  • Chef Cookbook - ruby 언어
  • Attribute file + Template + Recipe
  • http://docs.aws.amazon.com/opsworks/latest/userguide/cookbooks-101.html
  • OpsWorks + DevOps 통합
  • OpsWorks는 완전 스크립트 화 가능
  • 실행중 업데이트 가능 - cookbooks 전달(어제 강의처럼 롤백의 어려움)
  • 블루-그린 배포 가능
  • OpsWorks + Cloud Formation
  • CF로 인프라를 구성하고, OpsWorks로 애플리케이션 계층 배포

  • 비교
    • Elastic Beanstalk : 완성형 서비스
    • OpsWorks : EB와 CD의 중간
    • CodeDeploy는 인프라 구성 불가 - CF랑 같이 써야됨

컨테이너

  • 컨테이너는 하나의 프로세스라고 생각하면 되지만, 각 프로세스간의 격리가 이루어짐
  • 가상화를 통해 호스트OS레벨에서 격리 - 커널은 공유
  • 다양한 앱이 각자의 파일시스템, 저장소, 램을 가짐
  • 장점
    • 개발및 배포가 단순화, 패키징 해두면 어디서나 실행가능
    • EC2 사용률 극대화
    • ELB가 ALB(Application Load Balancer)가 되어 분배해줌(port ?)
  • Docker는 외부기업(Docker 허브 : 이미지를 등록해 둘 수 있음(유/무료))
  • 프라이빗 레지스트리 (CF로 템플릿 제공)
  • AWS ECR(EC2 Container Registry)
  • 이미지(이게 컨테이너들의 구성인듯) = Docker file = Task
  • 규모가 커지면서 관리 문제가 발생
  • 복수 컨테이너 / 복수 버전 / 복수 인스턴스 -> ECS
  • ECS
    • Task : (=Docker file)
    • Task definition : 작업 정의
    • Run task : 1회성 작업 / Service task : 지속적으로 돌아감
  • 배포방법
    • Zip, repository로 빌드, AMI, Docker컨턔이너
    • AMI : Application AMI(최신 운영버전의 앱 설치된) > Base AMI(목적에 맞게 최적화) > Foundation AMI(기본적인 설정) > AWS AMI(AWS에서 제공)
    • AMI : Custom > Gold > Silver

Code Pipeline

  • 빌드를 해주는건 아니고, CI CD를 조율
  • 소스코드(Git..), Build(Jenkins…), Test, Deploy(EB, CodeDeploy,,,), Invoke(커스텀 함수를 Lambda로 제공)
  • Lab에서 보면
    • S3에 git소스가 push 되면 code pipeline에 트리거
    • CP에서 해당 소스를 인지하여 codeDeploy로 배포
    • 다음단계로 테스트 수행(using Jenkins의 execute shell)
    • Jenkins가 feedback을 주는가?(Jenkins의 Post-Build인거 같은데…)
    • 성공되었다면 다음 단계 CP 수행
    • CD 실행
  • 위와 같은 방식으로 반복되어 흘러감

튜닝

  • 성능 튜닝
  • 남의 튜닝 충고를 그대로 따라하는 건 남이 먹는 약을 그대로 먹는것과 동일 -> 직접 테스트
  • 운영과 동일한 환경 구축, Scale in/out 점검
  • 테스팅 도구 사용
  • ELB튜닝
  • 크로스 AZ
  • DNS 캐쉬하지 않음
  • 애플리케이션 핼스체크의 빠른 응답
  • Route53의 alias사용
  • ELB단 이후로 SSL 종료(안쪽은 신뢰있다고 가정)
  • Auto Scaling
  • 지표는 1개만 가능(CPU, Mem), 만약 두개를 동시에 보려면 커스텀agent를 설치하여 알람으로 noti
  • T2는 크래딧이 쌓이므로 이를 지표로(크래딧이 없으면 성능 10%만 사용가능하므로 크래딧을 체크해야함. 크래딧이 남도록 운영해야 함 - 큰 사이즈)
  • 쓰레싱(스케일 인아웃 설정 미스로 계속 확장 축소 반복) 감시
  • sticky session지양
  • AutoScaling 이슈 - 빠르게 확장되지 않을 경우
  • 상세모니터링 활성화
  • 샘플링 기간
  • 쿨다운 기간
  • 규모 조정 단위(늘어나는 요청 만큼 크게 키우는지)
  • 갯수 단위로 확장 / 비율단위로 확장
  • AutoScaling 이슈 - 규모 조정이 안됨, 쓰레싱
  • 고급 관리
  • 확장/축소 이벤트 시 어떻게 애플리케이션을 배포할지 고려
  • 생명주기에 맞춰 훅 사용
  • EC2 적합한 성능 찾기 - 카나리아 방법 : 인스턴스 한개를 ELB에서 바꿔봄. 해당 인스턴스가 적합하면 점차 다 바꿈

  • 클라우드 와치를 쓰려면 EC2에 agent가 설치되어 log를 발생시켜야 함