IaC(Infrastructure as Code)의 장점
- 사람이 수동으로 자원을 생성하지 않아서 지적재산을 코드로 남길 수 있다.
- 자원 생성 또한 Git과 같은 레포지토리에 버전관리가 가능하다.
- Code를 리뷰하면서 정합성을 체크할 수 있고, 변경사항이 있어서 코드수준에서 조치가 가능하다.
- 비용이 얼마정도 나올지 명시적으로 계산이 가능하다.
- 자동 삭제 룰을 생성하게 되면 필요없을때 자동으로 삭제하여 Cost를 줄일 수 있다.
- 쉽게 만들고 부실수 있어 생산성이 향상된다.
- 내 템플릿에 대해 자동으로 Diagram을 그려준다.
- 서술적 코딩이라 코딩이 쉽다.
- 효과적으로 코딩하려면 Stack을 나누어 VPC, Network, App 등 Layer를 나누어 작성한다.
CloudFormation 은 어떻게 작동하나?
- Template이 S3에 업로드 되어 있고 CloudFormation에서 참조가 가능해야 한다.
- 이미 사용된 Template을 Update할 수는 없고 새로운 템플릿을 재업로드 해야한다.
- Stack은 이름으로 구분된다.
- Stack을 삭제하는것은 해당 Stack으로 생성된 모든 Single Artifact를 삭제하는 것이다.
CloudFormation Template을 배포하기
Manual way
1) CloudFormation Designer에서 Template을 작성한다.
2) Parameter를 입력하기 위해 콘솔을 사용한다.
Automated way < 권장
1) YAML파일에서 작성한다.
2) AWS CLI로 템플릿을 배포한다.
CloudFormation 을 작성하는 Block들
Template Components
1) Resources(필수값) : AWS 자원에 대한 정의
2) Parameters : 콘솔 등에서 가변적인 입력을 위한 변수 사용
3) Mappings : 템플릿을 위한 상수
4) Outputs : 무엇이 생성되었는지 참고사항
5) Conditionals : 자원생성을 수행하기 위한 조건
6) Metadata :
Templates helpers
1) References
2) Functions
CloudFormation 으로 자원을 생성해보자.
1. [CloudFormation]-[Stacks]를 접속한다.
2. 'Create Stack' > 'Create new Stack' 을 클릭한다.
3. Select Template 화면에서 'Choose a template'의 옵션 중 'Upload a template to Amazon S3'를 선택한다. 그리고 업로드할 템플릿을 선택후 업로드를 진행한다.
샘플) just-ec2.yaml
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
AvailabilityZone: us-east-1a
ImageId: ami-a4c7eb2
InstanceType: t2.micro
4. 'Stack Detail' 화면에서 템플릿 이름을 입력하고 다음을 누른다.
5. 'Options' 화면에서 Tag를 주거나 Timeout을 주거나 하는 옵션을 추가할 수 있다. 필자는 생략하겠다. 다음으로 넘어간다.
6. 마지막 'Review'화면에서는 'Estimate cost'에 Cost 버튼을 누르면 예상되는 금액을 확인할 수 있다. 다음으로 넘어간다.
7. 생성이 시장되면 Create In Progress라는 메시지가 표출되면서 수행 절차가 보인다.
CloudFormation 으로 자원을 Update하거나 Delete해보자
1. 위에서 생성한 EC2에서 Update코자하는 부분이 있다면 동일한 Logical ID를 사용한 템플릿을 추가로 적용한다.
2. 그러면 Preview your changes 화면에서 신규생성 혹은 업데이트 대상이 표시된다.
3. 이대로 진행하면 신규 인스턴스가 추가되고 기존 인스턴스는 삭제된다.
Parameter 사용하기
Parameter는 AWS CloudFormation template에 입력값을 제공하는 방법이다.
당신이 여러 사이트에서 해당 템플릿을 재사용하고 싶을때 사용한다.
Parameters:
SecurityGroupDescription:
Description: Security Group Description
Type: String
Parameter는 아래와 같은 세팅으로 컨트롤 된다.
- Type
Type |
String |
Number |
CommaDelimitedList |
List<Type> |
AWS Parameter (to help catch invalid values - match against existing values in the AWS Account) |
- Description
- Constraints
- ConstarintDescription (String)
- Min/MaxLength
- Min/MaxValue
- Defaults
- AllowedValues (array)
- AllowedPattern (regexp)
- NoEcho (Boolean)
Parameter를 호출하려면 Fn::Ref (!Ref)함수로 참조가 가능하다. 그리고 템플릿 내 어디서나 호출할 수 있다.
DbSubnet1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
Pseudo(가상) Parameter
가상 파라미터는 AWS CloudFormation에서 사전 정의된 파라미터입니다. 따라서 템플릿에서 가상 파라미터를 선언할 필요가 없습니다. 가상 파라미터는 Ref 함수의 인수로 파라미터를 사용하는 것과 동일한 방식으로 사용합니다.
AWS::AccountId
스택이 생성되는 계정의 AWS 계정 ID를 반환합니다(예: 123456789012).
AWS::NotificationARNs 현재 스택에 대한 알림 Amazon 리소스 이름(ARN) 목록을 반환합니다. 목록에서 단일 ARN을 가져오려면 Fn::Select를 사용합니다.
AWS::NoValue
Fn::If 내장 함수에 반환 값으로 지정된 경우 해당 리소스 속성을 제거합니다. AWS::Partition 리소스가 있는 파티션을 반환합니다. 표준 AWS 리전에서 파티션은 aws입니다.
AWS::Region
포괄 리소스를 생성하는 리전을 나타내는 문자열을 반환합니다(예: us-west-2).
AWS::StackId
aws cloudformation create-stack 명령으로 지정된 스택의 ID를 반환합니다(예: arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123).
AWS::StackName
aws cloudformation create-stack 명령으로 지정된 스택의 이름을 반환합니다(예: teststack).
AWS::URLSuffix
도메인에 대한 접미사를 반환합니다. 접미사는 일반적으로 amazonaws.com이지만 리전에 따라 다를 수 있습니다. 예를 들어 중국(베이징) 리전의 접미사는 amazonaws.com.cn입니다.
'IaaS > 퍼블릭클라우드' 카테고리의 다른 글
(AWS) CloudFormation Output, Condition 에 대해 (0) | 2022.01.19 |
---|---|
(AWS) CloudFormation Resource, Parameter, Mapping에 대해 (0) | 2022.01.18 |
(AWS) CodePipeline, CodeCommit, CodeBuild, CodeDeploy로 GitFlow 구현 (0) | 2022.01.13 |
(AWS) CloudFormation을 통한 파이프라인 템플릿 만들기 (0) | 2022.01.13 |
(AWS) CodePipeline 이란? (0) | 2022.01.10 |