카이도스의 Tech Blog
AWS CloudFormation 본문
728x90
반응형
현재 근무중인 회사에서는 aws+IDC 하이브리드 구성으로 사용중이다.
aws 환경 중 쿠버네티스의 경우 기존 구성이 문제가 많아 EKS로 변환을 고려중이다.
관련해서 EKS dev → stage → production 순서로 구축 후 기존 서비스를 마이그레이션할 예정이다.
첫번째로 dev 환경을 구성해야하는데, cloudformation을 통해 진행하려고한다.
그러다보니 너무 어려워 스터디를 병행하며 진행해야할것같다.
항상 그렇듯 CloudNet@-가시다(Gasida)님의 스터디를 기준으로 작성할것이다.
1. AWS CloudFormation Introduction
What is CloudFormation?
-
- AWS Infrastructure를 개략적으로 설명하여 선언하는 방법 (Infrastructure as Code - IaC) - 데브옵스로 가는 과정!
- CloudFormation은 정의한 대상에 대해 자동으로 순서대로 자원을 생성
- 아키텍처의 전체 정의가 하나의 파일에 있고 AWS에 제출하여 AWS가 모든 리소스를 관리
Benefits of AWS CloudFormation
1. Infrastructure as code(Iac)
- 수동으로 리소스를 만들지 않아도 된다.
- Github를 활용하여 제어
- 코드를 통하여 인프라 변경사항을 검토 가능
2. Cost
- 리소스 비용을 쉽게 추정할 수 있다.
- 필요한 경우만 CloudFormation을 배포하고 필요하지 않을 경우 삭제하여 비용 절감 -
ex)오후 5시에 자원을 삭제하고, 다음날 오전 8시에 자원을 생성
3. Productivity
- 클라우드 상 인프라를 즉시 삭제하거나 재 생성이 가능
- Diagram 기능으로 Template 구성 가능 (Automated Generation)
- Declarative Programming (선언적 프로그래밍)
4. Don’t re-invent the wheel (불필요하게 처음부터 다시 하지 마라!!!)
- 웹 상에 기존 Template을 활용하라.
- 다양한 정보와 문서가 많이 있다.
AWS CloudFormation vs Ansible vs Terraform
- CloudFormation은 AWS의 기본 서비스이며 항상 최신 기능과 옵션을 포함
- CloudFormation은 상태 기반 동작으로 각 상태 별 도달 상황을 정확히 파악
- Ansible과 Terraform은 명령 기반으로 스크립트를 작성해야 한다. (스택 조정에 어려움)
- Ansible과 Terraform은 새로운 서비스가 추가될 때마다 업데이트
- AWS 인프라 생성 작업은 CloudFormation을 추천
Summary of How CloudFormation works
- CloudFormation은 Template를 업로드 한다. (S3 or Direct)
- 업로드 된 상태에서 Template를 편집을 할 수 없고 다른 Template로 업데이트 하여야 한다.
- CloudFormation 스택을 삭제하면 하위 모든 리소스가 삭제
2. AWS CloudFormation First Hands-On
2-1 YAML Tutorial
Resources:
WebServer:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-a4c7edb2
InstanceType: t2.micro
KeyName: !Ref KeyName
SecurityGroups:
- !Ref WebServerSecurityGroup
UserData:
Fn::Base64: |
#!/bin/bash
yum update -y
yum install -y httpd24 php56 mysql55-server php56-mysqlnd
service httpd start
chkconfig httpd on
groupadd www
usermod -a -G www ec2-user
chown -R root:www /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} +
find /var/www -type f -exec chmod 0664 {} +
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: "Enable HTTP access via port 80 + SSH access"
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0
FromPort: '80'
IpProtocol: tcp
ToPort: '80'
- CidrIp: !Ref SSHLocation
FromPort: '22'
IpProtocol: tcp
ToPort: '22'
- YAML은 CloudFormation Template 작성하는데 사용하는 언어로 사용하기 쉽다.
- YAML은 직관적인 표현으로 템플릿을 쉽게 읽을 수 있다.
- Key value Pairs (key: value 형태)
- Nested Objects (Object 안에 Object 존재)
- Support Arrays (여러 요소가 존재하는 배열 형태 지원 - (마이너스) 입력 후 여러 요소 표현)
- Multi line strings (여러 줄로 표현 가능 | (파이프라인)입력 후 여러 줄로 표현)
2-2 Creating & Update an S3 Bucket using CloudFormation
- S3 Bucket 생성
---
Resources:
MyOngS3Bucket:
Type: "AWS::S3::Bucket"
Properties: {}
- Properties를 정의하지 않으면, {}로 표기
- S3 Bucket 중단이나 교체가 없는 업데이트
---
Resources:
MyOngS3Bucket:
Type: "AWS::S3::Bucket"
Properties:
AccessControl: PublicRead
- AccessControl을 추가 (PublicRead) - 아래부터는 실습 진행하지 않고 스킵
- AccessControl을 수정하여 업데이트 시 Replacement는 False (즉, 교체 없이 바로 수정)
- 퍼블릭 엑세스 권한
2-3. S3 Bucket 중단이나 교체가 있는 업데이트
---
Resources:
MyOngS3Bucket:
Type: "AWS::S3::Bucket"
Properties:
AccessControl: PublicRead
BucketName: "insert-some-random-string-here-599956"
- BucketName을 수정할 경우
- BucketName을 수정하여 업데이트 시 Replacement는 True (즉, 교체를 위해 삭제 후 재생성)
- 주의!!! S3 Bucket이 삭제되고 재생성 될 때 데이터 백업이 되지 않음.
2-4. CloudFormation Template Options
- 태그 (Tags): 생성된 모든 리소스가 동일한 태그를 공유
- 권한 (Permissions): 계정 별 CloudFormation 수행 역할 제공
- 알림 옵션 (Notification Options): 이메일 또는 SNS로 알림을 보냄
- 스택 정책 (Stack Policy): 스택 업데이트 중 업데이트되지 않도록 하는 리소스 정의
- 롤백 구성 (Rollback on Failure): 실패 시 CloudFormation 이전 상태로 롤백
- 제한 시간 (Timeouts): 특정 시간이 지나면 CloudFormation이 실패
2-5. CloudFormation Designer
- 시각적으로 CloudFormation을 설계
- CloudFormation Template을 빠르게 작성하고 확인하는 기능 제공
- Drag & Drop으로 서비스 생성 및 서비스 간 연결 (EC2 Instance, EIP, Security Group)
- 기존 템플릿을 넣어 Designer에서 확인 가능
- 완료되면 유효성 검사 후 CloudFormation으로 업로드 가능
2-6. Formation Building Blocks
Template Components
- Resources: 템플릿에 선언된 AWS 리소스들 (필수)
- Parameters: 동적으로 입력 받는 매개 변수 (옵션)
- Mappings: 정적으로 지정한 변수 매핑 (옵션)
- Outputs: 스택의 속성을 반환되는 값을 설명 (옵션)
- Conditionals: 특정 리소스 속성에 값이 할당되는지 또는 생성되는지 여부를 제어 (옵션)
- Metadata: 템플릿에 대한 추가 정보를 제공하는 객체 (옵션)
728x90
반응형
'AWS' 카테고리의 다른 글
AWS CLI 자격증명 (0) | 2023.05.16 |
---|---|
AWS 비용 최적화(예약 인스턴스, savings plans) (0) | 2023.05.10 |
ALB- S3 로그 연동 (0) | 2023.04.04 |
AWS MongoDB backup - S3 (0) | 2023.04.04 |
EC2-cloudwatch 로그 연동 (0) | 2023.03.29 |
Comments