TIL - Day39 & 40

김혁·2023년 12월 8일
0
post-thumbnail

AWS LAMBDA

람다는 서버리스에 대표적인 제품. 별도의 서버도 없고 환경도 없다.
내가 만든 함수만 적용을해서 서비스를 제공할 수 있도록 함.

  1. 새로 작성
  2. 블루프린트 사용 - 샘플 코드
  3. 컨테이너 이미지

람다는 트리거 즉 이벤트 생겼을 때, 함수를 실행하도록 명령
Cloudwatch에서 로그를 생성
로그 이벤트를 통해서 잘 진행되었는지 확인할 수 있다.

만약 람다랑 s3를 연결한다면)
s3에서 이벤트 알람 생성을 해당 람다 함수로 등록
이벤트 유형에서 전송(다른 것도 가능)으로 등록한다.

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
ex.json

{
  "temperature": 45
}

Docker

Container

쿠버네티스는 여러개의 도커 컨테이너를 효율적으로 활용하기위해서 사용
배포될 때, 가상회된 독립된 환경까지 배포하자. -> 운영표준화

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

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

Dockerfile -> requirement.txt

이미지화는 docker build


도커 내부의 네트워크를 보아야한다. 이미지를 실행시키면 컨테이너화 됨.
호스트는 물리적 서버. local pc 혹은 원격 서버. 우리가 컨테이너를 올린다는 건 별도의 포트로 연결 시켜야한다. docker run 이후 내부 외부 포트를 맞춰야한다. 같은 포트여도 포트를 맞춰야한다. 마지막에 호스트에서 띄운 포트를 가지고 client가 접속해서 서비스를 이용할 수 있다.

Docker-compose

CloudWatch

온프레미스에서 리소스 및 애플리케이션을 모니터링 할 수 있다.
모니터링 및 성능을 확인할 수 있다. 모든 시스템에 대해서 로그 관리를 할 수 있고,s3를 통해 로그를 모을 수 있음.

대시보드를 생성하게 되면 위젯을 통해서 시각화 제공. 템플릿 설정(ex. ec2)
알림을 수신할 이메일 엔드포인트를 설정해준다면, 이메일로 받을 수 있음

DEVOPS

데브옵스는 소프트웨어의 개발과 운영의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 환경이나 문화. 클라우드 플랫폼이나 애자일 개발 방식을 효율적을 하기위해서. 요새는 개발자가 인프라나 운영을 다 하기 때문에, 데봅스가 꼭 필요하다.

데봅스 엔지니어 역할

  • 올바른 데봅스 문화를 위해 서비스 혹은 소프트웨어 라이프사이클에서 반복적인 일들을 자동화하고 기술적 문제 혹은 팀의 차이를 기술적으로 예방하고 해소시키는 사람.
    soft skill, technical skill을 알아야함.

aws 에서는 spark와 hadoop => EMR
데이터웨어하우스로는 s3나 /redshift(대용량 데이터 적재)

모델을 학습 시킬 땐,aws sagemaker
이러한 파이프라인을 하나의 dag파일로 airflow에서 관리
airflow => aws glue (data cataloging)

ECR - Amazon Elastic Container Registry

컨테이너 소프트웨어를 공개적으로 또는 비공개로 공유 및 배포합니다.

이미지를 push하고 pull 해서, 우리가 이미지를 원하는 서버를 띄워서 서버를 실행시킬 수 있음.
이미지를 통해서 ec2에 도커를 설치해서 실행해도 되고, 빈스톡에 도커를 넣어서 해도 된다. 별도의 서버없이 서버리스로 ECS 서비스를 이용해도 된다.

ECS - Elastic Container Service

클러스터 생성 후 vpc 선택하고 기본적으로 인프라는 fargate 서버리스로 된다. 자체적으로 서버리스로 서비스 제공

클러스터 내에 별도의 테스크를 입력해야한다.
테스크 등록 -> ecr에 등록된 이미지 uri를 입력 -> 테스크 생성
그다음 클러스터에가서 테스크를 등록해주면 된다. 하나의 서비스가 ECR을 읽어서 서비스를 제공한다.

그 후 서비스 생성, ECS 는 로드밸런서가 필요하다.

실제 서비스에서는 앞단의 도메인이 로드밸런서를 통해서 ECS를 생성해서 ECS를 이용한다.
CI/CD도 ECR에 배포를 하게되면 서비스까지 받을 수 있도록 연계된다.

API GATEWAY

규모와 관계없이 API를 생성, 유지 관리 및 보호
람다의 트리거로 사용할 수 있음.
restapi 같은 경우 api gateway로 서버리스로 간단하게 사용할 수 있음

api gateway에서 메서드를 생성할 때, 람다함수를 설정할 수 있음.
람다를 등록하고 api gateway에서 람다함수 설정.

간단히 클라이언트 메서드를 호출해서 람다를 콜하면 람다에서 응답을 해서 200을 정상적으로 보낼 수 있도록 작성할 수 있음(post 등등)

메서드 테스트를 통해서 결과를 확인할 수 있음.

또한 cloudwatch를 통해서 모니터링을 할 수 있음. 이런식으로 웹소켓이나 restapi 등을 서버리스하게 할 수 있음.

profile
군도리

0개의 댓글