자동화가 필요한 이유
만약 구축되어 있던 인프라스트럭쳐에 문제가 생겨 다시 구축해야할 일이 생겼을때 자동화가 없다면 관리자는 구축에 관련된 내용을 하나부터 열까지 모두 숙지한 후에 빠른 시간 내에 다시 구축해야한다. 이건 말도 안되고 실현 불가능해 보인다(어떻게든 굴리면 해내는게 인간이지만). 이때 자동화는 이러한 복구 과정에서 모든 것을 큰 노력을 들이지 않아도 자동으로 복구할 수 있는 그런 솔루션을 제공해준다
자동화 도구에는 앤서블, 클라우드포메이션,셰프, 퍼펫, 솔트스택, 젠킨스 등등이 있고 구축되어 있는 환경에 적합한 자동화 도구를 선택하여 이용해야한다.
CloudFormation
리소스를 프로비저닝 하고 관리할 수 있도록 해주는 서비스로 빌드하고 싶은 서비스와 애플리케이션을 위한 템플릿을 생성할 수도 있고, 리소스를 탬플릿 파일로 작성하면 이를 분석해서 리소스를 새성해주기도 한다(스택). 또한 프로비저닝 리소스들에게 필요한 작업 순서를 자동으로 제어해주기도 한다.
작동방식
템플릿 작성 → 템플릿 업로드 → 스택 생성 → 스택 설정 및 리소스 생성으로 4단계로 구성됨
템플릿 작성 방법
템플릿은 json이나 yaml 형식으로 작성하며 cloudfromation 디자이너에서 템플릿의 형식을 자유롭게 변경 가능하다.
VPC 생성
{
"Type" : "AWS::EC2::VPC",
"Properties" : {
"CidrBlock" : String,
"EnableDnsSupport" : Boolean,
"EnableDnsHostnames" : Boolean,
"InstanceTenancy" : String,
"Tags" : [ Resource Tag, ....]
}
}
속성 필수여부 타입 설정 가능한 값 기본설정값
CIDRBlock | 1 | String | IP | N/A |
EnableDnsSupport | 0 | Boolean | True/False | True |
EnableDnsHostnames | 0 | Boolean | True/False | True |
InstanceTenancy | 0 | String | “default”/”dedicated” | defualt |
Tags | 0 | String | Key : String Value : String | NA |
서브넷
{
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"AvailbailityZone" : String,
"CidrBlock" : String,
"MapPublicIpOnLaunch" : Boolean,
"Tags" : [ Resource Tag, ....]
"VpcId" : String
}
}
속성 필수여부 타입 설정 가능한 값 기본설정값
AvailbailityZone | 1 | String | us-east-1a | 아무 az |
CIDRBlock | 1 | String | IP | N/A |
MapPublicIpOnLaunch | 0 | Boolean | True/False | False |
Tags | 0 | String | Key : String Value : String | NA |
VpcId | 1 | String | “default”/”dedicated” | defualt |
인터넷 게이트웨이
{
"Type" : "AWS::EC2::InternetGateway",
"Properties" : {
"Tags" : [ "Key" : "NAME", "Value" : { "ReF" : "AWS::StackName" } ]
}
}
Elastic IP
{
"Type" : "AWS::EC2::EIP",
"Properties" : {
"InstanceId" : String,
"Domain" : String
}
}
속성 필수여부 타입
InstanceId | 0 | String |
Domain | 1 | String |
NAT 게이트웨이
{
"Type" : "AWS::EC2::EIP",
"Properties" : {
"AllocationId" : String,
"SubnetId" : String
}
}
속성 필수여부 타입
AllocationId | 1 | String |
SubnetId | 1 | String |
설정법
템플릿 작성이 서툴러(샘플 탬플릿이 있다는데 사실 안해봤다 아직)서 실제 실습 없이 수기로 작성한다. 샘플 템플릿 사용하여 실습해보고 추가하겠다.
- CloudFormation 내에 템플릿을 업로드하면 기본적으로 S3버킷에 템플릿이 저장됨
- 설정하기전 jsonlint.com 같은 사이트에서 작성한 json을 테스트 해볼 수 있다고 책이 말한다.
- 신규 스택을 생성한다
- CloudFormation 콘솔로 이동
- Create New Stack
- Upload a template to Amazon S3
- 설정 콘솔에서 VPC, 프라이빗 서브넷, 퍼블릭 서브넷을 위한 CIDR을 정의
- 필요할 경우 태그 추가 입력 (Name 태그 정도는 입력해놓는게 관리하기 편하더라고요)
- 스택 정보를 검토 후 생성
- 정상적으로 리소스가 생성되면 Status가 CREATE_COMPLETE로 변경됨
- 스택 수정
- 콘솔에서 생성한 스택 선택
- Actions → Create Change set fot current stack
- 주소에 있는 템플릿을 다운로드
- chage set name, PublicSubnetCIDR2 항목들을 입력 후 Next
- options에서 추가 변경사항 입력 가능
- create chage set
- status : CREATE_COMPLETE
- 검토 후 모든 사항에 문제가 없을 시 chage set을 실행시켜서 변경 사항을 업데이트
- status : UPDATED_IN_PROGRESS → UPATE_COMPLETE
- 스택 삭제 : 스택이 삭제되면 모든 리소스들도 삭제되기 때문에 신중하게 결정할 것
- 콘솔에서 삭제할 스택 선택
- actions → delete stack
- Yes, delete 선택
- status : DELETE_IN_PROGRESS
aws cloudformation delete-stack --statck-name [stack name]
# CLI로 위 명령어를 이용하여 삭제 가능
특징
- 표준화된 템플릿 파일로 전체 인프라를 모델링한다. 별도로 인프라를 표준화하는 작업이 필요하지 않고 이미 정의된 템플릿을 사용하기만 하면 된다.
- 인프라를 코드로 관리한다. 인프라를 코드로 관리하는 것을 IaC라고 하며 Git과 같은 버전 관리 시스템으로 관리하면 개발자가 소스코드를 관리하는 것처럼 관리 가능하다.
- 사용 요금이 없다. cloudformation을 통해 생성된 리소스의 비용만 지불하면 된다.
- 인프라를 관리하는 인프라 관리자가 복잡한 인프라 아키텍처를 설계할 때 유용하다.
- 개발자는 주로 로컬 환경에서 개발하고 테스트 하는데 cloudformation을 통해 프로덕션 환경과 비슷하게 구성해 테스트 해볼 수 있다.
- 테스트 서버를 간편하게 생성하고 삭제할 수 있다.
실무에서의 작업 순서
- 인프라 설계
- 템플릿 작성
- 스택 생성
- 탬플릿 수정
- change sets 생성 : 수정된 탬플릿으로 이 세트를 생성해 리소스 변경되기 전에 변경되는 리소스에 대해서 확인 가능한 것 같음
- change sets 실행 : 이제 실제로 리소스에 반영됨
책에서 말하는 모범사례
- 템플릿에 권한 승인을 내장시키지 않는다.
- 스택을 수정하고 삭제하는 작업에서 예상치 못한 오류가 발생할 수 있기 때문에 cloudformation에 대해 사용자 접속이 가능한 시점을 명시한다.
- 사용자 정책 대신 서비스 역할 정책을 사용하길 권장한다
- 위에서도 나왔다싶이 github 또는 svn 같은 소스 저장소에 탬플릿을 저장해도 된다
- 템플릿에 명시한 리소스가 생성 가능한 최대 수량에 도달하지 않았는지 확인한다. 넘게 된다면 작업이 수행되지 않는다
- 실무 작업 순서에도 있다싶이 적용하기 전 change sets를 이용하여 검토한다
자료
AWS 네트워킹 쿡북 : 실습 위주로 쉽게 배우는 AWS 네트워킹 입문서
AWS CloudFormation으로 인프라 자동화 시작하기
'네트워크 > 클라우드 컴퓨팅' 카테고리의 다른 글
AWS 내부 ELB 구축 (1) | 2023.01.28 |
---|---|
AWS auto scaling (0) | 2023.01.27 |
AWS Route53 (1) | 2023.01.19 |
AWS 로드 밸런서 기초 설정 (1) | 2023.01.13 |
AWS EFS (0) | 2023.01.10 |