본문 바로가기
AWS

AWS 구조와 서비스 lambda, EC2 등

by leopard4 2023. 5. 11.

요약을하다보니 요약이 되지않습니다.  EC2와 Lambda 서버리스 관해서만 볼만합니다.

참고도서를 보는것을 추천드립니다.

 

AWS 구조와 서비스 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

1.전반적인 서비스

서버리스 와 Lambda

관리할 서버가없다는것 (AWS가 인프라 관리를 다해준다는것)

서비스가 이용될때만 서버를 가동하는방식

대표적으로 Lambda

EC2는 시스템도 사용자가 관리하지만 

Lambda 는 프로그램 코드만 관리하면 된다.

 

Lambda의 장점

보안

AWS에서 OS와 미들웨어 등 기반 시스템 모두관리 

장애와 보안패치등도 모두 AWS소관하에 이루어짐

비용

코드가 실행될때만 요금부과

가용성

복수의 가용영역(AZ)에서 실행된다.

사용자가  설정하지 않아도 고가용성, 장애 대응성이 좋다

확장성

동시에 다수 처리를 해야하는경우 자동으로 AWS가 관리하는 처리용 인스턴스가 시작되면서 확장된다.

기본 실행수는 1000개(옛날에)정도로  정해져 있으며 별도의 확장 신청을 통해 동시 실행 수를 늘리는 것도 가능하다.

이외에도

컨테이너 이미지 지원

런타임 언어 설정가능

 

 

Lambda와 EC2 비교

Lambda의 장점이 상당하기 때문에 이것만 사용하면 된다고 생각할수있지만

EC2는 다음과 같은 장점이 있다

  • 온프레미스 응용 프로그램을 AWS로 이전하는 경우 OS 설정등을 그대로 사용 할 수있다.
  • 인스턴스 유형, OS, 네트워크 등을 자유롭게 설정할 수 있는 유연성이 있다.
  • 대량의 트래픽이나 접속을 상시 처리하는 경우 EC2쪽이 저렴해질수 있다.
  • 서버에 프로그램을 배포한다는 기존 방식으로 개발을 진행할 수있다.  Lambda는 AWS의 독자적인 설정 방법과 개발 방법이 있으므로 초보자에게는 어려울 수 있다.

Lambda 함수

기본개념

프로그램 코드를 작성하는 것만으로 실행 할 수 있다.

구체적 방법

1.함수생성 - 함수이름 - 사용할 런타임 (프로그래밍 언어 및 버전) 지정 - 함수생성 

2.함수생성 되면 브라우저 화면에 기본 프로그램 코드가 표시되고 편집할수있다.

3.작성한 함수는 브라우저 화면상에서 테스트 실행이 가능하다.

[테스트]탭을 눌러서 함수에 전달할 데이터를 JSON 형식으로 지정한다.

4.다시 [코드] 탭으로 돌아가 'Test' 버튼을 누르면 함수가 실행되고 실행 결과가 표시된다.

함수를 화면상에서 생성해 프로그램 코드를 쓰는 것만으로도 실행할 수 있다. 

이렇게 별도의 환경을 준비하지 않고 쉽게 실행 할 수 있다는 점이 Lambda 의 매력 중 하나다.

단, 화면상에서 편집할 수 있는 코드는 파이썬이나 Node.js 등 컴파일이 불필요한 일부의 언어만 해당된다.

서버리스에서 프로비저닝

수요에 따라 컴퓨팅 리소스를 자동으로 확장하는 것
사용자가 기능을 요청하면 필요한 컴퓨팅 리소스가 자동으로 프로비저닝(확장)되고 처리가 완료되면 리소스가 해제된다.

 

서버리스 활용법 이해

Lambda는 다른 서비스와 연계해 사용

사용자 접속이나, 데이터 연동 같은 처리를 자동으로 수행

Amazon API Gateway (API Gateway) 서비스와 Lambda 를 결합해 

사용자의 HTTP 요청을 Lambda 함수로 처리 할 수 있다.

이를통해 간단한 웹 응용 프로그램을 만들 수 있다.

 

API Gateway는 GET과 같은 HTTP 메서드나 /api 등의 요청 경로에 대한 정보가 포함된 JSON 데이터를 Lambda 함수에 전달한다.

Lambda 함수에서 응답 내용을 반환하도록 코드를 작성하면 API Gateway를 통해 응답을 반환한다.

웹 브라우저라면 웹 브라우저 화면에 응답 데이터가 표시된다.

 

API Gateway도 서버리스 서비스 이므로 사용자는 서버를 구축하지 않고도 웹 응용 프로그램을 만들 수 있다.

 

S3와 Lambda 의 결합

데이터를 저장할 때 자동처리 

사용자가 S3에 데이터를 저장하면 

Lambda 함수가 자동으로 실행되고 (데이터를 처리하도록 구현된)

데이터를 변환해 다른 S3에 저장한다.

 

주기적으로 Lambda 함수를 실행

매일 12:00등 정해진 시간에 어떤 처리를 하고 싶다면

Amazon EventBridge (이후 EventBridge) 라는 서비스와 Lambda를 연계해 구현할 수 있다

EventBridge에 규칙이라는 형태로 매일 실행할 내용을 정의해두고 실행 대상에 Lambda 함수를 지정하면 주기적인 실행이 가능하다.

 

매일 정해진 시간에 EC2를 중지하거나 시작하는 작업도 가능하다.

예시 ) 매일 12시에 EventBridge가 Lambda 함수를 실행 하여 EC2를 정지하도록 설계

 

여기서 작성한 3개의 예시말고도 다양한 형태로 Lambda 함수를 구현할 수 있다.

 

Lambda 에서 사용자가 변경가능한 3가지 설정

  • 메모리용량 - 기본값은 128MB이며 최대 약 10,240MB 까지 지정할 수 있다. CPU는 지정불가지만 메모리 용량에 비례해 설정된다
  • 타임아웃 시간 -  함수가 실행되는 최대시간. 이시간이 지나도 실행되고 있는 경우 정지된다. 기본값은 3초이며 1~900 초 사이로 지정할 수 있다.
  • 환경 변수 - 환경변수는 함수에 사용하는 외부 변수와 같은개념이다. 가령 개발 환경과 서비스 환경이 서로 다른 데이터 베이스를 사용해야 하는 경우, 환경 변수에 데이터 베이스 접속 정보를 저장해두면 동일한 코드를 사용해도 서로 다른 데이터 베이스를 이용 할 수 있다. 즉, 환경마다 서로 다른 소스 코드를 만들지 않아도 된다. 노출되면 안되는 API 키 같은것도 환경변수로 저장하는듯?

예시)

환경변수 DB = develop-db

프로그램 코드에서 DB를 사용 

환경변수 DB = production-db 

프로그램 코드에서 DB를 사용하는것은 변하지 않음

즉, 코드를 수정할 필요가 없음

 

Lambda는 S3에 데이터를 저장하거나 EC2를 시작/중지 하는 등 다른 AWS 자원을 조작하기 위한 목적으로 사용되는 경우가 많지만, 처음 Lambda 함수를 만들면 다른 서비스에 대한 조작 권한을 따로 부여해야한다.

Lambda 함수에 IAM (Identity and Access Management) 역할형식으로 권한을 부여해야 한다. 

이 IAM 역할은 사용자가 권한을 설정해 생성한다

 

예를들어 S3 버켓에 데이터를 저장하는 처리를 해야하는 경우 S3의 PutObject 권한을 가지는 

IAM 역할을 만들어 Lambda 함수에 설정한다.

아무런 역할을 지정하지 않고 Lambda를 생성하면 기본적으로 CloudWatch라는 감시 서비스로 로그를 보낼 수 있는 권한만 부여된다.

 

Lambda에 권한을 설정할 때는 처리 내용에 필요한 최소한의 권한을 설정하는 것이 중요하다.

 

Lambda 함수 실행 상태 모니터링

Lambda 함수를 만들어 배포하면 CloudWatch / Metrics 에 

실행횟수, 실행 시간(최소/최대/평균), 오류 수와 실행 성공률이 자동 전송되고 게이지로 확인할수있다.

뿐만아니라 함수가 출력하는 로그도 확인 할 수 있다.

이건 기본 설정이지만 다른서비스나 외부 서비스를 결합한다면 다양한 조건을 넣어 모니터링 할 수 있다.

 

Lambda 이용 요금

요청수와 처리시간에 따라 청구 됨.

책의 내용에서 확인한 요금은 

x86, Arm 아키텍처별로 시간별 요금이 다르고 (GB-초 라는 단위로 계산)

요청 1백만 건당 0.20 USD인것은 동일하다.

 

GB-초 = 메모리 1GB의 함수가 1초간 실행된 경우의 요금.

메모리 할당이 512MB이면 실행 시간당 요금은 절반이 되고

실행 시간이 1밀리초이면 요금도 1/1,000이 된다.

예시로

메모리 용량을 1GB로 설정한 Lambda 함수를 150만 번 호출하고 회당 평균 실행시간이 1초인경우

요청은 100만 번의 1.5배(150만 번)가 되므로 0.20 USD X1.5배 = 0.30 USD다.

실행 시간은 0.0000166667 USD X 1GB X 1초 X 150만 QJS = 25.00 USD다.

요청 요금 0.30 USD와 실행시간 요금 25.00 USD를 합해 25.30 USD다.

하지만  Lambda에는 다음과 같은 프리 티어가 있다.

  • 요청 매월 100만 건 무료
  • 실행 시간 매월 40만GB-초 무료

이를 고려해 다시 계산해보면 다음과 같다

  • 요청

0.20 USD / 100만 번 X (150만번 - 100만 번(무료분)) = 0.10 USD

  • 실행 시간 

0.0000166667 USD X (150만 GB-초-40만 GB-초(프리 티어)) = 18.33 USD 

프리 티어를 포함하면 총 요금은 18.4 USD다.

 

다만 프로비전드 컨커런시(Provisioned Concurrency) 라는 동시 실행 성능을 설정했을 때나,

외부로 데이터를 전송하는 경우 별도 요금이 발생 하므로 주의해야 한다.

 

PaaS (Platform as a Service)
OS 및 미들웨어를 AWS에 유지보수
예시
RDS, DynamoDB, Lambda

 

IaaS (Infrastructure as a Service)

Paas와는 반대로 

서버 및 네트워크 기능만 제공하며 설정과 관리는 사용자의 몫

예시

 EC2, VPC, EBS

 

아키텍처 설계의 모범이 되는 프레임워크 Well-Architected 

 

AWS Well-Architected - 안전하고 효율적인 클라우드 애플리케이션 구축

AWS Well-Architected Lenses는 AWS Well-Architected에서 제공하는 지침을 기계 학습(ML), 데이터 분석, 서버리스, 고성능 컴퓨팅(HPC), IoT, SAP, 스트리밍 미디어, 게임 산업, 하이브리드 네트워킹 및 금융 서비스

aws.amazon.com

 

200가지 이상의 서비스 

https://docs.aws.amazon.com/ko_kr/

 

VPC, Route 53, ELB

각 서비스들을 네트워크로 서로 연결하는것

VPC = 가상의 폐쇄형 클라우드 환경 구현

Route 53 = 고기능 DNS

ELB = 서비스 분산처리

 

EBS, S3 

스토리지로

레이어 로그, 및 설정정보 같은것도 저장함

 

EC2, ECS

응용 프로그램을 실행하는 역할 

즉, 서버

 

Lightsail, Beanstalk

특정용도에 특화된 서비스이며

자주 쓰이는 서비스를 조합해 쉽게 사용하도록 패키지로 구성한것

 

Aurora

데이터의 양에따라 저장영역을 자동으로 확장

완전 관리형 데이터베이스 서비스 

 

반대로 비관리형이란

EC2와같이 사용자가 직접 OS 설정을 관리하거나 장애대응을 해야하는 서비스 

 

공개된 배포 성공  사례

https://aws.amazon.com/ko/solutions/case-studies/?customer-references-cards.sort-by=item.additionalFields.sortDate&customer-references-cards.sort-order=desc&awsf.content-type=*all&awsf.customer-references-location=*all&awsf.customer-references-segment=*all&awsf.customer-references-industry=*all&awsf.customer-references-use-case=*all&awsf.customer-references-tech-category=*all&awsf.customer-references-product=*all 

 

AWS 학습방법

해당키워드로 구글검색을 이용하세요

AWS 시작하기 - 초보자를 위한 학습자료와 동영상이 정리된 페이지

 

AWS 핸즈온 - 실제로 AWS 환경을 다루면서 배울 수 있는 실습 형태의 무료 동영상 세미나 콘텐츠로

실제로 AWS 환경을 다루면서 공부하고싶은 독자에게 추천 

실제 절차로 따라하게되므로 비용이 일부 부과될수 있다는점 참고

 

AWS Skill Builder 

공식 트레이닝 사이트

 

AWS 인증 시험

AWS에 어느 정도 익숙해졌다면 

공식 자격증을 도전하는것

코스별로 존재

 

2.실제로 이용하기 위한 준비

계정관리

Root 계정보다는 IAM을 활용하여 로그인한다. 

 

비용관리 

AWS Billing and Cost Management 시스템의

Cost explorer로 서비스별 비용 상황을 파악한다.

Budgets 으로 예산을 설정하고 초과시 알림을 보내도록 설정한다.

 

시스템 구축위치 

리전은 (지역)

ap-notheast-2 이런식으로 구성되고 

리전마다 여러개의 AZ (데이터센터)로 구성된다.

AZ의 두가지 형식

AZ 이름 형식 - "ap-northeast-2a" 와 같은 "리전+알파벳"

AZ ID 형식- "apne2-az1"

 

AZ 이름과 AZ ID는 일대일로 연결되어있지만

AWS 계정마다 AZ 이름에 대응하는 AZ ID가 다르다 

따라서 AZ에 장애가 발생하면 AZ 이름이 아닌 AZ ID를 확인한다.

허나 일반적으로 리소스를 생성할때는 AZ 이름으로 지정한다.

 

S3의 경우 자동으로 3개 이상의 AZ에 데이터가 복사되므로 신경쓰지 않아도 된다.

 

스케일, 스케일링

스케일 업 -     서버 한대의 사양을 올림 

스케일 다운 - 서버 한대의 사양을 내림

스케일 아웃 - 서버 한대를 여러대로 늘림

스케일 인 -     서버 여러대를  소수로 줄임

 

3.컴퓨팅 서비스 

EC2와 ECS의 차이점

EC2는 가상서버 ECS는 컨테이너 서비스

EC2 = Amazon Elastic Computer Cloud (ㅡㅡ)

EC2에 데이터 베이스 관리 시스템을 설치해 DB서버를 구축할수도 있고

EC2에 메일 서버를 구축할수도 있다 (혹은 Amazon SES를 이용)

 

EC2 생성시 기본구성

VPC(네트워크) + EBS(스토리지) + 보안그룹

VPC - 서버가 위치할 네트워크를 설정

보안그룹 - 접근 허가 설정

EBS - 스토리지 용량을 지정

 

EC2 제어

SSH - 리눅스 원격 관리 시스템

AWS Systems manager로도 같은 기능을 수행할수있다.

 

EC2 서버접근제어 보안그룹

보안 그룹 = 방화벽

외부에서 EC2로 통신 = 인바운드 규칙

EC2에서 외부로 통신 = 아웃바운드 규칙

리눅스 터널 접속을 위한 SSH = 22번포트

 

인바운드 규칙상세

소스=출발지

0.0.0.0/0은 모든 네트워크(인터넷전체)를 의미

10.0.0.0/16은 내부 네트워크(사설네트워크)를 의미

 

아웃바운드 규칙

기본설정은 모든 트래픽(통신)을 허용한다.

규칙을 추가할때 대상에 

IP가 아니고 다른 보안그룹을 지정하는것도 가능하다.

예를들어 EC2-A와 EC2-B의 인스턴스가 있고, 

EC2-A 에서 EC2-B로 통신을 허가해야 하는경우 

EC2-B의 보안 그룹에 EC2-A의 보안그룹 ID를 지정하면 내부적으로 EC2-A의 IP가 지정돼 통신이 허가된다.

쉽게말하면 요청을 받는쪽의 규칙설정의 대상정보에 요청을 하는 인스턴스의 ID값 ex) sg-aaaa를 입력하면 된다는것.

IP를 직접입력하지 않고 ID값을 입력하는 이유는 그룹ID는 변경되지 않기 때문이다.

 

보안규칙에 지정하는 규칙은 허용만 할수있다.

차단설정은 ACL (Access Control List - 접근제어 리스트)나 다른 접근제어기능에서 가능하다.

 

보안그룹은 EC2 외에도 ECS,RDS 와같이 IP를 가지는 다른 서비스에도 사용된다.

보안그룹은 용도마다 따로 생성하고 키-값에 별칭을 잘 입력해 실수하는 일이 없게 하는것이 좋다.

또한 불필요한 보안 그룹은 바로 삭제해야 한다. 

서비스가 많아지면 그만큼 공개해야 할 포트도 많아지고 많은 보안 그룹을 관리하다 보면 사고로 이어질 수 있기 때문에

외부로 공개하는 서비스를 지키는 가장 기본적인 방법이므로 꼭 숙지한다.

EC2 비용

일반적으로 사용되는 EC2인스턴스를 온디맨드 인스턴스라고하고

1년 또는 3년간 요금을 선불로 지불하고 이용하는 예약인스턴스도 있다 

이는 온디맨드보다 최대 72퍼 저렴하다

또한 절감형 플랜, 스팟 인스턴스 등 여러 모델이 있으니

인스턴스를 선택할때는 비교해본다.

EC2 비용 말고도 네트워크 통신비용, 스토리지 비용이있다.

 

EC2 인터넷 공개 3가지 조건

1.퍼블릭 서브넷에 배치

퍼블릭 서브넷 = 인터넷과 통신할수있는 서브넷 

서브넷 = EC2를 배치하는 네트워크

퍼블릭 서브넷과 반대로 프라이빗 서브넷이있다

프라이빗 서브넷 = 인터넷과 직접 통신할수없고 AWS 내에서 통신 

 

2. 퍼블릭 IP 주소 부여

인터넷과 통신할수있는 IP주소로 EC2의 위치를 나타냄

 

3. 보안 그룹에 외부접근 허가

웹사이트라면 80번이나 443포트를 허가

 

 

게임, SNS, 메일 서비스와 웹 서비스의 차이점

통신규약 (프로토콜)이 다를뿐 동작원리는 같다.

 

메일서비스의 프로토콜 SMTP, POP3 

SMTP 메일을 보내는 역할

SMTP의 원리 -

1.클라이언트에서 메일을 전송하면

2.메일서버는 받은 메일 수신처의 이름을 DNS서버에서 확인하고

3.수신처 메일 서버로 메일을 송신한다.

 

웹서버가 처리하는 주요 데이터들

HTML, CSS, 서버스크립트, 클라이언트스크립트, 이미지 

 

서버스크립트는 (PHP, Ruby등)

항상 웹 서버에서 처리되므로 결과는 클라이언트 환경에 의존하지 않는다.

 

클라이언트 스크립트는 JavaScript가 있으며 

이는 클라이언트인 브라우저에서 처리하기 때문에 서버에 부하를 주지 않는다.

다만 클라이언트의 환경에 따라 처리 속도와 결과가 다를 수 있다.

 

리눅스는 누구나 자유롭게 개발, 배포 할수있다 .

독자적으로 리눅스 커널을 이용해 개발한 OS를 리눅스 배포판 (Distribution)이라고 한다.

 

AMI (아마존 머신 이미지)

OS + 소프트웨어 즉 템플릿 패키지

 

부하에 따른 서버 자동 추가삭제

시작 템플릿에

cpu사용률에 따른  조건을 설정하고 AMI 지정하면 서버가 자동으로 추가된다(Auto Scaling)

Auto Scaling은 예상치못한 장애가 발생했을때도 자동으로 인스턴스를 만들어준다.

Auto Scaling은 EC2뿐만 아니라 RDS나 ECS 같은 서비스에서도 사용할수있다.

 

인스턴트 추가규칙

cpu 사용률 >50% => 1대추가

cpu 사용률 >75% => 다시 1대(총2대) 추가

반대로 삭제 규칙도 설정할수 있다

 

(cpu사용률)추적규칙 (무료라는거같다)

cpu 사용률을 예를들면 25퍼로 설정하면

초과시 서버가 추가되고 25퍼이하면 서버가 삭제된다.

 

스케줄 스케일 - 주말이나 연휴등 갑자기 접속자가 늘어나거나 줄어드는것을 예측해서 인스턴스 수를 조절하는것

월~금은 서버3개  토~일은 서버 5개 이런식으로 

그밖에도

수요를 예측하는 예측스케일링

템플릿이될 부팅 설정 버전 관리 등 많은 기능이 있다.