Computer >> 컴퓨터 >  >> 프로그램 작성 >> Redis

AWS Lambda 및 Redis Enterprise Cloud를 사용한 서버리스 개발

이 블로그 게시물에서는 AWS Lambda와 Redis Enterprise Cloud를 통합하는 방법을 배웁니다. 샘플 영화 데이터베이스 애플리케이션을 사용하여 두 개의 Lambda 함수를 빌드하고 배포하는 방법을 알아봅니다. 하나는 Node.js에, 다른 하나는 Python에 있습니다. 이 두 가지 Lambda 함수는 Redis 데이터베이스와 상호 작용하여 삽입, 업데이트, 삭제 및 쿼리하는 데 사용됩니다. 응용 프로그램은 풍부한 쿼리 및 검색 기능을 제공하는 RediSearch API를 사용합니다. AWS Lambda를 사용하는 서버리스는 개발자가 비즈니스 "서비스"의 범위를 자신이 선택한 프로그래밍 언어를 사용하여 구현할 수 있는 소규모 프로젝트로 축소할 수 있도록 해주기 때문에 마이크로서비스 아키텍처에 대한 증가 추세에 맞습니다. 자세히 알아보려면 아래 동영상을 시청하고 AWS Lambda에 대한 간략한 개요와 Redis Enterprise Cloud 및 Lambda를 사용하여 애플리케이션을 구축하는 방법에 대해 자세히 읽어보십시오.

AWS Lambda 간단히 살펴보기

FaaS(Function-as-a-Service)라고도 하는 회사의 서버리스 컴퓨팅 런타임인 AWS Lambda에 아직 익숙하지 않은 경우 알아야 할 기본 사항이 있습니다. (Lambda 전문가는 다음 섹션으로 건너뛸 수 있습니다.) AWS Lambda를 사용하면 애플리케이션이 특정 이벤트에 대한 응답으로 기능을 온디맨드로 실행할 수 있으므로 이벤트 기반 아키텍처(EDA) 애플리케이션을 구축할 수 있습니다. AWS에서 완전 관리하는 AWS Lambda 함수는 다양한 프로그래밍 언어를 사용하여 생성할 수 있습니다. 아마도 AWS Lambda의 가장 좋은 점은 개발자가 일반적으로 이를 사용하기 위해 애플리케이션 수명 주기를 완전히 이해할 필요가 없다는 것입니다.

AWS Lambda는 AWS 콘솔에서 직접, SNS, SQS 또는 Kinesis와 같은 다른 AWS 서비스의 이벤트 사용, 또는 AWS 콘솔, CloudWatch 또는 S3 이벤트 등 다양한 방법을 사용하여 AWS Lambda를 호출할 수 있습니다. 샘플 영화 데이터베이스 애플리케이션에서 Lambda 함수는 HTTP REST 엔드포인트를 사용하여 호출되며 이는 AWS API Gateway를 사용하여 수행됩니다. (문서에서 AWS Lambda 함수 호출에 대해 자세히 알아볼 수 있습니다.)

AWS Lambda HTTP 실행 프로세스

특히 HTTP를 통한 요청은 본문, 헤더 및 매개변수를 구문 분석한 다음 이 페이로드로 Lambda 함수를 트리거하는 AWS의 API Gateway 관리 도구로 라우팅됩니다.

AWS Lambda 및 Redis Enterprise Cloud를 사용한 서버리스 개발

개발자는 REST 엔드포인트를 노출하는 코드를 작성하고 AWS API Gateway 내부에 이를 노출하도록 배포를 구성하기만 하면 됩니다. (샘플 영화 데이터베이스 애플리케이션을 다루는 다음 섹션에서 이에 대해 더 논의할 것입니다.)

서버리스 애플리케이션의 상태 및 데이터 관리

AWS Lambda는 상태 비저장 환경입니다. 하지만 많은 애플리케이션에서 여전히 서비스나 호출 간에 상태를 공유하고 싶어하며 Redis가 도움이 될 수 있습니다. 간단한 상태 관리를 위해 AWS 개발자는 종종 ElastiCache를 사용하지만 많은 애플리케이션에는 상태 관리 이상의 것이 필요하며 지속성, 풍부한 데이터, 고성능 및 쿼리 모델도 필요합니다. Redis Enterprise Cloud는 AWS에서 완전 관리형 서비스를 제공합니다(Google Cloud 및 Microsoft Azure도 지원됨).

Redis 영화 데이터베이스 샘플 애플리케이션

이제 샘플 영화 데이터베이스 애플리케이션을 살펴보고 Redis Enterprise Cloud 및 AWS Lambda를 사용하여 애플리케이션을 구축하는 주요 단계를 확인할 준비가 되었습니다.

애플리케이션은 Redis Hashes로 구성된 영화 카탈로그로 구성된 RediSearch 시작하기 튜토리얼에 설명된 데이터 세트를 사용합니다. 아래 차트에서 볼 수 있듯이 프런트엔드는 Vue.js를 사용하여 빌드되며 REST 끝점을 호출하여 다음을 수행합니다.

  • 영화 나열, 정렬 및 필터링
  • 영화 편집 및 댓글 추가/삭제
  • 전체 텍스트 검색 및 패싯 검색을 사용하여 영화 검색
AWS Lambda 및 Redis Enterprise Cloud를 사용한 서버리스 개발 AWS Lambda 및 Redis Enterprise Cloud를 사용한 서버리스 개발

위에서 언급했듯이 애플리케이션은 데이터 저장소에 대해 AWS API Gateway, AWS Lambda 및 Redis Enterprise Cloud를 활용합니다. 또한 Python 서비스는 AWS Key Management Service를 사용하여 Redis 데이터베이스 비밀번호를 저장하고 암호화합니다.

데모 애플리케이션 설치 및 실행

시작하려면 몇 가지 전제 조건이 필요합니다.

  • CLI가 설치된 AWS 계정 설정, 자격 증명
  • RediSearch 모듈이 활성화된 Redis Enterprise Cloud 계정 및 데이터베이스
  • Node.js
  • 파이썬
  • Redis 명령줄 인터페이스(CLI)

모든 것이 조립되면 샘플 애플리케이션을 설치하고 실행하는 과정을 살펴보겠습니다.

1단계:Redis Enterprise Cloud 데이터베이스 정보 가져오기

아직 Redis Enterprise Cloud에서 데이터베이스를 생성하지 않은 경우 Redis 모듈 시작하기 가이드의 정보를 사용하여 생성하십시오.

Redis Enterprise Cloud에 연결되면 웹 콘솔에서 데이터베이스 연결 정보를 찾을 수 있습니다. "RediSearch 2" 모듈을 데이터베이스에 추가해야 합니다.

AWS Lambda 및 Redis Enterprise Cloud를 사용한 서버리스 개발

Lambda 함수를 Redis 데이터베이스에 연결하려면 다음 속성이 필요합니다.

  • REDIS_HOST:redis-18541.xxx.xxxx.xxx.cloud.redis.com
  • REDIS_PORT:18541
  • REDIS_PASSWORD :<화면에 표시된 비밀번호>

2단계:GitHub에서 프로젝트 가져오기

저장소를 로컬 환경에 복제하고 프로젝트 디렉터리로 이동합니다.

> 자식 클론 https://github.com/redis-developer/aws-redis-cloud-demo.git> cd aws-redis-cloud-demo

프로젝트 디렉토리 구조는 다음과 같습니다.

aws-redis-cloud-demo├── README.md├── 프론트엔드                 => Vue.js 프로젝트│   ├── .env.development        => 개발 모드에서 Lambda URL 설정│   └ .env.production         => 프로덕션 모드에서 Lambda URL을 설정하기 위해    │   ├── ...│   └── vue.config.js│   └── ...├── movie-comments-microservice => Python, comment service│   ├── .chalice│   │   └── config.json         => Lambda 및 서비스 구성  │   ├── app.py│   ├── chalicelib          │ │   => 애플리케이션 코드 및 lib │ … ── readme.md│   └── requirements.txt└── 영화 목록-마이크로 서비스    => Node.js, 영화 서비스    ├── import_movies.redis     => 데이터 세트 파일    ├── ...    ├── 서버리스. yml          => 람다 및 서비스 구성    ├── src    │   └── ...    └── ...

3단계:영화 데이터베이스 데이터세트를 애플리케이션으로 가져오기

aws-redis-cloud-demo/movies-list-microservice/import_movies.redis 파일 데이터베이스에 영화를 삽입하는 모든 Redis 명령이 포함되어 있습니다. 사용된 명령은 다음과 같습니다.

  • 각 영화에 대한 HSET
  • FT.CREATE를 사용하여 RediSearch 색인을 생성합니다.

데이터 세트를 가져오려면 터미널을 열고 다음 명령을 실행하십시오.

> 내보내기 REDISCLI_AUTH=> redis-cli -h redis-18541.xxx.xxxx.xxx.cloud.redis.com \        -p 18541 <영화 목록-마이크로 서비스/import_movies.redis

4단계:Redis Enterprise Cloud 인스턴스를 사용하도록 애플리케이션 구성

애플리케이션을 테스트하기 전에 Redis Enterprise Cloud 데이터베이스 인스턴스로 Node.js 및 Python 서비스를 구성해야 합니다. 다음 파일을 엽니다.

  • ./movies-list-microservice/serverless.yml
  • ./movie-comments-microservice/.chalice/config.json

그런 다음 Redis 호스트, 포트 및 비밀번호를 설정합니다. (REDIS_HOST, REDIS_PORT, REDIS_PASSWORD )

5단계:영화 마이크로서비스(Node.js) 빌드 및 실행

여기에 나열된 단계에 따라 프로젝트를 빌드하고 실행하십시오. (프로젝트의 Readme 파일에서도 모든 정보를 찾을 수 있습니다.)

  1. 서버리스 프레임워크 설치
> npm install -g 서버리스

2. Movies-list-microservice 디렉토리로 이동

> cd 영화 목록-마이크로서비스

3. 종속성 설치

> npm 설치

4. 로컬에서 Lambda 함수 실행

> npm 시작

5. REST 서비스에 대한 브라우저 호출을 열어 서비스를 테스트합니다. https://localhost:3000/api/movies/1

6. 다음 명령을 실행하여 AWS 환경에 기능을 배포하여 서비스를 AWS에 배포합니다.

> 서버리스 배포...........서버리스:스택 업데이트 완료...서비스 정보 서비스:영화 -list-microservicestage:apiregion:us-east-1stack:movies-list-microservice-apiresources:33api 키:  Noneendpoints:  GET - https://.execute-api..amazonaws.com/api/ 영화/검색  GET - https://.execute-api..amazonaws.com/api/movies/group_by/{field}  GET - https://.execute-api..amazonaws.com/api/movies/{id}  POST - https://.execute-api..amazonaws.com/api/movies/{id}functions:  listMovies:영화 목록- microservice-api-listMovies  searchMovies:영화 목록-microservice-api-searchMovies  getMovie:영화 목록-microservice-api-getMovie saveMovie:영화 목록-microservice-api-saveMovielayers:  없음

7. 브라우저에서 https://.execute-api..amazonaws.com/api/movies/1을 가리키도록 하여 API를 테스트합니다.

참고:오류가 발생하면 AWS CloudWatch의 함수 로그를 확인하여 무슨 일이 일어났는지 확인하십시오.

코드 자세히 보기:

  • package.json 파일에는 이 Node.js 프로젝트에서 사용하는 종속 항목이 포함되어 있습니다. 이 프로젝트는 매우 간단하며 다음 종속성을 사용합니다.
    • redisredis-research 라이브러리는 Redis 및 노출된 RediSearch 명령에 연결하는 데 사용됩니다.
    • aws-lambda 라이브러리는 모든 AWS Lambda 함수를 호출하여 AWS 환경에 노드 애플리케이션을 배포하는 데 사용됩니다.
  • serverless.yml 파일은 HTTP 작업을 호출될 JavaScript 함수에 매핑하는 서버리스 함수를 정의합니다(handler.ts에 정의됨). ), 환경 변수를 포함합니다(이 데모에서는 대부분 Redis 연결 문자열).
  • handler.ts file은 AWS Gateway에서 오는 이벤트를 캡처하고 애플리케이션 라이브러리 SearchService를 호출하는 클래스입니다. , Redis 데이터베이스에 대한 모든 호출을 수행합니다.
  • SearchService.ts 파일에는 Redis 데이터베이스와 상호 작용하고 Redis 및 RediSearch API를 사용하는 모든 메서드가 포함되어 있습니다. client.ft_search()client.aggregate() , client.hmset() , 그리고 더. (Redis University의 Redis 및 RediSearch 명령과 GitHub의 RediSearch 2.0 시작하기 튜토리얼에서 자세히 알아볼 수 있습니다.

6단계:댓글 마이크로서비스(Python) 빌드 및 실행

다음은 프로젝트를 빌드하고 실행하는 단계입니다. (프로젝트의 Readme 파일에서도 모든 정보를 찾을 수 있습니다.)

  1. Python 프로젝트로 이동하여 가상 환경 만들기:
> cd 영화 주석-microservice> python3 -m venv chalice-env> 소스 chalice-env/bin/activate

2. 종속성 설치:

> pip install -r requirements.txt

3. AWS 환경을 설정하고 다음 명령어를 실행하여 ID와 Secret을 구성합니다.

> aws configureAWS 액세스 키 ID [없음]:****************ABCDAWS 비밀 액세스 키 [없음]:************* ***abCdDefault 지역 이름 [없음]:us-west-2기본 출력 형식 [없음]:

4. 다음 명령을 실행하여 AWS 환경에 기능을 배포하여 서비스를 AWS에 배포합니다.

> chalice deploy기존 배포 패키지 사용.IAM 역할에 대한 정책 업데이트:movie-comments-microservice-dev람다 함수 생성:movie-comments-microservice-devRest API 생성 배포된 리소스:  - Lambda ARN:arn:aws:lambda:us-east -1:11111111111:function:movie-comments-microservice-dev  - Rest API URL:https://XXXXXXX.execute-api.us-east-1.amazonaws.com/api/

코드 자세히 보기:

  • Requirements.txt 파일에는 이 Python 프로젝트에서 사용하는 종속 항목이 포함되어 있습니다. 이 프로젝트는 매우 간단하며 다음 종속성을 사용합니다.
    • 성배 Python에서 서버리스 애플리케이션을 생성하는 데 사용되는 AWS 프레임워크입니다.
    • 레디스재조사 Redis에 액세스하고 RediSearch API 사용
  • config.json 파일은 서버리스 애플리케이션을 정의하고 환경 변수(이 애플리케이션에서는 Redis 데이터베이스 연결 정보)를 정의하는 데 사용됩니다.
  • app.py 파일은 다양한 경로를 사용하여 모든 REST 끝점을 정의하는 애플리케이션 진입점입니다. 애플리케이션은 다양한 종속성, 특히 CommentService를 가져옵니다. Redis와 상호 작용하는 데 사용됩니다. 여러 파일을 사용하려면 chalicelib에 파일을 넣어야 합니다. 폴더.
  • comment_service.py 파일에는 댓글을 생성, 쿼리 및 삭제하기 위한 Redis와의 모든 상호 작용이 포함되어 있습니다. 댓글 기능의 흥미로운 점은 search()입니다. 방법. 이 메소드는 search_client.search()를 사용하여 생성 날짜별로 정렬된 영화에 대한 댓글을 검색하는 데 사용됩니다. 전화하세요.

선택적으로 에 Redis 데이터베이스 비밀번호를 저장할 수 있습니다. AWS 키 관리 서비스 <엠>. 프로젝트에서 구성 단계를 찾을 수 있습니다. 문서 .

7단계:프런트엔드 애플리케이션 실행

  1. 프론트엔드 디렉토리로 이동하여 종속 항목을 설치합니다.
> cd 프런트 엔드> npm 설치

2. .env.development 수정 영화 및 댓글 서비스의 URL을 설정하는 파일:

VUE_APP_MOVIES_SERVICE=https://.execute-api..amazonaws.com/apiVUE_APP_COMMENTS_SERVICE=https://..execute-api..amazonaws.com/api 

3. 애플리케이션 실행:

> npm 실행 서브

4. 브라우저를 열고 https://localhost:8084로 이동합니다.

이제 애플리케이션에서 탐색하고, 영화를 업데이트 및 검색하고, 댓글을 추가/삭제할 수 있습니다.

선택적으로 S3 및 클라우드프론트 Vue 애플리케이션을 AWS 환경에 배포하고 사용자에게 공개적으로 제공합니다. 이것은 프로젝트에 설명되어 있습니다 문서 .

결론

AWS Lambda 및 Redis Enterprise Cloud를 사용하면 서비스 배포가 간소화됩니다. RediSearch와 함께 Redis Enterprise Cloud를 사용하면 값을 사용하여 Redis 데이터를 쉽게 쿼리할 수 있으므로 Redis를 서비스의 기본 데이터베이스로 사용할 수 있습니다.

Redis Enterprise Cloud는 Redis와 호환되므로 OSS와 관리형 서비스 모두에서 기존 Redis 배포를 쉽게 마이그레이션할 수 있습니다. 연결 매개변수(예:데이터베이스 끝점)만 변경하면 됩니다. 다음을 포함하여 실시간 마이그레이션을 수행하는 방법에는 여러 가지가 있습니다.

  • 블루-그린 배포
  • 능동적 수동 지역 분산을 사용하여 Amazon ElastiCache와 Redis Enterprise Cloud 동기화
  • 오픈 소스 RIOT 도구를 사용하여 데이터 마이그레이션

RediSearch 외에도 Redis Enterprise Cloud를 사용하면 그래프, JSON, 시계열 및 Bloom 필터와 같은 기타 유망한 데이터 모델을 사용할 수 있으며 고가용성, 확장성, 지속성, 보안 및 Active-Active 지리적 분포.

더 알고 싶으십니까? AWS re:Invent 홈페이지를 확인하고 다음 자습서와 블로그 게시물을 읽어보십시오.

  • AWS에서 Redis 모듈 시작하기
  • DBaaS 제공업체를 선택할 때 고려해야 할 6가지 주요 기능
  • Redis Enterprise Cloud가 AWS에서 성숙한 기업 고객의 요구 사항을 충족하는 방법