AWS Lambda Serverless 프로젝트 1 - AWS CLI, Lambda, S3, IAM
Serverless
여기서는 어떤 모양이나 형태로 서버와 상호 작용해야하는 전통적인 백엔드 아키텍처를 뛰어 넘는 방법에 관한 내용입니다. Amazon Web Services (AWS) Lambda와 같은 컴퓨팅 서비스와 유용한 타사 API, 서비스 및 제품과 같은 전적으로 의존하는 서버리스 백엔드를 작성하는 방법을 설명합니다. 단일 서버를 프로비저닝하거나 관리 할 필요없이 까다로운 계산 요구 사항을 확장하고 처리 할 수있는 차세대 시스템을 구축하는 방법을 보여줍니다.
중요한 것은 이 포스트에서는 오늘날의 클라우드에서 제공해야하는 서비스와 아키텍처를 사용하여 개발자가 제품을 시장에 신속하게 제공하면서도 높은 수준의 품질과 성능을 유지할 수있는 기술을 설명합니다.
오늘날의 웹 지원 소프트웨어의 대부분을 지원하는 시스템을 살펴보면 브라우저, 모바일 또는 데스크톱 장치를 통해 작동 할 수있는 인터페이스를 제공하는 클라이언트 측 프론트 엔드와 다양한 계산 양식을 수행하는 백엔드 서버를 보게됩니다.
일반적인 웹 응용 프로그램에서 서버는 프런트 엔드에서 HTTP 요청을 받아들이고 요청을 처리합니다. 데이터는 데이터베이스에 저장되기 전에 수많은 응용 프로그램 계층을 통과 할 수 있습니다. 백엔드는 마침내 응답을 생성합니다. 이 응답은 JSON 또는 완전히 렌더링 된 마크 업 형식 일 수 있으며 클라이언트로 다시 전송됩니다.
로드 밸런싱, 트랜잭션, 클러스터링, 캐싱, 메시징 및 데이터 중복과 같은 요소가 고려되면 당연히 대부분의 시스템은 더욱 복잡해집니다. 이 소프트웨어의 대부분은 관리, 유지 보수, 패치 및 백업이 필요한 데이터 센터 또는 클라우드에서 실행되는 서버가 필요합니다.
서버의 프로비저닝, 관리 및 패칭 작업은 시간이 많이 소요되는 작업으로 종종 전용 작업 인력이 필요합니다. 사소한 환경은 효과적으로 설정하고 작동하기 어렵습니다. 인프라 및 하드웨어는 모든 IT 시스템의 필수 구성 요소이지만 비즈니스 목표를 해결하는 핵심 초점에서 벗어나는 경우가 많습니다.
지난 수년간 PaaS (Platform as a Service) 및 컨테이너와 같은 기술은 일관성없는 인프라 환경, 갈등 및 서버 관리에 대한 두려움에 잠재적 솔루션으로 나타났습니다. PaaS는 사용자가 기본 인프라를 숨기면서 소프트웨어를 실행할 수있는 플랫폼을 제공하는 클라우드 컴퓨팅의 한 형태입니다.
컨테이너화(Containerization)는 응용 프로그램을 자체 환경으로 분리하는 방법입니다. 본격적인 가상화 대신 경량의 대안입니다. 컨테이너는 분리되어 있고 가볍지 만 서버에 배포해야합니다. 그것들은 훌륭한 솔루션이지만 자체 관리와 복잡성이 있습니다. 클라우드에서 직접 코드를 실행할 수있는 것처럼 쉽지는 않습니다.
시스템 및 애플리케이션 아키텍처 중에서 서비스 지향 아키텍처 (SOA)는 소프트웨어 개발자들 사이에서 많은 이름을 인정 받고 있습니다. 이것은 시스템이 많은 독립적 인 서비스로 구성 될 수 있다는 개념을 명확하게 개념화 한 아키텍처입니다. 개발자는 종종 디자인 철학을 특정 구현 및 특성과 혼동하기 때문에 논쟁의 여지가 있고 오해가 남습니다.
서비스 재사용 및 자율성, 조합 가능성, 세분성 및 발견 가능성은 모두 SOA와 관련된 중요한 원칙입니다.
Microservices 및 Serverless 아키텍처는 서비스 지향 아키텍처의 후손입니다. 이들은 구식의 서비스 지향 아키텍처의 복잡성을 해결하기 위해 앞서 언급 한 많은 원칙과 아이디어를 유지합니다.
Serverless 아키텍처는 서버에 직접 액세스하여 작동하지 않는 새로운 종류의 소프트웨어 아키텍처를 의미합니다. Lambda를 사용하고 다양한 강력한 단일 API 및 웹 서비스를 사용함으로써 개발자는 느슨하게 결합되고 확장 가능하며 효율적인 아키텍처를 신속하게 구축 할 수 있습니다.
AWS Lambda
Amazon Web Services에서 제공하는 컴퓨팅 서비스 인 Lambda로갑니다. AWS는 실제 코드를 실행하고 고 가용성 컴퓨팅 인프라를 제공하는 Elastic Compute Cloud (EC2) 서버의 프로비저닝 및 관리를 담당합니다.
AWS Lambda
- 이벤트에 응답하여 대용량 병렬 방식으로 코드 실행
- 코드를 실행하고 서버를 프로비저닝하거나, 소프트웨어를 설치하거나, 컨테이너를 배포하거나, 낮은 수준의 세부 사항에 대해 걱정할 필요없이 코드를 실행하십시오.
- 소비하는 계산 시간에 대해서만 지불하십시오 - 코드가 실행되고 있지 않을 때 비용이 부과되지 않습니다.
AWS Lambda의 이점
1. 관리 할 서버가 없습니다(Serverless) : AWS Lambda는 서버를 프로비저닝하거나 관리 할 필요없이 코드를 자동으로 실행합니다. 코드를 작성하고 Lambda에 업로드하십시오.
2. 연속 스케일링(Scaling) : AWS Lambda는 각 트리거에 대한 응답으로 코드를 실행하여 애플리케이션을 자동으로 조정합니다. 코드는 병렬로 실행되며 각 트리거를 개별적으로 처리하여 작업 부하의 크기를 정확하게 조정합니다.
3. 100ms 미터링(subsecond metering) : AWS Lambda를 사용하면 코드가 실행되는 매 100ms마다 코드가 실행되는 횟수가 청구됩니다. 코드가 실행되지 않을 때 비용을 지불하지 않아도됩니다.
AWS Lambda 작동법
1. AWS Lambda에 코드 업로드
2. 다른 AWS 서비스에서 트리거(trigger)하도록 코드를 설정하십시오.
3. Lambda는 트리거 될 때만 필요한 컴퓨팅 리소스를 사용하여 코드를 실행합니다.
AWS Lambda 사례
REAL-TIME FILE PROCESSING
Amazon S3를 사용하면 업로드 직후에 AWS Lambda를 트리거하여 데이터를 처리 할 수 있습니다. 예를 들어 Lambda를 사용하여 이미지를 축소판으로 표시하고 비디오를 코드 변환하고 색인 파일을 처리하고 로그를 처리하며 내용의 유효성을 검사하고 실시간으로 데이터를 집계 및 필터링 할 수 있습니다.
REAL-TIME STREAM PROCESSING
AWS Lambda 및 Amazon Kinesis를 사용하여 응용 프로그램 활동 추적, 거래 주문 처리, 클릭 스트림 분석, 데이터 정리, 메트릭 생성, 로그 필터링, 색인 생성, 소셜 미디어 분석 및 IoT 장치 데이터 원격 측정 및 계량에 대한 실시간 스트리밍 데이터를 처리 할 수 있습니다 .
EXTRACT, TRANSFORM, LOAD
AWS Lambda를 사용하여 DynamoDB 테이블의 모든 데이터 변경에 대해 데이터 유효성 검사, 필터링, 정렬 또는 기타 변환을 수행하고 변환 된 데이터를 다른 데이터 저장소에 로드 할 수 있습니다.
IoT BACKENDS
웹, 모바일, IoT (Internet of Things) 및 타사 API 요청을 처리하기 위해 AWS Lambda를 사용하여 서버가없는 백엔드를 작성할 수 있습니다.
MOBILE BACKENDS
AWS Lambda 및 Amazon API 게이트웨이를 사용하여 백엔드를 빌드하여 API 요청을 인증하고 처리 할 수 있습니다. Lambda를 사용하면 풍부하고 개인화 된 앱 환경을 쉽게 만들 수 있습니다.
WEB APPLICATIONS
AWS Lambda와 다른 AWS 서비스를 결합하여 개발자는 확장 성, 백업 또는 다중 데이터 센터 이중화에 필요한 관리 작업을 전혀하지 않고도 여러 데이터 센터에서 자동으로 확장 및 고 가용성 구성에서 강력한 웹 응용 프로그램을 구축 할 수 있습니다.
Serverless application 개발
서버리스 아키텍처에 대한 철저한 이해를 돕기 위해 Serverless 애플리케이션을 만들 것입니다. 특히 YouTube 미니 클립 인 비디오 공유 웹 사이트를 구축하여 24 Hour Video 라고합니다.
- 이 응용 프로그램에는 사용자 등록 및 인증 기능이있는 웹 사이트가 있습니다.
- 사용자가 동영상을 보고 업로드 할 수 있습니다.
- 시스템에 업로드 된 모든 비디오는 서로 다른 해상도와 비트율로 변환되어 다른 연결 및 장치에 있는 사람들이 볼 수 있게 됩니다.
AWS Lambda, S3, Elastic Transcoder, SNS 및 Auth0 및 Firebase와 같은 비 AWS 서비스를 비롯하여 여러 AWS 서비스를 사용하여 응용 프로그램을 작성합니다.
이 장에서는 업로드 된 비디오를 트랜스 코딩하기위한 서버리스 파이프 라인 작성에 중점을 둡니다.
- Lambda 함수 작성, 테스트 및 배포
- 동영상 트랜스 코딩을위한 기본 이벤트 중심 시스템 만들기
- Simple Storage Service, Simple Notification Service 및 Elastic Transcoder와 같은 AWS 서비스 사용
구축할 웹사이트는 다음과 같습니다. 사용자가 업로드한 동영상은 기본 페이지에 표시되며, 모든 비디오를 클릭하여 재생할 수 있습니다.
이번 포스트에서는 시스템의 중요한 부분을 구성하게됩니다. 이벤트 기반 파이프 라인(pipeline)은 업로드 된 비디오를 가져 와서 다른 형식과 비트율로 인코딩합니다. 24 시간 비디오는 이벤트 기반의 푸시 기반 시스템으로 S3 인코딩 버킷에 업로드하여 비디오를 인코딩하는 워크 플로가 자동으로 트리거됩니다.
AWS 비용에 대한 간단한 참고 사항 :
대부분의 AWS 서비스에는 무료 티어가 있습니다. 24 시간 비디오 예제를 따르면 대부분의 서비스가 무료로 제공됩니다. 그러나 Elastic Transcoder는 약간의 비용이 드는 경향이 있습니다. 이 프리 티어에는 20 분의 SD 출력과 10 분의 HD (720p 이상) 출력이 포함됩니다 (1 분은 트랜스 코더 실행 시간이 아닌 소스 비디오의 길이를 나타냄). 보통 Elastic Transcoder가 사용되는 지역에 따라 비용이 다릅니다. 예를 들어, 미국 동부 지역의 HD 출력은 1 분당 $ 0.03입니다. 따라서 10 분짜리 소스 파일의 인코딩 비용은 30 센트입니다.
다음은 24 시간 비디오의 고급 요구 사항입니다.
- 트랜스 코딩 프로세스는 업로드 된 소스 비디오를 일반 720p, 일반 1080p 및 낮은 비트 전송률의 웹 / YouTube / Facebook에 적합한 720p의 3 가지 해상도 및 비트율로 변환합니다.
- 2 개의 S3 버킷이 있습니다. 소스 파일은 upload 버킷으로 이동합니다. 새로 트랜스 코딩 된 파일은 transcoded video S3 버킷에 저장됩니다.
- 각 트랜스 코딩 된 파일의 권한이 공개적으로 보고 다운로드 할 수 있도록 수정됩니다.
- 각 트랜스 코딩이 성공하면 파일에 대한 정보가 포함 된 이메일 알림이 전송됩니다. 이것은 SNS를 사용하여 수행됩니다.
- 비디오 메타 데이터가 포함 된 작은 JSON 파일이 생성되어 각 트랜스 코딩 된 비디오와 함께 배치됩니다. 이 메타 데이터에는 크기, 스트림 수 및 기간과 같은 파일에 대한 기본 정보가 포함됩니다.
쉽게 관리하기 위해 노드 패키지 관리자 (npm)를 사용하여 빌드 및 배포 시스템을 설정합니다. 테스트, 람다 함수 패키징 및 AWS에 배치하기위한 자동화 된 프로세스를 사용하려면 가능한 한 빨리 처리하기를 원할 것입니다. 그러나 버전 관리 또는 배포와 같은 다른 개발 및 운영 측면을 일시적으로 제쳐두고 나중에 다시 사용하게됩니다.
Sign-up, Installation and Setup
이 장의 목적은 24 시간 비디오 예제에서 시스템, 환경 및 AWS를 설정하는 데 도움을 주기 위한 것입니다.
- AWS의 ID 및 액세스 관리 설정
- AWS에서 S3 버킷, 람다 함수 및 탄성 트랜스 코더 생성
- 노드 패키지 관리자의 로컬 시스템 설치 및 설치
- Lambda 함수를위한 package.json 생성
AWS Free-tier 이용하기 위한 가입 절차
AWS website로 이동합시다.
가입 버튼을 클릭합니다.
계정과 비밀번호 그리고 이메일 주소를 입력합니다.
정보를 입력합니다.
결제 정보(카드 관련)를 입력합니다.
AWS IAM 생성하기
AWS에서해야 할 첫 번째 작업은 ID 및 액세스 관리 (IAM) 사용자를 만드는 것입니다. 이 사용자의 보안 정책 및 자격 증명은 컴퓨터에서 AWS로 바로 람다 기능을 배포하는 데 사용됩니다. 사용자를 만들고 올바른 사용 권한을 설정하려면 다음과 같이 진행합니다.
1. AWS 콘솔에서 IAM (ID 및 액세스 관리)을 클릭하고 사용자를 클릭 한 다음 사용자 추가를 클릭합니다.
https://aws.amazon.com/ko/console/
사용자 메뉴를 클릭합니다.
사용자 추가 버튼을 클릭합니다.
새로운 IAM 사용자의 이름을 입력하고 프로그래밍 방식 액세스에 체크를 해준뒤 다음:권한 버튼을 클릭합니다.
사용자의 권한에 대해서는 선택하지 않고, 다음:검토 버튼을 클릭합니다.
마지막에 사용자에게 퍼미션 메세지가 나옵니다. 다음에 권한 설정을 할 것이니 우선 사용자 만들기 버튼을 클릭합니다.
이후에 사용자, Access Key ID 그리고 Secret Access Key 볼 수 있습니다. Access key를 CSV로 다운로드 받아 잘 보관합니다.
AWS 유저 권한 설정하기
사용자에게 Lambda 함수를 배포 할 수있는 권한을 부여해야합니다. 여기에는 새로운 인라인 정책 만들기, 기능 배포를 허용하는 권한 지정 및이 정책을 IAM 사용자에 첨부하는 작업이 포함됩니다.
AWS Lambda를 클릭하십시오.
인라인 정책 추가 버튼을 클릭하여 사용자의 첫 번째 정책을 만듭니다.
인라인 정책 옵션 화면에서 "서비스 선택”을 클릭합니다.
다음 AWS Service 드롭 다운에서 AWS Lambda를 선택하십시오.
작업 선택을 클릭합니다.
GetFunction에서 액세스 수준 "읽기"를 클릭하고, UpdateFunctionCode, UpdateFunctionConfiguration에서 "쓰기"를 클릭합니다.
“모든 리소스” 클릭합니다.
Review policy 버튼을 클릭합니다.
정책 이름에 lambda-policy 를 입력하고 Create policy 버튼을 클릭합니다.
정책이 설정된 것을 확인할 수 있습니다.
AWS Region
AWS는 전 세계 여러 곳에서 호스팅됩니다. 이 위치는 지역 및 가용 영역으로 구성됩니다. 각 지역은 별도의 지역입니다. 각 지역에는 가용 영역으로 알려진 여러 개의 고립 된 위치가 있습니다. AWS는 인스턴스 및 데이터와 같은 리소스를 여러 위치에 배치 할 수있는 기능을 제공합니다. 특별히 그렇게하지 않는 한 리소스는 여러 지역에서 복제되지 않습니다.
여기서 리전(region)은 us-west-2(Oregon)으로 설정합니다.
AWS S3
S3 프리 티어는 사용자가 표준 스토리지로 5GB의 데이터를 저장하고 20,000 개의 GET 요청 및 2,000 개의 PUT 요청을 발행하고 매달 15GB의 데이터를 전송할 수 있습니다. AWS Lambda는 1M 무료 요청과 400,000 GB 초의 계산 시간으로 무료 티어를 제공합니다. 우리는 기본 시스템으로 그 서비스의 자유 계층 안에 잘 있어야합니다.
다음으로 S3에 두 개의 버킷을 만들어야합니다.
- 첫 번째 버킷은 새 동영상의 업로드 버킷 역할을합니다.
- 두 번째 버킷에는 Elastic Transcoder에 의해 트랜스 코딩 된 비디오가 포함됩니다.
S3의 모든 사용자는 동일한 버킷 네임 스페이스를 공유하므로 사용하지 않는 버킷 이름을 찾아야합니다. 이 예에서는 첫 번째 버킷의 이름이 serverless-video-upload 이고 두 번째 버킷의 이름이 serverless-video-transcoded 라고 가정합니다.
서비스 메뉴에서 S3를 클릭합니다.
버킷 만들기 버튼을 클릭합니다.
버킷 이름은 S3 글로벌 리소스 공간에서 고유해야 합니다. 우리는 이미 serverless-video-uploaded를 가져왔으므로 다른 이름을 필요로 할 것입니다. 이 버킷 이름에 이니셜을 추가하는 것이 좋습니다. 그리고 나서 US-West (오레곤) 지역을 선택합니다.
다음 버튼을 클릭합니다.
특정한 옵션 추가 없이 계속 다음 버튼을 클릭하고 버킷 만들기 버튼을 클릭합니다.
마찬가지로 serverless-video-transcoded 버킷을 생성합니다.
버킷이 생성된 모습을 확인할 수 있습니다.
AWS Region
AWS는 전 세계 여러 곳에서 호스팅됩니다. 이 위치는 지역 및 가용 영역으로 구성됩니다. 각 지역은 별도의 지역입니다. 각 지역에는 가용 영역으로 알려진 여러 개의 고립 된 위치가 있습니다. AWS는 인스턴스 및 데이터와 같은 리소스를 여러 위치에 배치 할 수있는 기능을 제공합니다. 특별히 그렇게하지 않는 한 리소스는 여러 지역에서 복제되지 않습니다.
여기서 리전(region)은 us-west-2(Oregon)으로 설정합니다.
AWS CLI 설치
AWS CLI를 설치해봅시다.
https://docs.aws.amazon.com/cli/latest/userguide/installing.html
각각의 운영체제에 설치해주세요.
저는 Google Cloud Platform에서 진행해보겠습니다.
pip를 이용해서 AWS CLI 설치하는 명령어입니다.
$ pip install awscli --upgrade --user
AWS CLI를 설치하고 나서 PATH 설정을 위해 등록해봅시다.
$ export PATH=~/.local/bin:$PATH
$ aws --version
Node.js NPM 설치
Google Cloud Platform에서 프로비저닝된 환경에서는 Node.js, npm이 설치가 되어 있습니다.
Node.js를 설치 위해 다음의 사이트로 이동합니다.
https://nodejs.org/en/download/
운영체제에 맞게 설치해주세요.
설치가 완료되면 Node.js와 npm을 사용할 수 있습니다.
AWS CLI 설정
Cloud Shell에서 aws configure를 실행합니다. AWS CLI는 사용자 자격 증명을 요구합니다.
이전 단계에서 lambda에 대해 생성 된 액세스 및 비밀키를 입력합니다.
또한 Region을 삽입하십시오. AWS Lambda는 모든 지역에서 사용 가능하지 않을 수 있으므로 제공되는 지역 (예 : us-west-2 (Oregon))을 선택합니다.
기본 출력 형식을 선택하라는 메시지가 한 번 더 표시됩니다. json으로 설정합니다.
$ aws configure
reference : Serverless Architecture on AWS : With examples using AWS Lambda
'AWS' 카테고리의 다른 글
AWS Lambda Serverless 프로젝트 3 - SNS, Lambda, S3 (0) | 2018.04.21 |
---|---|
AWS Lambda Serverless 프로젝트 2 - IAM, Lambda, Elastic Transcoder, NPM, S3, CloudWatch (1) | 2018.04.21 |
SSH (0) | 2015.02.12 |
클라우드 컴퓨팅 (0) | 2015.02.08 |
Putty (0) | 2015.02.08 |