1. 개요

RDS에서 s3로의 스냅샷 백업이 아닌 운영중에 DB안의 데이터 백업을 진행해볼예정이다.

💡
Tool : mysql dump - mysql의 대표적인 Logical 백업 프로그램으로서 스토리지 엔진에 상관없이 백업을 받을수 있는툴이다.

2. 실습

  • RDS 생성(간단하게 깡통 DB를 빠르게 생성)

  • DB 접속후 간단한 쿼리문 작성
    1. 생성된 엔드포인트로 ec2를 통하여 접속(퍼블릭의 ec2 아무거나 생성)
    1. 간단한 테이블 작성
      • 코드
        CREATE TABLE DEPT (
            DEPTNO DECIMAL(2),
            DNAME VARCHAR(14),
            LOC VARCHAR(13),
            CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO) 
        );
        CREATE TABLE EMP (
            EMPNO DECIMAL(4),
            ENAME VARCHAR(10),
            JOB VARCHAR(9),
            MGR DECIMAL(4),
            HIREDATE DATE,
            SAL DECIMAL(7,2),
            COMM DECIMAL(7,2),
            DEPTNO DECIMAL(2),
            CONSTRAINT PK_EMP PRIMARY KEY (EMPNO),
            CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)
        );
        CREATE TABLE SALGRADE ( 
            GRADE TINYINT,
            LOSAL SMALLINT,
            HISAL SMALLINT 
        );
        INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
        INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
        INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
        INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
        INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,STR_TO_DATE('17-12-1980','%d-%m-%Y'),800,NULL,20);
        INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,STR_TO_DATE('20-2-1981','%d-%m-%Y'),1600,300,30);
        INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,STR_TO_DATE('22-2-1981','%d-%m-%Y'),1250,500,30);
        INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,STR_TO_DATE('2-4-1981','%d-%m-%Y'),2975,NULL,20);
        INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,STR_TO_DATE('28-9-1981','%d-%m-%Y'),1250,1400,30);
        INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,STR_TO_DATE('1-5-1981','%d-%m-%Y'),2850,NULL,30);
        INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,STR_TO_DATE('9-6-1981','%d-%m-%Y'),2450,NULL,10);
        INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,STR_TO_DATE('13-7-1987','%d-%m-%Y')-85,3000,NULL,20);
        INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,STR_TO_DATE('17-11-1981','%d-%m-%Y'),5000,NULL,10);
        INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,STR_TO_DATE('8-9-1981','%d-%m-%Y'),1500,0,30);
        INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,STR_TO_DATE('13-7-1987', '%d-%m-%Y'),1100,NULL,20);
        INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,STR_TO_DATE('3-12-1981','%d-%m-%Y'),950,NULL,30);
        INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,STR_TO_DATE('3-12-1981','%d-%m-%Y'),3000,NULL,20);
        INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,STR_TO_DATE('23-1-1982','%d-%m-%Y'),1300,NULL,10);
        INSERT INTO SALGRADE VALUES (1,700,1200);
        INSERT INTO SALGRADE VALUES (2,1201,1400);
        INSERT INTO SALGRADE VALUES (3,1401,2000);
        INSERT INTO SALGRADE VALUES (4,2001,3000);
        INSERT INTO SALGRADE VALUES (5,3001,9999);
        COMMIT;

  • mysqldump사용하여 백업

    관련 사용법 : https://code-factory.tistory.com/21

    위에서 생성한 table이 담긴 DB의 테이블 내용만을 백업해보자

    → 해당 디렉터리 안의 위에서 생성한 테이블들을 백업

'aws' 카테고리의 다른 글

s3 - presigned url  (0) 2021.03.29
Elastisearch 를 사용 VPC FLOWLOGS  (0) 2021.03.29
CloudWatch / SSM Agent  (0) 2021.03.29
lb -acm 인증서를 이용한 접속  (0) 2021.02.09
route 53 도메인 연결  (0) 2021.02.09

Golden AMI...?

Golden image란? 골든 이미지는 OS 영역을 포함해 필수 패키지가 설치된 일종의 표준 이미지 개념입니다.이 표준 이미지를 잘 활용하면 여러가지 이점이 생깁니다. 공통 부분을 미리(패키징) 해둠으로써 인스턴스 프로비저닝 시간을 최소화하고, 새 이미지로 부터 새로운 객체들을 생성하기 때문에 보안 관점에서도 여럴가지 이점이 있습니다.

  • 문제점
    • 주기적인 이미지를 다시 만들어야하는 번거로움 예시로, 설치된 패키지 중 특정 버전에 취약점이 발견 시 해당 패키지가 업데이트된 이미지를 다시 만들어 줘야한다.
    • 더큰 문제는 이미지를 생성한 이후의 작업(테스트,공유)들도 덩달아 공수를 유발한다는 것 또한 부담이다.

Image Builder

  • 주요 기능
    • OS 이미지 생성, 유지 , 검증 , 배포 작업의 파이프라인 생성
    • AWS 및 On-premise 환경의 이미지 생성 및 유지 관리 지원
    • 같은 조직(AWS organization) 내에서 생성 이미지 공유
  • 대상(`19년 12월 기준)
    • Amazon Linux 2, Window Server(2019/2016/2012 R2)만 지원
    • 기존 AWS AMI, EBS 스냅샷 이미지 형식만 지원
  • 요금
    • Image Builder 자체에 대한 과금은 없음
    • 로그 저장, 이미지 생성, 저장, 공유에 사용되는 AWS 리소스에 대한 부분만 과금

테스트

image Builder를 사용하여 Apache가 설치된 이미지를 생성하고 생성된 AMI로 인스턴스를 생성하는 과정을 진행

Ec2 image Builder
  1. console을 통해 접속 
  2.  

파이프라인을 구성하기 위한 레시피 생성
  • 레시피에는 OS,이미지,생성할 이미지에 빌드 및 테스트 할 컴포넌트 선택
  • image builder에서 관리하는 ami를 지정 or 기존 생성 ami or 사용자 지정 ami 가능
  1. 레시피 생성 
  1. 이미지 선택
  2. os 버전 또한 선택이 가능합니다.

     

  1. 구성 요소아마존에서 기본으로 제공하는 컴포넌트를 선택하거나 사용자가 직접 만들어 사용가능
    1. 새로 구성요소 생성
    1. inastll_apache, update_os 구성요소 생성
    1. 문서 정의 - yaml
      • 코드
        install_apache
        
        
          name: install_apache
        
          description: This is install_apache testing document.
        
          schemaVersion: 1.0
        
          
        
          phases:
        
            - name: build
        
              steps:
        
                - name: InstallApache
        
                  action: ExecuteBash
        
                  inputs:
        
                    commands:
        
                      - sudo yum install httpd -y
        
                      - sudo systemctl enable httpd
        
                      - sudo systemctl start httpd
        
           
        
            - name: validate
        
              steps:
        
                - name: CheckApache
        
                  action: ExecuteBash
        
                  inputs:
        
                    commands:
        
                      - rpm -qi httpd
        
           
        
            - name: test
        
              steps:
        
                - name: TestApache
        
                  action: ExecuteBash
        
                  inputs:
        
                    commands:
        
                      - curl localhost
        -------------------------------------------------------
        update_os
        
        
          name: update_os
        
          description: This is os_update testing document.
        
          schemaVersion: 1.0
        
           
        
          phases:
        
            - name: build
        
              steps:
        
                - name: InstallLinuxUpdate
        
                  action: UpdateOS

         

  1. 구성요소 선택
      위에서 만들어진 컴포넌트를 추가한다.
  1. 테스트 구성 요소
      테스트도 동일하게 amazon 에서 제공하는 컴포넌트를 사용하거나 직접 작성한컴포넌트를 사용할수 있습니다.
      차이점 : 이미지가 빌드된 후 테스트를 진행합니다.
    해당 챕터에서는 직접 작성하지 않고 제공하는 simple-boot-test를 사용이후 레시피 생성
파이프라인 생성
  1. 빌드 일정 지정 가능
    • 테스트 진행을 위해 수동으로 설정
  1. 레시피 선택
  1. 새 인프라 구성
    1. iam role 생성
    1. 기타 설정
      • 추가적인 인스턴스 타입 , sns , vpc ,서브넷,보안그룹, 트러블 슈팅등을 생성가능
    1. 리전설정
      • 마지막 설정 부분입니다. 생성 이미지에 라이센스를 연결하거나
      • 생성된 이미지의 이름, 해당 리전,시작 권한등을 설정가능합니다.
    1. 파이프라인 생성
확인 작업
  1. 생성된 파이프라인을 실행시켜 ami를 확인
  1. 파이프라인 실행 동작
    • 파이프라인을 실행할시 생성한 리전에서 빌드, 테스트 작업이 이루어지며 AMI가 생성
  1. AMI 생성
  1. 인스턴스 생성
  1. 웹 서버 접속 test

결론


  • 이미지 생성, 관리 등 관련 작업이 간편하다
  • AWS 에서 이미지 생성, 관리를 해주기 때문에 이미지에 대한 보안의 취약점 감소
  • 이미지에 도입하는 구성 요소를 독자적으로 작성하거나 만든 이미지로 테스트도 독자적으로 가능하다.
  • 이 모든 과정을 파이프라인으로 구성하여 간편하게 자동화가 가능하다.]

 

  •  

 

'Automation' 카테고리의 다른 글

SSM Automation을 통한 자동화  (0) 2022.08.23
image builder 2  (0) 2021.06.16
auto-scaling scale-out시 run-command동작  (0) 2021.03.29
Lambda Ec2 start / stop Tag기반  (0) 2021.01.20

1. 개념

💡
Elasticsearch란? 완전관리형 서비스인 Amazon Elasticsearch Service는 Elasticsearch 클러스터 설정, 배포, 구성, 패치 및 모니터링을 관리하므로 클러스터를 관리하는 시간을 줄여 애플리케이션 구축에 더 많은 시간을 할애할 수 있습니다. Amazon Elasticsearch Service는 오픈 소스 Elasticsearch API, 관리형 Kibana, Logstash와의 통합, 기타 AWS 서비스 및 SQL 쿼리를 제공하므로 기존 도구 및 코드를 계속 사용할 수 있습니다.
  • 정리
    • Elasticsearch는 검색을 위해 단독으로 사용되기도 하며, ELK(Elasticsearch / Logstatsh / Kibana) 스택으로도사용된다.
    • Logstash

      다양한 소스(DB, csv파일) 의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달

    • Elasticsearch

      Logstash로 부터 받은 데이터를 검색 및 집계를 하여 필요한 관심 정보 획득

    • Kibana

      Elasicsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링

    • 용어
      1. cluster
        • Elastisearch 에서 가장 큰 시스템 단위를 의미
        • 최소 하나 이상의 노드의 집합
        • 서로 다른 클러스터는 데이터 접근,교환을 할수없는 독립적 시스템
        • 여러 대의 서버가 하나의 클러스터를 구성할 수 있고, 한 서버에 여러개의 클러스터 존재 가능
      1. 노드
        • Elasticsearch 를 구성하는 하나의 단위 프로세스를 의미
        • 역할에 따라 Master-eligible,Data,Tribe 노드로 구분
        • node 종류
          1. master-eligible node 링크 )

            클러스터를 제어하는 마스터로 선택할 수 있는 노드를 말합니다.

            여기서 master 노드가 하는 역할은 다음과 같습니다.

            • 인덱스 생성, 삭제
            • 클러스더 노드들의 추적, 관리
            • 데이터 입력 시 어느 샤드에 할당할 것인지
          1. Data node 링크 )

            데이터와 관련된 CRUD 작업과 관련있는 노드입니다.

            노드는 CPU, 메모리 등 자원을 많이 소모하므로 모니터링이 필요하며, master 노드와 분리되는 것이 좋습니다.

          1. Ingest node 링크 )

            데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역할을 합니다.

          1. Coordination only node 링크 )

            data node와 master-eligible node의 일을 대신하는 이 노드는 대규모 클러스터에서 큰 이점이 있습니다.

            즉 로드밸런서와 비슷한 역할을 한다고 보시면 됩니다.

      1. 인덱스(index) / 샤드(shard) / 복제 (Replica)
        1. 인덱스
          • Elasticsearch에서 index는 RDBMS에서 database와 대응하는 개념입니다.
          • 또한 shard와 replica는 Elasticsearch에만 존재하는 개념이 아니라, 분산 데이터베이스 시스템에도 존재하는 개념입니다.
        1. 샤딩( sharding )
          •  데이터를 분산해서 저장하는 방법을 의미합니다.

            즉, Elasticsearch에서 스케일 아웃을 위해 index를 여러 shard로 쪼갠 것입니다.

            기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 하기도 합니다.

        1. replica
          • 또 다른 형태의 shard라고 할 수 있습니다.

            노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제하는 것이죠.

          따라서 replica는 서로 다른 노드에 존재할 것을 권장합니다.

      1. 특징
        1. Scale-oute
          • 샤드를 통해 규모가 수평적 확장
        1. 고가용성
          • Replica를 통해 데이터의 안정성 보장
        1. Schema Free
          • json 문서를 통해 데이터 검색을 수행하므로 스키마 개념 x
        1. Restful
          • 데이터 CURD 작업은 HTTP Restful API를 통해 수정하며, 각기 다음과같다

            Restful

            Data CRUDElasticsearch Restful
            SELECTGET
            INSERTPUT
            UPDATEPOST
            DELETEDELETE

2. 실습

  • 아키텍처

  • 실습
    • vpc flow
      1. vpc flow log 생섯
      1. cloudwatch

    • ElasticSearch
      1. 사용자 지정 생성

        → 테스트 목적

    • flowlog 남도록 ec2 접속
      • 로그 확인

    • cloudwatch → ES 구독
      1. ES필터생성
      1. 사용할 ES 및 lambda role 설정
      1. 해당 role 설정
        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Resource": [
                "arn:aws:logs:*:*:*"
              ]
            },
            {
              "Effect": "Allow",
              "Action": "es:ESHttpPost",
              "Resource": "arn:aws:es:*:*:*"
            }
          ]
        }
      1. 생성

        → 자동 생성 확인

        • 이를 통해서 ES cluster로 전송된다.

    • kibana 접속

      참조 : cognito 관련 https://cherrypick.co.kr/using-the-aws-elasticsearch-service-kibana-with-aws-cognito/

      1. 접속 화면
      1. cognito에서 생성된 ID 및 임시비번 입력

        → 이후 변경 암호 설정

      1. 에러 페이지 확인
        • cognito 인증 과정에서의 에러 발생이므로 ES에서 액세스 정책을 수정한다.
      1. 참조 블로그를 통해서 cognito 자격증명 풀생성시 iam정책에 생성된다.

        → 이렇게 생성된 role을 이용해서 액세스 정책을 수정해야한다.

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "AWS": "arn:aws:iam::186086016278:role/<cognito 자격증명풀role>"
              },
              "Action": "es:ESHttp*",
              "Resource": "arn:aws:es:ap-northeast-2:186086016278:domain/sssdf/*"
            }
          ]
        }
      1. ES 활성화후 → kibana 접속
      1. 인덱스 패턴 및 나타낼 항목들 확인
      1. 확인

'aws' 카테고리의 다른 글

s3 - presigned url  (0) 2021.03.29
RDS → s3 백업  (0) 2021.03.29
CloudWatch / SSM Agent  (0) 2021.03.29
lb -acm 인증서를 이용한 접속  (0) 2021.02.09
route 53 도메인 연결  (0) 2021.02.09
💡
EC2 및 On-premise 서버에서 Cloudwatch로 로그를 전송하여 사용률을 확인하도록 설정하기위함이다. 단일 인스턴스로 CloudWatch Agent를 설치시와 다중 인스턴스들을 CloudWatch Agent 설치시의 과정을 진행해 보겠다.

CloudWatch Agent

  • IAM 생성

    SSM/ Cloudwatch agent설치를 위한 IAM role을 ec2에 적용한다.

    1. 해당 권한 관련 role 생성

  • cloudwatch agent 구성 파일 생성 및 실행

    참조 : https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html#cloudwatch-agent-running-wizard

    • cloud watch agent 정의된 지표 목록

    1. 구성 파일설정
      On which OS are you planning to use the agent?
      1. linux
      2. windows
      default choice: [1]:
      
      Trying to fetch the default region based on ec2 metadata...
      Are you using EC2 or On-Premises hosts?
      1. EC2
      2. On-Premises
      default choice: [1]:
      
      Which user are you planning to run the agent?
      1. root
      2. cwagent
      3. others
      default choice: [1]:
      
      Do you want to turn on StatsD daemon?
      1. yes
      2. no
      default choice: [1]:
      [StatsD 데몬 turn on 선택 시 이후 run Command 과정이 실패할 수 있습니다.]
      
      Do you want to monitor metrics from CollectD?
      1. yes
      2. no
      default choice: [1]:
      [CollectD 데몬 turn on 선택 시 이후 run Command 과정이 실패할 수 있습니다.]
      
      Do you want to monitor any host metrics? e.g. CPU, memory, etc.
      1. yes
      2. no
      default choice: [1]:
      
      Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
      1. yes
      2. no
      default choice: [1]:
      [코어당 cpu 지표를 수집하기를 원한다면 yes를 선택하십시오.]
      
      Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
      1. yes
      2. no
      default choice: [1]:
      
      Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
      1. 1s
      2. 10s
      3. 30s
      4. 60s
      default choice: [4]:
      [원하는 지표 수집 간격을 설정하면 됩니다.]
      
      Which default metrics config do you want?
      1. Basic
      2. Standard
      3. Advanced
      4. None
      default choice: [1]:
      
      Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
      1. yes
      2. no
      default choice: [1]:
      
      Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
      1. yes
      2. no
      default choice: [2]:
      
      Do you want to monitor any log files?
      1. yes
      2. no
      default choice: [1]:
      
      Log file path:  ////윈도우의 경우 로그 파일이 존재하는 위치 뒤에 * 도 붙여주시는 것이 좋습니다.
      /var/log/messages
      Log group name:
      default choice: [messages]
      
      Log stream name:
      default choice: [{instance_id}]
      
      Do you want to specify any additional log files to monitor?
      1. yes
      2. no
      default choice: [1]:
      
      Log file path:
      /var/log/secure
      Log group name:
      default choice: [secure]
      
      Log stream name:
      default choice: [{instance_id}]
      
      Do you want to specify any additional log files to monitor?
      1. yes
      2. no
      default choice: [1]:
      2
      
      Do you want to store the config in the SSM parameter store?
      1. yes
      2. no
      default choice: [1]:
      [ SSM parameter store에 저장해야 이후 run Command를 수행할 수 있습니다.]
      
      What parameter store name do you want to use to store your config? 
      (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)
      default choice: [AmazonCloudWatch-linux]
      
      Trying to fetch the default region based on ec2 metadata...
      Which region do you want to store the config in the parameter store?
      default choice: [ap-northeast-2]
      
      Which AWS credential should be used to send json config to parameter store?
      1. ASIAZYLTNL6RST6A4O44(From SDK)
      2. Other
      default choice: [1]:
      
      Successfully put config to parameter store AmazonCloudWatch-linux.
      Program exits now.
      • 환경에 맞는 구성파일 생성
    1. 실행 명령
      sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
    1. cloudwatch 지표 생성

SSM Agent 사용

  • IAM role 생성

    기본적인 amazon Linux는 SSM agent가 설치되어있으나, 다른 OS는 추가설치필요

    1. role 생성
      • 해당 role 중 cloudwatchadmin policy는 watch agent 구성 파일을 ssm 파라미터 스토어의 저장하기위함
    1. system manger의 관리형 인스턴스
      • SSM Agent 최신 버전
      • Outbound 인터넷 통신
      • SSM과 통신하기 위한 권한(IAM Role)
      • 해당 조건을 충족해야만 ssm의 등록가능

  • ssm 을통한 Cloudwatch agent 다운로드
    1. run command 실행
    1. Agent 설치
      1. 조건 설정
      1. 대상 지정
      1. 명령 실행 확인

  • Cloudwatch agent - config파일 → parameter store 저장
    1. 대상 중 하나의 인스턴스에서만 ssh접속
      • 편의를 위해 ssm으로 접속
    1. 앞서 구성한 것처럼 config 구성
      sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
    1. 파라미터 스토어에 저장 확인

  • cloudwatch agent 시작 및 구성파일 적용
    • CloudWatch Agent의 미리 정의된 지표 목록
    1. 미리 구성된 파라미터를 이용하여 runcommand 적용
    1. 대상 지정
      • 앞서 Cloudwatch agent는 설치 하였으나구성파일이 적용이 안되었으므로 구성파일적용
    1. 성공 확인

  • 결과 확인

'aws' 카테고리의 다른 글

RDS → s3 백업  (0) 2021.03.29
Elastisearch 를 사용 VPC FLOWLOGS  (0) 2021.03.29
lb -acm 인증서를 이용한 접속  (0) 2021.02.09
route 53 도메인 연결  (0) 2021.02.09
RDS-multi AZ/RR 구성 실습  (0) 2021.02.03

1. 목적

💡
서버 운영중 auto-scaling으로 scale-out이 될시 모든 서버가 페이지 업데이트 되는지 확인과정을 거쳐 보자 예를 들어) 홈페이지의 이벤트 기간에 즉각적인 업데이트를 해주기 위해 sacle-out 될떄마다 EFS 를 통해 모든 서버의 페이지를 업데이트 해보자

 

2.구성
ec2 생성
  1. 기본값으로 퍼블릭의 인스턴스 생성
    → 기본적인 web구성과 efs를 mount 시켜두기 위한 목적의 테스트 인스턴스
  1. 간단 index페이지
    → 기본으로 들어가 있을 웹페이지이다.
EFS 생성

개념 참고 : https://practice.hooniworld.io/entry/AWS-EFS-개념-및-구성-방법

EFS 사용 예시

  • EFS 생성시 VPC 안의 AZ subnet당 mount targer생성
  • 두개 이상일 경우 한개만 mount target 생성 가능
  1. console 을 통하여 EFS 생성
  1. 마운트 포인트
ec2-EFS 마운트
  1. EFS의 가용영역 확인
  1. 보안그룹 설정
  1. nfs 클라이언트 설치
    sudo yum -y update  
    $  sudo reboot
    sudo yum -y install nfs-utils
  1. nfs 클라이언트가 탑재되어있으므로 nfs 이용
  1. efs 호스트 등록
    → auto-mount 를 편리하게 하기 위함 위에서 보이는 mount 포인트명은 너무 길기때문 사용될 가용영역만 지정해준다.
  1. auto mount를 위한 설정
  1. 확인
efs 파일 생성후 AMI 생성
→ 해당 마운트 point로 이동후 파일 생성 뒤 해당 인스턴스 이미지 생성
auto sacling 생성
  1. 위에서 생성된 AMI를 이용하여 시작구성 생성
  1. SSM을 사용해야 하기때문에 해당 role을 부여
    → ec2 인스턴스들이 ssm을 사용할 권한이 있어야 하므로 iam에서 역할 생성
  1. auto-scaling 생성
    → efs 사용 가용영역을 맞춰주엇다.
  2. 최소값으로 맞춰준후 이후 추가로 다시 조정하여 테스트 예정

3. 테스트
efs 동작 테스트
  1. auto-scaling으로 생성된 ec2 확인
    1. mount 확인 및 파일 확인
      → 추가로 아무 파일을 생성해보고 기존 bastion에도 적용되었나 확인
    2. 정상 mount 작동 확인
cloudwatch 이벤트 - run command 동작
  1. cloud watch를 이용해 이벤트 패턴 생성 
  1. 해당 이벤트 동작시 - scale out시 이전의 생성된 efs.html이 불러와졋는지 확인 테스트
    → 이전의 3 2 3 구성을 4 2 4로 변경시 인스턴스 추가 되기때문에 해당 인스턴스를 확인할 예정
  1. 추가 인스턴스 확인
    1. 로드밸런서로 확인시
      1. 기본 index.html 페이지
      2. efs 로 받아온 기존 인스턴스들
      3. 에러 발생

→ 최근 인스턴스가 못받아왓다 인스턴스 실행하면서 auto mount보다 run command 동작이 우선시 되어 받아오지 못했다.

lambda 이용한 - run command
  1. 람다 역할 생성 → 사용할 서비스들에 대해서 역할을 지정해주었다.
    • 람다의 모든 권한
    • ec2가 ssm 동작을 하기 위한 권한 → 코드로 ec2를 지정해서 ssm을 부여하므로
    • ssm 동작을 위한 모든 권한
  1. 람다 함수 생성
  1. 코드 작성
    1. 단일 인스턴스 run command 동작
    import json
    import boto3
    
    def lambda_handler(event, context):
        ssm_client = boto3.client('ssm')
        response = ssm_client.send_command(
            InstanceIds=['i-0e4c2788a45b4baf2'],
            DocumentName="AWS-RunShellScript",
            Parameters={'commands': ['sudo echo "<html><body>lambda test webserver6</body></html>" > /var/www/html/index.html']}, )
        
        return {
            'statusCode': 200
        }
    
    2. tag를 이용한 run command 동작
    import json
    import boto3
    ssm = boto3.client('ssm')
    
    def lambda_handler(event, context):
       
    
        ssmcommand = ssm.send_command(
    
            Targets = [
            {'Key': 'tag:Name', 
                 'Values': [
                        'ec2-efs']
                    }
                  ],
            DocumentName="AWS-RunShellScript",
            Parameters={'commands': 
    ['sudo cp -fv "<html><body>tag lambda runcommand22</body></html>" 
    > /efstest/index.html'],['sudo cp -fv /efstest/index.html /var/www/html/] }, )
        return{
            'status_code': 200
        }
  1. 이벤트 트리거 - cloudwatch 규칙
    → sacle out시 run command 동작
  1. 확인 과정
    → 람다 코드에서 내용을 변경후 작업진행해보자
  1. sacle out 동작
    → 정상적으로 run command 동작 확인

 

결론

따라서, Cloudwatch를 이용하여 SSM runcommand 를 적용하기보단 Cloudwatch Event 와 Lambda를 트리거 시키는 방식이 용이했다,
또한, ASG 구성 방식중 Launch Template을 이용하여 버전관리를 통하여 서버를 업데이트 하는 방식이 존재 하며 
해당 Template을 인스턴스 새로고침 or Warm pool 방식을 적용하면 편리할 것 이다.
 

 

 

'Automation' 카테고리의 다른 글

SSM Automation을 통한 자동화  (0) 2022.08.23
image builder 2  (0) 2021.06.16
Image Builder -golden ami 생성  (0) 2021.03.29
Lambda Ec2 start / stop Tag기반  (0) 2021.01.20

+ Recent posts