해당 실습 내용은 개별적으로 수행하고 책의 이론과 중요 포인트만을 선별하여 요약하였다
- 컨테이너
- OS와 커널을 공유하고 프로세스를 분리하는 구조
- 어플리케이션 의존 관계를 컨테이너 안에 집약할 수 있다
- 이미지: 컨테이너 실행을 위해 필요한 빌드된 패키지
- 오케스트레이터
- 컨테이너 그룹을 관리하는 서비스
- 제어 플레인
- K8s(EKS) 마스터 노드: 클러스터 전체 환경을 관리하는 노드
- Amazon ECS: 컨테이너를 동작시키는 실행 환경 서비스가 아닌 관리 서비스
- ECS를 이용하는 경우 각 서비스와 테스크를 수명 주기별로 분리하여 운영하는 것을 추천
- Blue/Green 배포를 구현하기 위해 프로덕션/테스트 리스너를 ALB에 설정할 수 있다
- 데이터 플레인
- K8s(EKS) 워커 노드: 파드를 생성하고 서비스
- Amazon EC2: 컨테이너 호스트로 사용 가능
- Aws Fargate: 완전 관리형으로 호스트를 관리하지 않음
- 테스크로 불리는 복수의 컨테이너를 그룹으로 만들어 Firecracker라는 마이크로 VM 위에서 실행된다
- GPU 를 사용할 수 없고, K8s의 Demon Set 사용이 불가능
- EKS + EC2+ Fargate: 상주 실행이 필요하면 EC2를 사용하고, 스팟처리는 Fargate를 이용하는 구조
- 모니터링
- 시스템에 문제 발생을 즉시 발견해 시스템 가용성을 유지하는 것
- trace: 컴포넌트 간 처리 및 어플리케이션 내부 처리를 추적하기 위한 정보
- Fluent Bit: Fluentd 에 비해 플러그인은 적지만 자원 효율이 좋은 라이브러리
- 보안
- 기밀정보는 Secrets Manager 또는 System Manager Parameter Store 에 저장하고 사용하는 것이 좋다
- 네트워크 접근 보안은 WAF를 이용하는 것을 선호하며 CloudFront, ALB, API Gateway 에서 이용 가능하다
- 공격자에게 가까울 수록 좋으므로 CloudFront에 연결하는 것이 효율적이다
- 인터넷에 직접 공개되는 AWS 서비스는 추가 요금 없이 AWS Shield Standard 이용이 가능하다
- 네트워크
- 외부 통신이 필요한 경우: Private Subnet 에 컨테이너를 배치 하는 경우 NAT Gateway를 별도 Public Subnet에 배치하고 이를 Internet Gateway와 연결하여 통신한다
- Internet Gateway는 VPC 별로 한 개만 설정가능하다
- 내부에서만 AWS 서비스 통신하는 경우: 각 서비스 별로 VPC 엔드 포인트를 설정하여 통신해야 한다
- 안정성
- Fargate로 ECS 서비스를 실행하면 ECS 내부 스케쥴러가 AZ Zone 부하 균형을 조절하며 작업을 배치한다
- ALB 타깃 그룹에 ECS 테스크를 등록해두면 장애 발생 시 ALB가 자동으로 해당 테스크를 대상에서 제거한다
- Scaling
- ECS Application Auto Scaling 에서는 CloudWatch 지표 임계치에 따라 스케일아웃/인이 실행된다
- 정책
- 단계 조정: 지표 값이 임계치에 도달하면 스케일 아웃/인을 수행하는 방식
- 대상 추적 조정: 지정한 지표의 설정값이 유지되도록 스케일 아웃/인을 수행하는 방식
- OS 가상화: OS 가상화는 게스트 OS 별로 커널을 점유하는 구조
- Aws App Runner: 인프라 관련 구축을 모두 블랙박스화하는 완전 관리형 서비스
- AWS는 운영과 개발 환경의 계정을 분리 운영하는 구성을 추천하고 있다
- IaC: 코드를 이용하여 인프라 아키텍처를 구성하고 관리하는 방식