IaC로 AWS 인프라 관리하기
이진성 | AUSG
이진성
CHAI.FINANCE | AUSG
- 서버 개발(DDD/TDD)
- 클라우드 인프라 관리
- 지식 공유
“AWS Console에 대한 첫 인상”
- 몇 번의 클릭으로 간편하게 리소스를 생성
Instances
“AWS Console에 대한 첫 인상”
- 몇 번의 클릭으로 간편하게 리소스를 생성
- 사용한 만큼만 비용을 지출
“AWS Console에 대한 첫 인상”
- 몇 번의 클릭으로 간편하게 리소스를 생성
- 사용한 만큼만 비용을 지출
- 인프라 소프트웨어의 큰 경험 없이도 사용 가능
Management
Console
25 Regions
81 Availability Zones
200+ AWS Services
“리소스의 히스토리 파악”
- 리소스의 생성이나 변경 이유
- 리소스를 관리하거나 사용하는 서비스 현황
- 리소스의 대한 권한 정책이나 설정에 이유
“리소스의 복제/롤백”
- 특정 리소스를 동일한 설정으로 복제
- RDS의 버전, Container 런타임, CF 설정 등 복제가 되지 않는 부분이 존재
- 동일한 환경이 보장되지 않는다면 사이드 이펙트가 존재할 수 있음.
- 이전 설정으로 되돌리는 경우도 매뉴얼 작업으론 한계 존재
“검토 가능성”
- 리소스 생성시 리소스의 Subnet, IAM Role/Permission,
공통 태그 등의 조직 규정을 따라야하는 경우
- 리소스 생성/변경 전 장애 등과 같은 이유로 다양한 시점에서
검토되어야 하는 경우
리소스의 히스토리 파악 리소스의 복제/롤백 검토 가능성
리소스의 히스토리 파악 + 리소스의 복제/롤백 + 검토 가능성
리소스의 히스토리 파악 + 리소스의 복제/롤백 + 검토 가능성
인프라를 코드처럼 관리하면 어떨까?
리소스의 히스토리 파악 + 리소스의 복제/롤백 + 검토 가능성
Infrastructure As Code(aka. IaC)
AWS CDK*를 소개합니다.
*CDK : Cloud Development Kit
AWS CDK무엇인가
코드로 클라우드 인프라를 정의할 수 있으며
CloudFormation*을 통해 Provisioning*하는 프레임워크
*CloudFormation : JSON/YAML형태로 AWS 인프라를 정의할 수 있도록 지원하는 도구
*Provisioning : 서비스를 제공하기 위해 미리 준비해주는 것
AWS CDK CloudFormation
AWS Cloud
Instance Bucket Amazon RDS
instance
Provisioning
AWS CDK Architecture
CDK Application
Stack
Construct Construct
CloudFormation Template
{
“Resources”: …
}
AWS Cloud
Instance Bucket Amazon RDS
instance
AWS CDK History
2018.06 – v0.7.0
AWS 기본 Construct 개발 시작
- S3/ACM/CloudFormation/CodeBuild/SNS +
2019.07 – v1.0.0 release
CF 변환 도구 및 CLI 지원
다양한 언어(C#/Java/Python) 지원
기본적인 AWS서비스에 대한 Construct 컴포넌트 제공
2021.01 – v2.0.0-alpha
단일 패키지 통합
V1 Deprecated 제거
레가시 부트스트래핑 제거
라이브러리 개발/배포 방식 변경
AWS CDK DEMO with Typescript.
AWS-CDK 설치하기
App
- CDK Application의 시작점
- 하나의 App Construct에는 여러 Stack을 가질 수 있음
- 프로비저닝에 필요한 여러가지 속성 정의 가능
Stack
- 하나의 배포 단위
- 정의된 여러 Construct는 단일 범위로 프로비저닝
- 여러 Construct(Infrastructure Resource) 기술하기 위한 곳
Construct
- CDK의 구성 블록이며, 하나의 클라우드 컴포넌트를 나타냄
- 단일 컴포넌트(S3)를 나타낼 수 있으며, 여러가지로 구성된 컴포넌트를 나타내기도 함.
- L1/L2로 구분
Construct L1
- Cfn 접두사가 붙으며 CloudFormation 컴포넌트
- 모든 필요한 필드에 대해서 직접 정의하며 사용해야 함
Construct L2
- CDK Construct Library에서 정의된 것으로 L1보다 추상화된 수준의 컴포넌트
- 여러가지 method를 제공하여 적은 표현으로 많은 기능을 사용할 수 있음
공개된 S3 Bucket를 생성할 경우
Construct L1 Construct L2
CDK로 정의한 인프라 배포
CDK로 정의한 인프라 배포
VPC/Subnet(with Multi-AZ) 구현 😀😀
VPC
Availability Zone 1 Availability Zone 2
Private subnet - server
Public subnet - public
isolated subnet - database
NAT gateway
Router
Internet gateway
VPC/Subnet(with Multi-AZ) 구현 😀😀
VPC/Subnet(with Multi-AZ) 구현 😀😀
IAM Users/Groups 😎😎
Frontend Developers group Backend Developers group
Permissions Permissions
+
Users Users
User User User User
IAM Users/Groups 😎😎
IAM Users/Groups 😎😎
RDS/Fargate 적용하기
VPC
Availability Zone 1 Availability Zone 2
Private subnet - server
Public subnet - public
isolated subnet - database
NAT gateway
Router
Internet gateway
ALB ECS Cluster
Fargate Task
Fargate Task
RDS Instance
RDS/Fargate 적용하기
RDS/Fargate 적용하기
RDS/Fargate 적용하기
RDS/Fargate 적용하기
RDS/Fargate 적용하기
ECS클러스터 ECS 서비스
RDS/Fargate 적용하기
ECS클러스터
ECS 서비스
Server Subnet에 할당
RDS/Fargate 적용하기
결과
Multi Environment
Multi-Environment란,
어플리케이션이 있어서 여러 환경이 존재한다는 것
Multi Environment
Test Environment Staging Environment Production Environment
ALB ECS Cluster
Fargate Task RDS Instance
ALB ECS Cluster
Fargate Task RDS Instance
ALB ECS Cluster
Fargate Task RDS Instance
Multi Environment
Instances
메뉴얼 세팅은 환경별로 동일하게 설정하기 매우 어렵고
이는 어플리케이션에 영향을 줄 가능성 존재
Multi Environment
Test Environment Staging Environment Production Environment
환경이 복잡할수록 Multi Environment 달성은 어려움
Multi Environment
하지만, AWS-CDK로는 이것을 쉽게 달성 가능
Multi Environment
위와 같이 스택을 하나 더 추가
Multi Environment
몇 분만에 demo-cdk의 모든 인프라를 동일한 구조로 복제
Multi Environment
단 하나의 커맨드로 모든 생성된 리소스를 깔끔하게 삭제 가능.
Limitations
Limitations – Code와 인프라간 불일치 존재
모든 Construct가 코드에서 삭제했다고 삭제되지 않음
Amazon Simple Storage
Service (Amazon S3)
Amazon Relational Database
Service (Amazon RDS)
Limitations – 리전 제한
해당 리전에 출시되지 않거나 제한적인 리소스 사용의 경우
배포 시 실패할 수 있음
L2 Coverage
Limitations – CFN Coverage
CDK L2 Construct는 수많은 모든 서비스에 대해서 모두 지원하지 않음.
(단, 일반적으로 사용되는 대부분의 서비스는 지원)
AWS Elastic Beanstalk
AWS Cloud Development Kit
(AWS CDK)
Amazon Elastic Container
Service (Amazon ECS)
Limitations – Don’t use to deploy newer version
CDK는 인프라를 작성하는 것에 사용되므로
어플리케이션의 새로운 버전/업데이트를 배포하는 용도로는 적합하지 않음
“IaC First”
감사합니다.

IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021