← 목록

AWS Cloudformation 그리고 IAC

작성: 2024년 02월 01일읽기: 약 3분

개요

AWS에는 다음과 같이 다양한 클라우드 리소스들이 존재합니다.

이러한 AWS 인프라들을 활용하여 서비스를 만들고 배포하기 위해서는 AWS 웹 대시보드 콘솔에서 다양한 작업이 선행되어야합니다.

단순한 Node.js 서버가 설치된 EC2를 설정하는데에도 다음과 같은 단계가 필요합니다.

  1. 적절한 EC2 인스턴스 타입을 선정
  2. EC2 부팅 드라이브에 부착할 EBS 스토리지 선정
  3. EC2 할당할 고정 IP (Elastic IP) 지정
  4. EC2 에 사용될 AMI (OS 이미지) 선정
  5. EC2 부팅 후 SSH / HTTP / HTTPS 등의 연결이 가능하도록 보안 그룹 지정
  6. EC2 구동 후 필요한 소프트웨어 설치 (Node.js, Git 등)

만약에 이러한 EC2 인스턴스가 마이크로서비스 또는 비슷한 서비스로서 재사용되고 계속해서 생성되어야한다면 반복적인 작업이 많아집니다.

이를 개선하기 위하여 이러한 인프라 구조를 코드로 관리 가능한 개념을 IAC (Infrastructure as Code)라 합니다.

IAC

우리가 웹 애플리케이션의 소스 코드를 버전관리 하듯이, 인프라 또한 설정이 바뀌는 부분에 대한 버전 관리, 그리고 반복적인 재사용을 위한 세밀한 문서화가 필요합니다.

이러한 문제를 해결하기 위하여 IAC(Infrastructure As a Code) [인프라 as 코드]를 통하여 관리가 가능합니다.

IAC를 지원하는 툴들은 여러가지가 있습니다.

이 중 우리는 아마존에서 지원하는 AWS Cloudformation에 대하여 알아보겠습니다.

AWS Cloudformation

AWS Cloudformation은 AWS에서 생성 가능한 대부분의 리소스들에 대한 정의를 YAML 또는 JSON 형식으로 관리하고 배포할 수 있도록 도와줍니다. 이렇게 배포된 리소스들은 Cloudformation Stack이라고 불리며, 이것은 즉시 제작 또는 파기가 가능합니다.

예를 들어 아래와 같은 템플릿을 사용하게되면 AWS EC2 (t2.nano) 우분투 서버를 생성하고 80번 포트가 개방된 보안 그룹을 연결합니다.

Resources:
    # 보안그룹
    InstanceSG:
        Type: AWS::EC2::SecurityGroup
        Properties:
            SecurityGroupIngress:
                # HTTP 접속
                - IpProtocol: tcp
                  FromPort: 80
                  ToPort: 80
                  CidrIp: "0.0.0.0/0"
                  Description: "웹으로부터 HTTP 접근 허용"
    # EC2 인스턴스
    Instance:
        Type: AWS::EC2::Instance
        Properties:
            SecurityGroups:
                - !Ref InstanceSG
            # Ubuntu 22.04 (64-bit(x86)) AMI
            ImageId: "ami-0f3a440bbcff3d043"
            InstanceType: t2.nano

Cloudformation 템플릿을 작성하는 가이드는 AWS의 공식문서를 참조 할 수 있습니다.