1. 오토 스케일링 그룹과 엘라스틱 로드 밸런싱 요약
오토 스케일링 그룹 (Auto Scaling Group)
- 역할: EC2 인스턴스 그룹을 생성하고 관리.
- 기능:
- 애플리케이션 트래픽에 따라 EC2 인스턴스의 개수를 자동으로 조정.
- 최소 및 최대 인스턴스 수 지정 가능.
- 부하 변화에 대응하여 효율적인 리소스 활용 가능.
- 예시 설정:
- 시작 인스턴스 수: 2개.
- 최소 인스턴스 수: 1개.
- 최대 인스턴스 수: 10개.
엘라스틱 로드 밸런싱 (Elastic Load Balancing)
- 역할: 여러 인스턴스에 트래픽을 균등하게 분산.
- 필요성: 여러 EC2 인스턴스에서 애플리케이션을 실행할 때 트래픽 분산 필수.
Elastic Beanstalk
- 역할: 오토 스케일링 그룹과 로드 밸런싱 설정을 간단하게 관리.
- 특징:
- AWS에서 제공하는 PaaS 서비스.
- EC2 인스턴스 관리 자동화.
- 오토 스케일링 및 로드 밸런싱 구성 간소화.
핵심 요약
- 오토 스케일링 그룹: 트래픽 변화에 따라 EC2 인스턴스를 자동으로 조정.
- 엘라스틱 로드 밸런싱: 트래픽을 여러 인스턴스에 균등 분배.
- Elastic Beanstalk: 오토 스케일링과 로드 밸런싱 설정을 간소화하는 도구.
2. Elastic Beanstalk를 사용한 웹 애플리케이션 배포 요약
Elastic Beanstalk 소개
- 역할: AWS에서 웹 애플리케이션을 배포, 관리, 스케일링하는 서비스.
- 특징:
- Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker 등 다양한 플랫폼 지원.
- 로드 밸런싱, 오토 스케일링, 인프라 프로비저닝 작업을 자동화.
- 종단간 애플리케이션 관리 제공.
기존 방식 vs Elastic Beanstalk
- 기존 방식:
- EC2 인스턴스 생성 → 적절한 런타임 설치 (Java, Python 등) → 애플리케이션 설치 → 로드 밸런싱 및 오토 스케일링 설정.
- 많은 수작업과 관리 필요.
- Elastic Beanstalk 사용:
- AWS가 인프라 및 설정을 자동으로 처리.
- 사용자는 애플리케이션 코드를 제공하기만 하면 배포 완료.
- 기존 방식:
Elastic Beanstalk의 주요 장점
- 자동화: 배포, 로드 밸런싱, 오토 스케일링을 자동으로 설정.
- 다양한 플랫폼 지원: Java, Python, Node.js 등 주요 개발 언어와 Docker 컨테이너까지 지원.
- 빠른 배포: 몇 분 안에 애플리케이션 배포 가능.
- 간편한 관리: AWS Management Console에서 애플리케이션과 환경을 직관적으로 관리.
Elastic Beanstalk를 사용한 애플리케이션 생성 과정
- 1단계: AWS Management Console에서 Elastic Beanstalk 검색 및 선택.
- 2단계: 애플리케이션 생성:
- 이름 지정: 예를 들어, my-first-elastic-beanstalk-application.
- 플랫폼 선택: Python, Node.js, Java 등 배포할 애플리케이션의 개발 언어나 플랫폼 선택.
- 컨테이너 지원: Docker 등 컨테이너 기반 애플리케이션도 선택 가능.
- 3단계: 애플리케이션 배포 및 실행.
예제
- 플랫폼 선택: Python 애플리케이션 선택.
- 태그: 선택적으로 추가.
- 애플리케이션 배포: 애플리케이션 코드 업로드 후 배포 진행.
4. Docker와 컨테이너가 필요한 이유 알아보기
마이크로서비스 아키텍처란?
- 하나의 대형 애플리케이션 대신, 작고 독립적으로 배포 가능한 마이크로서비스를 개발하는 아키텍처.
- 특정 서비스만 변경하고 배포할 수 있어 유지보수가 용이함.
- 장점: 다양한 프로그래밍 언어를 사용 가능.
예) 영화 서비스 → Go, 고객 서비스 → Python, 리뷰 서비스 → Node.js, 예약 서비스 → Java. - 과제: 배포와 모니터링 복잡성 증가. 언어와 환경별로 관리 방법이 달라 운영이 어려움.
컨테이너란?
- 각 마이크로서비스를 표준화된 방식으로 실행할 수 있도록 지원.
- Docker를 통해 컨테이너 이미지를 생성하여, 필요한 애플리케이션 런타임과 종속 항목을 포함.
- Java 마이크로서비스 → JDK, 코드, 종속 항목 포함.
- Python 마이크로서비스 → Python, 코드, 종속 항목 포함.
- 동일한 Docker Image를 로컬, 데이터 센터, 클라우드 어디서든 실행 가능.
Docker의 장점
- 클라우드 중립성
- Azure, Google Cloud 등 다양한 플랫폼에서 동일한 Docker Image 실행 가능.
- 표준화 제공
- 배포, 모니터링, 로깅 방식이 동일. 운영 팀의 부담 감소.
- 가벼움
- Docker 컨테이너는 게스트 OS가 없으므로 성능이 뛰어남 (가상 머신 대비 CPU 소모 적음).
- 격리성 보장
- 여러 컨테이너가 하나의 인프라에서 실행되더라도 서로 간섭하지 않음.
Docker의 핵심 요약
- 표준화된 방식으로 다양한 마이크로서비스를 실행 가능.
- 개발과 운영 효율성 향상.
5. AWS의 컨테이너 오케스트레이션
1. 컨테이너 오케스트레이션의 필요성
- 마이크로서비스 운영의 복잡성 해결:
- 각 서비스별 Docker 이미지가 운영 환경에서 여러 인스턴스로 배포됨.
- A 서비스 10개, B 서비스 15개 등 다수 인스턴스 운영 필요.
2. 컨테이너 오케스트레이션의 주요 기능
- 오토 스케일링:
- 서비스별 부하에 따라 컨테이너 수를 조정.
- 예) 리뷰 서비스는 부하가 많아 확장 필요.
- 서비스 디스커버리:
- 마이크로서비스 간 동적 검색 지원.
- 하드코딩 없이 동적으로 서로 찾을 수 있게 함.
- 로드 밸런싱:
- 동일 서비스의 여러 인스턴스에 트래픽을 분산.
- 자체 복구:
- 실패한 컨테이너를 감지하고 정상 컨테이너로 대체.
- 다운타임 없는 배포:
- 새 버전 배포 시 서비스 중단 없이 수행.
3. AWS의 컨테이너 오케스트레이션 솔루션
- Amazon EKS (Elastic Kubernetes Service):
- Kubernetes 기반.
- 클라우드 중립적 옵션(Google Cloud 등 다른 플랫폼에서도 사용 가능).
- 주의: 프리 티어 제공 안 함.
- Amazon ECS (Elastic Container Service):
- AWS에 특화된 오케스트레이션 서비스.
- AWS Fargate:
- 서버리스 ECS/EKS.
- 클러스터 관리 필요 없음.
- 주의: 프리 티어 제공 안 함.
4. 컨테이너 오케스트레이션의 핵심
- 클러스터 생성:
- EC2 인스턴스나 가상 머신을 클러스터로 구성.
- 마이크로서비스를 클러스터에 배포.
- 기본 기능:
- 오토 스케일링, 서비스 디스커버리, 로드 밸런싱, 자체 복구, 다운타임 없는 배포 등 제공.
5. 요약
- 컨테이너 오케스트레이션은 마이크로서비스 아키텍처 운영의 필수 요소.
- AWS에서는 EKS, ECS, Fargate가 주요 솔루션.
- 각 서비스의 장단점과 요구사항에 따라 선택 가능.
6.Amazon ECS와 Fargate 데모 정리
1. ECS와 Fargate 소개
- ECS: 안전하고 신뢰할 수 있으며 확장성 있는 컨테이너 실행 서비스를 제공.
- Fargate: 서버리스 방식으로 ECS를 실행하며, 인프라를 직접 관리할 필요가 없음.
- 주의: Fargate는 프리 티어를 제공하지 않으므로 비용이 발생할 수 있음.
2. ECS 구성 요소
- 클러스터:
- 애플리케이션 실행을 위한 하드웨어 그룹.
- AWS에서 관리되며, Fargate 사용 시 하드웨어 세부 사항을 신경 쓸 필요 없음.
- 컨테이너:
- 마이크로서비스를 실행하는 단위.
- 예시로, httpd:2.4 Docker 이미지가 사용됨.
- 작업(Task):
- 하나 이상의 컨테이너 그룹.
- 대부분은 단일 컨테이너로 구성되지만, 여러 컨테이너를 포함할 수도 있음.
- 서비스:
- 작업을 정의한 대로 실행하고 유지하는 역할.
- 예: 작업의 인스턴스를 2개 실행하고 유지하도록 설정 가능.
3. ECS 구성 과정
- 클러스터 생성:
- Fargate를 선택하면 AWS에서 모든 인프라를 관리.
- 컨테이너 정의:
- 마이크로서비스 이미지, CPU, 메모리 사용량 등 설정.
- 작업 정의:
- 애플리케이션의 블루프린트를 생성.
- 서비스 정의:
- 실행할 작업 수를 지정.
- 로드 밸런서를 추가해 트래픽을 관리.
- 환경 설정 검토:
- 컨테이너, 작업, 서비스, 클러스터 설정을 확인.
- 리소스 생성:
- AWS가 리소스를 생성하며, 완료까지 약 10분 소요.
4. 데모에서의 주요 설정
- 샘플 애플리케이션 실행:
- httpd:2.4 Docker 이미지 사용.
- CPU: 0.25 vCPU, 메모리: 0.5GB.
- 서비스 정의:
- 작업 인스턴스 2개 실행.
- 애플리케이션 로드 밸런서를 추가.
- Fargate 클러스터:
- 서버리스 방식으로 설정.
5. 요약
Fargate를 사용한 ECS는 서버리스 환경에서 마이크로서비스를 실행하는 강력한 도구입니다. 설정 과정은 AWS가 대부분의 인프라를 관리해 주므로 간단하며, 클러스터와 작업, 서비스 개념만 잘 이해하면 쉽게 사용할 수 있습니다.
7.Amazon ECS 사용하기
Amazon ECS 데모: 서비스 확인 및 관리
1. 서비스 준비
- 이전 강의에서 Amazon ECS를 통해 클러스터와 서비스를 생성했습니다.
- 생성 후 약 10분이 소요되어 10단계가 완료되었습니다.
- 결과적으로 클러스터와 서비스가 준비되고 다양한 리소스가 생성되었습니다.
2. 서비스 확인
클러스터 상세정보 확인:
- ECS 콘솔에서 생성한 클러스터를 열어 확인.
- 디폴트 클러스터 사용, 실행 타입은 Fargate.
- 현재 두 개의 작업이 실행 중이고 활성화된 서비스는 한 개.
서비스 상세정보 확인:
- 서비스 이름: sample-app-service.
- 작업 정의와 연결되어 있으며 작업 인스턴스를 두 개 실행 중.
- 애플리케이션 로드 밸런서를 사용 중.
- EC2 콘솔에서 로드 밸런서를 찾아 DNS 이름을 확인.
- 해당 DNS로 접속하면 Amazon ECS 샘플 앱 실행 확인 가능.
3. 서비스 상태 점검
작업 상태:
- 작업 탭에서 실행 중인 두 개의 작업 확인.
- 서비스의 이벤트 탭에서 발생한 이벤트를 확인할 수 있음.
- 작업 중지 시에도 새로운 작업이 생성되어 안정적인 상태를 유지.
오토 스케일링 및 메트릭:
- 부하에 따라 작업 수를 조정하는 오토 스케일링 설정 가능.
- CPU, 메모리 사용률 및 작업 로그를 ECS 콘솔에서 직접 확인.
4. 작업 중지 시 서비스 동작
- 작업 중지 후 서비스는 설정된 작업 수(2개)를 유지하기 위해 새 작업을 시작.
- 서비스는 항상 설정된 작업 수를 유지하며, 상태를 모니터링하여 자동으로 복구.
5. 새 마이크로서비스 추가
- 새 마이크로서비스를 추가하려면:
- 작업 정의 생성.
- 실행할 작업 수 정의.
- 새 서비스를 생성해 클러스터에 배포.
6. 클러스터 삭제
- 사용이 끝난 클러스터는 삭제 가능.
- "delete me" 구문을 입력하여 삭제 요청.
- 삭제 완료까지 시간이 조금 소요됨.
요약
- Amazon ECS를 활용해 서버리스 방식으로 클러스터와 서비스를 생성, 관리.
- 서비스는 설정된 작업 수를 항상 유지하며, 필요 시 작업을 자동으로 복구.
- 오토 스케일링 및 로그 관리 등 다양한 기능 제공.
- Fargate를 통해 인프라 관리 부담 없이 컨테이너 실행 가능.
Amazon Elastic Container Service
완전관리형 컨테이너
Amazon Elastic Container Service(ECS)는 클러스터에서 컨테이너를 손쉽게 실행, 중지 및 관리할 수 있는 확장성이 뛰어나고 빠른 컨테이너 관리 서비스입니다.
8. AWS의 서버리스에 대해 알아보기 - AWS Lambda
서버리스(Serverless) 개념과 AWS Lambda 소개 정리
1. 서버리스란?
- 서버리스는 '서버가 없다'는 뜻이 아님.
- 애플리케이션은 여전히 서버에서 실행되지만, 사용자가 서버 관리에 신경 쓸 필요가 없음.
- 클라우드 플랫폼이 서버 운영, 스케일링, 가용성 등을 모두 관리.
- 개발자가 코드를 작성하고 배포하는 데만 집중할 수 있는 환경.
2. 서버리스의 주요 특징
인프라 관리 필요 없음
- 서버의 위치, 운영체제, 로드 밸런싱, 스케일링 등을 고민하지 않아도 됨.
- 클라우드 플랫폼이 이를 자동으로 처리.
탄력적 스케일링
- 부하에 따라 클라우드 플랫폼이 자동으로 인스턴스의 수를 조절.
- 높은 가용성을 기본으로 제공.
사용량 기반 비용 청구
- 요청 수와 실행 시간에 따라 비용 지불.
- 요청이 없으면 비용이 발생하지 않음.
효율적인 자원 활용
- 필요할 때만 실행되므로 자원의 낭비를 최소화.
3. AWS Lambda 소개
- AWS Lambda는 AWS에서 제공하는 대표적인 서버리스 컴퓨팅 서비스.
- 특징:
- 완전한 서버리스:
- 서버 관리, 스케일링, 가용성을 고민할 필요 없음.
- 다양한 프로그래밍 언어 지원:
- Java, Go, PowerShell, Node.js, C#, Python, Ruby 등.
- 비용 효율성:
- 요청 수, 실행 시간, 사용 메모리에 따라 비용 청구.
- 사용한 만큼만 비용 지불.
- 대규모 요청 처리:
- 수백만 건의 요청도 자동으로 스케일링해 처리 가능.
- 완전한 서버리스:
4. 서버리스의 장점 요약
- 개발자는 코드에만 집중할 수 있음.
- 자동화된 관리로 복잡한 인프라 설정 불필요.
- 비용 절감: 사용량 기반 비용 청구.
5. 결론
서버리스는 개발자가 코드와 애플리케이션 로직에 집중하도록 돕는 환경이며, AWS Lambda는 이를 효과적으로 구현할 수 있는 강력한 도구입니다.
9. Lambda 함수 생성하기
1. Lambda 함수 생성
- Lambda는 서버 관리 없이 코드 실행이 가능한 서버리스 서비스.
- 이번 데모에서 Node.js를 활용한 Hello World Lambda 함수를 생성.
- 함수 이름: my-node-js-lambda
- 런타임: Node.js 최신 버전
2. Lambda 함수 생성 과정
함수 생성
- 다양한 런타임 지원 (.NET, Go, Java, Node.js, Python, Ruby 등).
- Node.js 선택 후 함수 생성 → 약 5~10초 소요.
코드 확인 및 기본 응답
exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
응답 구조:
- statusCode: HTTP 상태 코드
- body: 메시지(예: "Hello from Lambda!")
3. Lambda 함수 테스트
테스트 이벤트 생성
- 테스트 이벤트 이름: FirstEvent
- 기본 JSON 콘텐츠 사용
{ "key1": "value1", "key2": "value2", "key3": "value3" }
2.테스트 실행
- 테스트 결과:
- statusCode: 200
- body: "Hello from Lambda!"
- 로그에서 요청 ID와 이벤트 데이터 확인 가능.
4. 코드 수정 및 배포
코드 수정
- 응답 메시지 변경:
"Hello from Lambda!" → "Hello from My First Lambda Function" - 이벤트 로깅 추가
- 응답 메시지 변경:
console.log(event);
수정사항 배포
- 배포 버튼 클릭 후 수정 사항 반영.
- 수정 후 테스트 시:
- 응답 메시지: "Hello from My First Lambda Function"
- 로그에서 JSON 이벤트 데이터 확인 가능.
5. 테스트 이벤트 수정
- JSON 데이터 수정
- 기존: key1, value1, key2, value2, key3, value3
- 수정: key4, value4
- JSON 수정 후 테스트 실행 → 수정된 데이터가 로그에 출력됨.
6. Lambda의 장점
- 자동 스케일링: 수백만 개 요청 처리 가능.
- 서버 관리 불필요: 코딩에만 집중 가능.
- 실시간 코드 업데이트: 간단한 코드 변경과 테스트 지원.
7. 결론
- Lambda 함수를 통해 서버리스 환경에서 코드 작성, 배포, 실행을 체험.
- 자동 스케일링과 서버 관리 부담 감소로 효율적인 애플리케이션 개발 가능.
10. Lambda 함수 자세히 알아보기
. Lambda 함수 모니터링
- 메트릭: Lambda 함수의 호출 횟수, 호출 지속 시간(최소, 최대, 평균), 오류 발생 여부 등을 CloudWatch를 통해 확인할 수 있습니다.
- 로그: 함수 호출 시의 상세 로그를 확인하며, 이를 통해 디버깅과 분석이 가능합니다.
2. 트레이싱 활성화
- AWS X-Ray: Lambda 함수 호출 흐름을 추적하고 성능을 분석할 수 있습니다.
- 활성화 방법:
- Lambda 콘솔에서 환경 설정 > 모니터링 및 운영 툴에서 X-Ray 트레이싱 활성화.
- Lambda 실행 역할에 권한을 부여해야 작동.
3. Lambda 함수의 환경 설정
- 메모리: 기본값 128MB, 최대 10GB. 메모리 용량 증가는 CPU와 비용에도 영향을 줌.
- 임시 스토리지: 기본값 512MB, 최대 10GB, 기본 경로는 /tmp.
- 타임아웃: 기본값 3초, 최대 15분(900초). 장기 실행 작업에는 부적합.
- 실행 역할: S3와 같은 AWS 리소스와 상호작용할 수 있도록 권한 부여.
4. Lambda 함수 URL
- Lambda 함수에 HTTP/HTTPS 엔드포인트를 생성 가능.
- 인증 옵션:
- IAM 인증 사용.
- 퍼블릭 함수로 설정 시, 호출 비용에 유의해야 함.
5. 환경 변수
- 키-값 형태로 환경 변수 설정 가능.
- AWS가 제공하는 사전 정의 환경 변수:
- 예: AWS_REGION, AWS_EXECUTION_ENV.
- 코드에서 process.env 또는 os.environ으로 액세스 가능.
6. Lambda 함수 동시성
- 스케일링: Lambda는 요청량에 따라 자동으로 스케일링 처리.
- 예약되지 않은 계정 동시성: 기본값 10, 요청량 증가에 따른 설정 필요.
크로스 플랫폼 컨테이너 오케스트레이션 솔루션을 사용해 마이크로서비스 아키텍처를 구현하려 합니다. 다음 중 어떤 서비스를 권장하겠습니까?.
컨테이너 오케스트레이션이 필요합니다. => Elastic Container Service
11.AWS 클라우드 컴퓨팅 요약
AWS 컴퓨팅 서비스 개요
1. 기본 컴퓨팅 서비스
EC2 (Elastic Compute Cloud): 애플리케이션 실행을 위한 가장 기본적인 방법.
EC2 인스턴스를 실행하고 ELB (Elastic Load Balancer)를 통해 로드 밸런싱 처리.
운영체제를 완전히 제어하거나 커스텀 소프트웨어 실행에 적합.
2. PaaS (Platform as a Service) 권장
AWS에서 제공하는 PaaS는 스케일링, 가용성, 로드 밸런싱을 자동 처리.
Elastic Beanstalk:
웹 애플리케이션 및 배치 애플리케이션 관리 간소화.
코드를 제공하고 런타임만 지정하면 자동으로 EC2 인스턴스 생성 및 로드 밸런싱 수행.
3. 컨테이너 오케스트레이션 서비스
Kubernetes:
가장 널리 사용되는 컨테이너 오케스트레이션 솔루션.
AWS에서는 Kubernetes 관리 서비스인 Amazon EKS 제공.
Amazon ECS:
AWS 전용 컨테이너 오케스트레이션 솔루션.
AWS Fargate:
ECS 또는 EKS를 서버리스 방식으로 실행 가능.
4. 서버리스 컴퓨팅
AWS Lambda:
코드를 서버리스 방식으로 실행.
함수 단위로 애플리케이션 구축 가능.
1.AWS Elastic Beanstalk 배포
스프링부트 빌드
jar 파일 및 자바 버전환경 확인
설정이 정상적으로 안되어서 오류가 나는 경우가 많은데, 설정이 정상적으로 안되어서 오류가 나는 경우가 많은데,
IAM 에서 Instance Profile
설정이 정상적으로 안되어서 오류가 나는 경우가 많은데,
다음을 참조
https://joewithtech.tistory.com/75
2.AWS Elastic Beanstalk 및 Amazon RDS
Docker 컨테이너로 MySQL 실행
docker run --detach --env MYSQL_ROOT_PASSWORD=dummypassword --env MYSQL_USER=social-media-user --env MYSQL_PASSWORD=dummypassword --env MYSQL_DATABASE=social-media-database --name mysql --publish 3306:3306 mysql:8-oracle
mysqlsh commands
mysqlsh \connect social-media-user@localhost:3306 \sql use social-media-database select * from user_details; select * from post; \quit
Hello World Resource
Hello World Resource
- http://localhost:5000/hello-world
Hello World
Users Resource
POST http://localhost:5000/jpa/users
{ "name": "Ranga", "birthDate": "2000-07-19" }
GET http://localhost:5000/jpa/users
[ { "id": 1, "name": "Ranga", "birthDate": "2000-07-19" } ]
GET http://localhost:5000/jpa/users/1
{ "id": 1, "name": "Ranga", "birthDate": "2000-07-19" }
POST to http://localhost:5000/jpa/users/1/posts
{ "description":"I want to get AWS Certified" }
GET http://localhost:5000/jpa/users/1/posts
[ { "id": 1, "description": "I want to get AWS Certified" } ]
댓글 ( 0)
댓글 남기기