📖 학습주제
가장 많이 사용되는 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

