IAC를 사용하여 EC2에 Apache 웹 서버 설치

이 튜토리얼에서는 EC2 사용자 데이터를 사용하여 EC2 Linux 인스턴스에 Apache 웹 서버를 설치하는 방법에 대한 단계별 안내를 제공합니다. 모든 리소스는 CloudFormation(IAC)에서 프로비저닝됩니다. 그 말을 듣고 바로 들어가 봅시다.

CloudFormation 스택에서 사용할 매개변수를 정의합니다.

---
Parameters:
  AppName:
    Type: String
    Description: Enter the name of your resource you are creating.
    Default: ApacheWebServer
  Stage:
    Type: String
    Description: Enter the staging environment of you resource.
    Default: dev


그런 다음 리소스를 정의합니다. 필요한 리소스는 SSH 키, EC2 인스턴스 및 보안 그룹입니다.

Resources:
  ## Our EC2 SSH Key
  SSHKey:
    Type: 'AWS::EC2::KeyPair'
    Properties:
      KeyName: !Join ['-', [!Ref AppName, 'key-pair', !Ref Stage] ]

  ## EC2 Instance    
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-009d6802948d06e52
      InstanceType: t2.micro
      KeyName: !Ref SSHKey
      SecurityGroups:
        - !Ref SSHSecurityGroup
      # we install our web server with user data
      UserData: 
        Fn::Base64: |
          #!/bin/bash -xe
          yum update -y
          yum install -y httpd
          systemctl start httpd
          systemctl enable httpd
          echo "Hello World from user data" > /var/www/html/index.html
      Tags:
        - Key: Name
          Value: !Ref AppName
        - Key: Environment
          Value: !Ref Stage


  # Our EC2 security group
  SSHSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: SSH and HTTP
      SecurityGroupIngress:
      - CidrIp: 0.0.0.0/0
        FromPort: 22
        IpProtocol: tcp
        ToPort: 22
      - CidrIp: 0.0.0.0/0
        FromPort: 80
        IpProtocol: tcp
        ToPort: 80


참고: 여기에서 중요한 점은 사용자 데이터에 대해 작성한 코드 블록입니다. "Fn::Base64"와 수직 파이프를 사용하여 전체 bash 스크립트를 인스턴스에 전달합니다. 스크립트를 하나의 문자열로 인식할 수 있도록 수직 파이프를 사용합니다.

완전한 템플릿 파일

---
Parameters:
  AppName:
    Type: String
    Description: Enter the name of your resource you are creating.
    Default: ApacheWebServer
  Stage:
    Type: String
    Description: Enter the staging environment of you resource.
    Default: dev

Resources:
  ## Our EC2 SSH Key
  SSHKey:
    Type: 'AWS::EC2::KeyPair'
    Properties:
      KeyName: !Join ['-', [!Ref AppName, 'key-pair', !Ref Stage] ]

  ## EC2 Instance    
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-009d6802948d06e52
      InstanceType: t2.micro
      KeyName: !Ref SSHKey
      SecurityGroups:
        - !Ref SSHSecurityGroup
      # we install our web server with user data
      UserData: 
        Fn::Base64: |
          #!/bin/bash -xe
          yum update -y
          yum install -y httpd
          systemctl start httpd
          systemctl enable httpd
          echo "Hello World from user data" > /var/www/html/index.html
      Tags:
        - Key: Name
          Value: !Ref AppName
        - Key: Environment
          Value: !Ref Stage


  # Our EC2 security group
  SSHSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: SSH and HTTP
      SecurityGroupIngress:
      - CidrIp: 0.0.0.0/0
        FromPort: 22
        IpProtocol: tcp
        ToPort: 22
      - CidrIp: 0.0.0.0/0
        FromPort: 80
        IpProtocol: tcp
        ToPort: 80



콘솔에 CloudFormation 스택을 업로드합니다.

먼저 템플릿 파일이 저장된 디렉토리로 이동합니다. 아래 터미널 명령을 사용하여 스택을 AWS에 업로드할 수 있습니다.

aws cloudformation deploy 
  --template-file <TEMPLATE NAME> 
  --stack-name <STACK NAME> 
  --profile <AWS PROFILE NAME>


스택이 성공적으로 업로드되면 "성공적으로 생성/업데이트된 스택 - "이라는 메시지가 표시되어야 합니다.

AWS 콘솔로 이동

콘솔에 있는 경우 EC2 대시보드로 이동하면 생성한 인스턴스가 표시됩니다. 인스턴스를 선택하고 연결을 클릭합니다. EC2 Instance Connect를 사용하여 인스턴스에 연결합니다.



Cloud Init 로그 검사

이제 인스턴스가 부팅될 때 실행된 스크립트를 보기 위해 로그를 검사할 것입니다.

먼저 루트 권한이 필요합니다. 인스턴스에서 루트 권한을 가질 수 있도록 다음 명령을 실행합니다.

sudo su 


둘째, 실제 로그 파일을 보기 위해 명령을 실행할 것입니다.

 cat /var/log/cloud-init-output.log



이제 실행된 스크립트의 전체 로그 목록을 볼 수 있습니다.



마지막으로 웹 서버가 html 웹 페이지를 제대로 호스팅하고 있는지 테스트합니다. 인스턴스의 퍼블릭 DNS를 복사하여 웹 브라우저에 붙여넣을 수 있습니다. 이렇게 하면 우리가 만든 웹 페이지에 액세스할 수 있어야 합니다.



이제 EC2 인스턴스를 성공적으로 프로비저닝하고 사용자 데이터를 사용하여 Apache Web Server를 설치했습니다. 이제 마지막 단계는 사용된 모든 리소스를 정리하는 것입니다.

리소스 정리
터미널에서 다음 명령을 실행합니다. 스택을 삭제하여 CloudFormation을 사용하여 리소스를 생성했기 때문에 스택에 있던 모든 리소스도 삭제됩니다.

aws cloudformation delete-stack 
 --stack-name <STACK NAME>


이것은 EC2 사용자 데이터로 수행할 수 있는 작업에 대한 작은 데모일 뿐입니다. 이 튜토리얼 이외의 기능을 자유롭게 탐색하고 추가 기능을 추가하십시오.

이 튜토리얼이 도움이 되었기를 바랍니다. 호기심을 갖고 계속 배우고 계속 구축하십시오. 고맙습니다.

좋은 웹페이지 즐겨찾기