📖 학습주제

가장 많이 사용되는 AWS 클라우드에 대해 실습 중심으로 학습 (5)


Container

Docker

  • 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
  • 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있음
  • Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있음

이미지 (Image)

  • 컨테이너를 생성할 때 필요한 요소로 컨테이너의 목적에 맞는 바이너리와 의존성이 설치되어 있음
  • 여러 개의 계층으로 된 바이너리 파일로 존재

컨테이너 (Container)

  • 호스트와 다른 컨테이너로부터 격리된 시스템 자원과 네트워크를 사용하는 프로세스
  • 이미지는 읽기 전용으로 사용하여 변경사항은 컨테이너 계층에 저장
    => 컨테이너에서 무엇을 하든 이미지는 영향 받지 않음

Docker LIFE CYCLE

포트포워딩(Port Forwarding)

  • 호스트 머신의 포트를 컨테이너 포트와 연결해 컨테이너 밖에서 온 통신을 컨테이너 포트로 전달

Docker 주요 명령어

container 생성 및 실행 관련 명령어

  • container 생성 및 실행 : run
  • container 중지 : stop
  • container 실행 : start
  • conatiner 재실행 : restart
    container 관리 관련 명령어
  • container 확인 : ps
  • container 삭제 : rm
    container 실행 관리 관련 명령어
  • container log 확인 : logs
  • container에 명령어 수행 : exec
    image 관리 관련 명령어
  • image 확인 : images
  • image 삭제 : rmi
  • image 다운로드 : pull
  • image 업로드 : push
  • image 태그 지정 : tag

dockerfile

Docker-compose

  • 서버에서 컨테이너들을 하나로 묶어서 관리할 수 있게 해주는 관리도구

ECS / ECR

  • ECR(Elastic Container Registry) : 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스

  • ECS(Elastic Container Service) : 컨테이너화된 애플리케이션을 쉽게 배포, 관리, 스케일링할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스(ECR을 기반으로 가상화된 서비스를 제공)

Serverless

Lambda

  • 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스
  • 특정 이벤트나 행위가 일어났을 때 프로그램을 실행시켜야 할 때 사용

이벤트

  • 처리할 Lambda 함수에 대한 데이터가 포함된 JSON 형식 문서

트리거

  • Lambda 함수를 호출하는 리소스 또는 구성

예제

콘솔에 lambda를 검색하고 다음과 같은 코드로 lambda 함수를 작성한다.

import json
import boto3
from datetime import datetime

client = boto3.client('s3')


def lambda_handler(event, context):
    what_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    try:
        response = client.get_object(Bucket=bucket, Key=key)
        
        text = response['Body'].read().decode()
        data = json.loads(text)
        
        if data['temperature'] > 40:
            print(f"Temperature detected : {data['temperature']}C at {what_time}")
            print("Be careful! It's getting really hot!!")
        else:
            print("So far so good")
    except Exception as e:
        print(e)
        raise e

이것을 S3에 등록해보자.

S3의 버킷에서 다음과 같은 이벤트파일을 업로드 한다.
ex1.json

{
  "temperature": 45
}

그 다음 버킷의 속성에서 이벤트 알림 생성으로 만들어 놓은 lambda함수를 지정해 이벤트를 등록한다.

ApiGateway

  • 규모와 관계없이 REST 및 WebSocket API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 AWS 서비스
  • AWS 또는 다른 웹 서비스를 비롯해 AWS 클라우드에 저장된 데이터에 액세스하는 API를 생성할 수 있음

CloudWatch

  • AWS, 온프레미스, 하이브리드, 기타 클라우드 애플리케이션 및 인프라 리소스에 대한 데이터와 실행 가능한 인사이트를 제공하는 모니터링 및 관리 서비스
  • 전체 스택(애플리케이션, 인프라, 네트워크 및 서비스)을 모니터링하고 경보, 로그 및 이벤트 데이터를 사용하여 자동화된 조치를 취함

Devops

Devops

  • 소프트웨어의 개발과 운영의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화

DevOps 엔지니어

  • 올바른 DevpOps 문화를 위해 서비스 혹은 SW LifeCycle 에서 반복적인 일들을 자동화하고, 기술적 문제 혹은 팀의 차이를 기술적으로 예방하고, 해소시키거나 사람

DevOps 엔지니어 역할

Soft skill

  • 사회 기술, 의사소통 기술, 성격 또는 성격 특성, 태도, 직업 속성, 소셜 인텔리젼스 및 감성 인텔리전스 지수 등의 조합으로, 사람들이 환경을 탐색하고 다른 사람들과 잘 일하는 능력

Technical Skill

  • 특정한 일을 효과적으로 수행하는 지식과 능력
  • IT 영역에서는 프로그래밍 언어 작성 능력, SW 디자인, 데이터베이스 및 서버관리 등 특정한 기술의 지식과 수행능력을 예로 들수 있음

    - 프로그램 : Go, Python 등 능숙하게 다룰 수 있는 언어는 큰 강점이 된다.

    - 운영체제 : Linux와 같은 운영체제를 능숙하게 다루는 것과 개념을 반드시 알아야 한다.

    - 서버관리 : 서버를 관리하는 기술과 운영지식을 통해 신뢰할 수 있는 서비스를 구축해야 한다.

    - 오픈소스 : 인프라를 이루는 SW들을 이해하고, 자동화 도구들을 다룰 수 있어야 한다.

    - 클라우드 : 퍼블릭 클라우드를 능숙하게 다루고, 직접 구축 및 설계를 할 수 있어야 한다.

MLOps

Datapipeline


0개의 댓글