오늘도 기록하는 중 GitHub

Cloud/IaC

AWS로 IaC(IaaS) 시작하기

YongE 2025. 5. 12. 14:40

개요


현재 진행 중인 프로젝트의 1차 마감 기한이 다가오고 있다. 기한 전에 배포하고 CICD 파이프라인을 구축하려고 한다. 이전에는 테스트 및 평가 목적으로 인스턴스 하나만 생성하여 배포했는데 이제는 이전보다 확장성과 효율성 면에서 더 나은 인프라 구축이 필요하다. 비용최적화도 고려해야 한다. 이 내용은 나중에 프로젝트의 출시 완료 이후에 다루도록 하고 이번에는 시간을 효율적으로 단축시켜주면서 사전에 설계한대로 리소스의 프로비저닝과 구성을 할 수 있는 CloudFormation을 사용하도록 하겠다

2025.05.02 - [Cloud] - [AWS] CloudFormation

 

[AWS] CloudFormation

CloudFormation이는 AWS의 서비스 중 하나다. AWS 클라우드 인프라를 특정 코드로 정의하고 선언해서 자원을 생성하거나 삭제한다. 이러한 인프라를 코드로 정의하는 것을 IaC라 한다. 다음과 같은 순

aitidev.tistory.com

 

CloudFormation에 대한 내용은 이전 글에서 다루었다. AWS에서 제공하는 간단한 IaC 생성기이다!

 

템플릿 검증하기


CloudFormaion에서 자체적으로 비주얼 빌더를 제공하기 때문에 노코드로도 인프라를 구성할 수 있다. 다만 학습 및 실전과 유사한 훈련을 위해 템플릿을 직접 작성하겠다.

아래는 실제로 작성한 템플릿이다. 다만 민감한 정보도 포함하고 있기에 가지치기를 한 수정 버전이다. 여기에 로드밸런서 설정, EC2 인스턴스 생성, LauchTemplate 설정 정보를 추가해야 한다.

Parameters:
  EnvironmentName:
    Description: 
    Type: String
    Default: 
    
  KeyPair:
    Description: EC2 인스턴스 접속용 키페어
    Type: AWS::EC2::KeyPair::KeyName
    
  InstanceType:
    Description: 
    Type: String
    Default: 기본 타입
    AllowedValues:
      - 인스턴스 타입 
    
Resources:
  # VPC 리소스
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 
      Tags:
        - Key: Name
          Value: ${EnvironmentName}-VPC

  IGW:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: ${EnvironmentName}-IGW

  IGWAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      InternetGatewayId: !Ref IGW
      VpcId: !Ref VPC

  PublicSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [ 0, !GetAZs '' ]
      CidrBlock: 10.0.0.0/24
      # 인스턴스 생성 시 퍼블릭 ip 주소 생성 여부.
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName}-PublicSubnet

  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName}-PublicRouteTable

  DefaultPublicRoute:
    Type: AWS::EC2::Route
    DependsOn: IGWAttachment
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref IGW

  PublicSubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref PublicRouteTable
      SubnetId: !Ref PublicSubnet

  BESecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: backend
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

 

직접 스택을 생성해보면서 템플릿을 수정하고 있었는데, 굉장히 번거로웠다. 그런데 문득 편의를 위해 만든 서비스가 이렇게 번거로울 리가 있나 싶어서 템플릿을 사전 검증하는 절차가 있지 않을까 싶었다.

아니나 다를까. 진짜 있었다. 비주얼 빌더에서도 가능하고... AWS CLI에서도 가능하다.. 유데미 할인할 때 관련 강의 사두자..

다른 분들은 절대 이렇게 실수하지 말기를

 

CloudFormation 실행 테스트


여러 차례(?) 검증된 템플릿으로 이제 실행해보았다!

 

템플릿 파일 업로드 -> 파일 선택 -> 다음 클릭

약 5분 정도 기다리면 다음과 같이 인프라가 생성된다.

 

차례대로 설정한 서비스가 생성되는 것을 볼 수 있다.

이제 여기서 jenkins 파이프라인 구축과 cloudwatch를 통한 모니터링만 하면 서비스 완성이다. 간단하지만 각 내용은 이후에 다루도록 하겠다. 

반응형

'Cloud > IaC' 카테고리의 다른 글

Terraform + Kubespray + AWS  (1) 2025.05.15