AWS Lambda
이다.함수 생성
시 다음과 같이 세 개의 생성 유형을 고르게 된다. 블루 프린트
를 사용하면 간단한 예시 코드가 나오게 된다. console.log('Loading function');
exports.handler = async (event, context) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
console.log('value1 =', event.key1);
console.log('value2 =', event.key2);
console.log('value3 =', event.key3);
return event.key1; // Echo back the first key value
// throw new Error('Something went wrong');
};
코드
-> Test 버튼
을 통해 Test Event
를 작성할 수 있게 된다. Deploy
를 누르게 되면 코드를 사용할 수 있도록 배포된트리거
설정이 가능한데 만약 S3에 설정을 하고 싶다면 S3 해당 버킷에서 이벤트 알림
-> 이벤트 알림 생성
을 선택한다. 이후 이벤트 유형에서 객체 생성 타입을 선택해야 하는데 해당 이벤트는 전송
, 개시
, 복사
, 멀티파트 업로드 완료
가 있다. 선택한 이벤트가 발생할 때 하단의 대상
에서 선택한 lambda
함수를 같이 실행되도록 만들어 줄 수 있다.s3-lambda-test-01
가 실행되는 것을 알 수 있다.CloudWatch
-> 로그 그룹
을 통해 볼 수 있다.가상화
는 한 대의 PC에 논리적으로 공간을 분리해 여러 개의 서비스를 띄울 수 있게 만든 기술이다. Hypervisor
라는 기술을 통해 하나의 OS에서 여러 개의 OS를 설치할 수도 있고, 여러 개의 애플리케이션을 별도의 공간에 설치**할 수도 있다.Linux
에서 Container
를 제어하는 LXC(LinuX Containers)
기술인데 이 기술을 기반으로 Docker
가 나오게 됐다.Docker
가 굉장히 많은 컨테이너를 키울 수 있는데 이런 경우 복잡도가 높아져 Kubernetes Deployment(쿠버네티스)
를 사용하고 있다.(사진 출처: https://smjeon.dev/etc/docker-overview/)
Docker
는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 플랫폼으로 소프트웨어를 컨테이너
라는 표준화된 유닛으로 패키징한다. Docker
의 주 기능이다. 이미지 (image)
: 파일 (file)
을 빌드해서 이미지화하여 이를 이용해 컨테이너 (Container)
생성한다. 컨테이너
목적에 맞는 여러 개의 계층으로 된 바이너리 파일과 의존성이 설치되어 있다.컨테이너 (Container)
: 호스트와 다른 컨테이너로부터 격리된 시스템 자원과 네트워크를 사용하는 프로세스이다. 이미지
는 읽기 전용으로 사용해 변경 사항이 컨테이너
계층에 저장되기 때문에 컨테이너
에서 무엇을 하든 이미지는 영향을 받지 않는다.git
과 명령어가 비슷함. 이미지화 시킬 때는 Docker build
라는 명령어를 실행한다.Docker push
받을 때는 Docker pull
을 사용한다.Docker run
을 사용한다. 1. container 생성 및 실행
run
: container 생성 및 실행
stop
: container 중지
start
: container 실행
restart
: container 재실행
2. container 관리
ps
: container 확인
rm
: container 삭제
3. container 실행 관리
logs
: container log 확인
exec
: container 명령어 수행
4. image 관리
images
: image 확인
rmi
: image 삭제
pull
: image 다운로드
push
: image 업로드
tag
: image 태그 지정
Dockerfile
이라고 설정해야 한다.#베이스 이미지를 몇 버전으로 할 건지
FROM adoptopenjdk/openjdk11
CMD ["./mvnw", "clean", "package"]
#JAR_FILE_PATH라는 변수에 .jar 파일의 위치를 넣어 준다.
ARG JAR_FILE_PATH = build/libs/config-0.0.1-SNAPSHOT.jar
#해당 .jar 파일의 위치를 copy해 준다.
COPY ${JAR_FILE_PATH} config-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java", "-jar", "config-0.0.1-SNAPSHOT.jar", "-Dspring.profiles.active-local"]
FROM
: 이미지를 어디서 시작할 건지 설정한다. (베이스 이미지)
COPY
: build 중간에 호스트 파일 또는 폴더를 이미지에 가지고 오는 것.
CMD
: 컨테이너가 생성되었을 때 실행할 실행 파일이나 셀 스크립트
ENTRYPOINT
: 컨테이너를 시작할 때마다 실행할 실행 파일이나 셀 스크립트.
만약 하나 이상의 Docker 파일을 다루고 싶을 경우 Docker compose
를 사용해 주어야 하고 docker-compose.yml
파일이 루트 위치에 있어야 한다.
docker build -t (애플리케이션 이름):(태그) (docker 파일이 있는 위치)
.
으로 대체가 가능하다.-t
는 태그 옵션을 주는 것이다.docker images
docker ps
Docker
에 실행된 프로세스가 있는지 확인할 수 있다.docker run -d (애플리케이션 이름):(태그)
컨테이너
화해서 실행한다고 할 때 사용하는 명령어이다.-d
는 백그라운드로 실행될 수 있도록 하는 명령어이다.docker stop (종료할 컨테이너 ID)
stop
명령어이다.docker kill (종료할 컨테이너 ID)
docker-compose up -d
docker-compose.yml
에 있는 인스턴스들이 모두 실행된다.docker ps
를 통해 동일하게 확인 가능하다.대시보드
제공경보
(알림), 장애가 발생했을 때 별도의 서버를 띄우는 작업도 진행 (Auto Scaling
)로그 관리 및 분석
을 하고, S3를 통해 로그 데이터를 내보내 다른 시스템에 활용 가능지표
제공특정 실시간 이벤트
에 대해 스트림을 제공CloudWatch
내에서 리소스를 측정하고 진단 가능인사이트
제공DevOps
란?소프트웨어 개발
과 운영
의 합성어Devops
의 역할Soft Skill
- 사회 기술, 의사소통 기술, 성격 또는 성격 특성, 태도, 직업 속성, 소셜 인텔리전스 및 감성 인텔리전스 지수 등의 조합
Technical Skill
Go
, Python
등 능숙하게 다룰 수 있는 언어가 있어야 함Linux
와 같은 운영체제를 능숙하게 다루고 개념을 알아야 함자동화 도구
를 다룰 수 있어야 함퍼블릭 클라우드
를 능숙하게 다루고 직접 구축 및 설계할 수 있어야 함DevOps
의 역할에 Data Engineering
과 Machine Learning
이 추가Build
, Deploy
, Monitor
과정을 자동화하는 역할을 한다.MLOps
의 영역이다.ECR
이라고 하고 ECR
에 저장된 이미지를 기반으로 가상화된 서비스를 제공하는 것이 ECS
이다.ECR
작업 시에는 권한에 대한 문제가 발생할 수 있으므로 IAM
사용자 정책에서 ECR
에 full access 할 수 있는 권한을 부여해 주어야 한다.aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 174170816230.dkr.ecr.ap-northeast-2.amazonaws.com
docker build -t pop-config-server
docker tag pip-config-server:latest 174170816230.dkr.ecr.ap-northeast-2.amazonaws.com/pip-config-server:latest
docker push 74170816230.dkr.ecr.ap-northeast-2.amazonaws.com/pip-config-server:latest
ECS
서비스와 연동해 주기 위해서는 ECS
-> 태스트 정의 및 컨테이너 구성
에서 컨테이너 정보
의 이미지 URL
에 리포지토리 주소
를 넣어 주어야 한다. 이때 환경은 AWS fargate(서버리스)
를 선택해 주면 된다. 태스크 정의
가 끝났다면 태스크 등록
을 클러스터
로 들어가 해 주어야 한다.별도의 ELB
를 구성해야 한다. (직접 접속은 불가능) ECS
를 연결해 주면 된다.Gateway
역할을 할 수 있는 서버리스 서비스이다.Lambda
가 들어가는 트리거 역할을 한다.API
를 생성 및 관리가 가능하다.API Gateway
생성API 생성
화면으로 넘어가게 된다.최적화된 에지
와 프라이빗
으로 선택할 수 있게 나누어져 있다.리소스
를 추가해 줄 수 있다. (method들 추가 가능)Lambda
서비스를 추가했다면 다음과 같이 개요에 API Gateway
와 연결된 것을 확인할 수 있다. ✔ 개인적으로
Docker File
의 명령어를 간략하게 설명을 해 주어서CMD
와ENTRYPOINT
는 같은 컨테이너의 실행 시 실행 파일을 호출해 주는 부분인데 차이를 알 수 없어 이 부분을 따로 공부하여 추가하였다.
1. Docker File 명령어
- CMD
- 컨테이너가 생성할 때만 실행되는 명령어
Docker run
Dockerfile
에 여러 번 작성될 수 있지만 마지막 명령어 하나만 실행된다. (추가된 명령어가 기존 설정된 명령어를 수정하기 때문에)#CMD 양식 CMD ["command", "parameter1", "parameter2"]
- ENTRYPOINT
- 컨테이너가 시작할 때마다 실행되는 명령어
Docker start
#ENTRYPOINT 양식 ENTRYPOINT ["command", "parameter1", "parameter2"]
- LABEL
- 이미지에 메타 데이터를 추가하는 명령어
- key-value 형태
- RUN
- 명령어를 실행할 때마다 새로운 레이어가 생성
- 새 레이어에 명령어를 실행하고 새로운 이미지 생성
- EXPOSE
- 생성된 이미지를 특정 포트에 열어 주는 명령어EXPOSE 열어 줄 포트 주소 #(ex. 80)
- ADD
COPY
명령어와 동일하게 build 중간에 호스트의 파일 또는 폴더를 이미지에 가지고 옴- 다만 일반 파일뿐 아니라
ADD
를 사용하면 압축 파일도 사용할 수 있으므로 특수한 파일을 가지고 올 때 사용
이건 내가 들을 생각으로 기록해 두는 Docker 강의
📌 생활 코딩 - Docker 입문
📌 Udemy - Docker & Kubernetes : 실전 가이드