IaC (Infrastructure as Code, 코드형 인프라)
- 인프라를 코드 형식으로 정의, 관리하는 방식
- 수동으로 인프라를 생성/관리하는 방식에서 벗어나 자동화/코드화를 통해 인프라를 생성 및 관리
- 자동화된 프로비저닝 / 유연성 / 확장성 / 버전 관리
- ex) 앤서블(Ansible) / 테라폼(Terraform) / AWS CloudFormation
AWS CloudFormation
- AWS의 대표적인 IaC 서비스
- AWS 인프라를 선언하는 방식으로 작성
- 리소스 생성, 보안그룹 연결 등을 순서대로 생성하도록 선언
- 자동화 / 버전관리 / 코드검토를 통한 검증 / 스택 비용 추적 가능 / 생산성 / 관심 분리 (VPC stack, Network stack, App stack 분리 가능)
CloudFormation 동작 원리
- S3에 템플릿을 업로드 (템플릿 수정 불가, 새로운 버전의 템플릿 업로드, JSON / YAML 지원)
- CloudFormation에서 템플릿 가져옴
- CloudFormation에서는 버전1, 2의 차이점 파악 후 업데이트에 필요한 것 파악
- 스택은 이름으로 구분
- 스택 삭제 시 리소스 한번에 모두 삭제
CloudFormation - Recourse
- 스택 내 AWS 구성요소
- 서로 참조 가능 (리소스 간 연결 가능, EC2 <-> Security Group)
- AWS가 리소스의 생성 수정 삭제
- Type - 유형. AWS::aws-product-name::data-type-name 형식
- AWS::AutoScaling::AutoScalingGroup (ASG)
- AWS::EC2::Instance (EC2 Instance)
- Properties - 프로퍼티. 리소스에 필요한 프로퍼티 정의 (AZ, ImageId, InstanceType(t2.micro) 등)
- 리소스 양을 동적으로 만들 수 없음 (모든 것은 선언되어야 함)
- 대부분의 AWS 서비스 지원 (지원 안하는 서비스는 람다 사용자 지정 리소스를 통해 작업 가능)
CloudFormation - Parameters
- CloudFormation 템플릿에 입력값을 제공하는 방식
- 다른 회사 등에 재사용 시 필요할 수 있는 내용
- 인스턴스에 연결되는 키 페어 등은 파라미터로 지정 불가
- !Ref 를 통해 매개변수 참조 가능
Parameters:
SecurityGroupDescription:
Description: Security Group Description
Type: String
Resources:
ServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: !Ref SecurityGroupDescription
CloudFormation - Mappings
- 템플릿에서의 고정변수
- 하드코딩
- 사용자 환경에 따라 일부 값을 하드코딩 해야 할 때 유용
- 모든 값은 명시적으로 템플릿에 쓰여야함
- 사용할 모든 값을 알고 있을 때 (리전, AZ, AWS 계정, 환경) = 매핑
- 사용자에 따라 값이 바뀌는 경우 = 매개변수
- !FindInMap [MapName, TopLevelKey, SecondLevelKey] 로 사용
Mappings:
RegionMap:
us-east-1:
"32": "ami-123123"
"64": "ami-564565"
us-west-1:
"32": "ami-383838"
"64": "ami-181818"
Resources:
myEC2Instance:
Type: "AWS::EC2::Instnace"
Properties:
ImageId: !FindInMap [RegionMap, !Ref "AWS::Region", 32]
CloudFormation - Outputs
- 선택사항
- 다른 스택에서 값을 불러올 수 있음
- 네트워크 CF 템플릿에서 출력을 내보내기 해 VPC ID, Subnet ID를 내보낼 수 있음
- 해당 값 다른 템플릿에서 재사용 할 수 있음
- 다른 스택에서 해당 값 참조 시 해당 스택 삭제 불가
- !ImportValue 통해 값 가져오기 가능
Reference
'Programming' 카테고리의 다른 글
[AWS, Certified Developer Associate] Kinesis Data Streams, Kinesis Client Library (KCL) (0) | 2024.05.24 |
---|---|
[AWS, Certified Developer Associate] SQS, SNS (0) | 2024.05.18 |
[AWS, Certified Developer Associate] Elastic Beanstalk (0) | 2024.05.13 |
[AWS, Certified Developer Associate] ECS (0) | 2024.05.12 |
[AWS, Certified Developer Associate] CloudFront (0) | 2024.05.12 |