Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

AWSLambdaとRedisEnterpriseCloudを使用したサーバーレス開発

このブログ投稿では、AWSLambdaとRedisEnterpriseCloudを統合する方法を学びます。サンプルのムービーデータベースアプリケーションを使用して、2つのLambda関数をビルドおよびデプロイする方法を学びます。1つはNode.jsに、もう1つはPythonにあります。これらの2つのLambda関数は、Redisデータベースと対話して、挿入、更新、削除、およびクエリを実行するために使用されます。このアプリケーションは、豊富なクエリおよび検索機能を提供するRediSearchAPIを使用します。サーバーレスは、AWS Lambdaを使用して、開発者がビジネス「サービス」の範囲を選択したプログラミング言語を使用して実装できる小さなプロジェクトに縮小できるため、マイクロサービスアーキテクチャへの成長傾向に適合します。詳細については、以下のビデオをご覧になり、AWS Lambdaの概要と、RedisEnterpriseCloudとLambdaを使用してアプリケーションを構築する方法の詳細をご覧ください。

AWSLambdaの概要

AWS Lambda(Function-as-a-Service(FaaS)とも呼ばれる会社のサーバーレスコンピューティングランタイム)にまだ精通していない場合は、次の基本事項を知っておく必要があります。 (Lambdaの専門家は次のセクションに進むことができます。)AWS Lambdaを使用すると、アプリケーションは特定のイベントに応じてオンデマンドで関数を実行できるため、イベント駆動型アーキテクチャ(EDA)アプリケーションを構築するのに適した方法になります。 AWSによって完全に管理されるAWSLambda関数は、さまざまなプログラミング言語を使用して作成できます。おそらく、AWS Lambdaの最も優れている点は、開発者が通常、アプリケーションのライフサイクルを完全に理解して使用する必要がないことです。

AWS Lambdaは、いくつかの異なるメソッドを使用して呼び出すことができます。AWSコンソールから直接、SNS、SQS、Kinesisなどの他のAWSサービスからのイベントを使用して、またはAWSコンソール、CloudWatch、S3イベントからも呼び出すことができます。サンプルのムービーデータベースアプリケーションでは、Lambda関数はHTTP RESTエンドポイントを使用して呼び出されます。これは、AWSAPIGatewayを使用して行われます。 (AWS Lambda関数の呼び出しについて詳しくは、ドキュメントをご覧ください。)

AWSLambdaHTTP実行プロセス

具体的には、HTTP経由のリクエストは、AWSのAPI Gateway管理ツールにルーティングされます。このツールは、本文、ヘッダー、パラメーターを解析し、このペイロードでLambda関数をトリガーします。

AWSLambdaとRedisEnterpriseCloudを使用したサーバーレス開発

開発者は、RESTエンドポイントを公開するコードを記述し、AWSAPIGateway内で公開するようにデプロイを設定するだけです。 (これについては、サンプルの映画データベースアプリケーションについて説明する次のセクションで詳しく説明します。)

サーバーレスアプリケーションでの状態とデータの管理

AWSLambdaはステートレス環境です。ただし、多くのアプリケーションでは、サービス間または呼び出し間で状態を共有する必要があり、Redisが役立ちます。単純な状態管理の場合、AWS開発者はElastiCacheを使用することがよくありますが、多くのアプリケーションは状態管理以上のものを必要とし、永続性、豊富なデータ、高性能、およびクエリモデルも必要とします。 Redis Enterprise Cloudは、AWSでフルマネージドサービスを提供します(GoogleCloudとMicrosoftAzureもサポートされています)。

Redisムービーデータベースサンプルアプリケーション

これで、サンプルのムービーデータベースアプリケーションを見て、RedisEnterpriseCloudとAWSLambdaを使用してアプリケーションを構築するための主要な手順を確認する準備が整いました。

このアプリケーションは、Redisハッシュで作成されたムービーカタログで構成されるRediSearch入門チュートリアルで文書化されているデータセットを使用します。下のグラフに示すように、フロントエンドはVue.jsを使用して構築されており、Vue.jsはRESTエンドポイントを次のように呼び出します。

  • 映画の一覧表示、並べ替え、フィルタリング
  • 映画の編集とコメントの追加/削除
  • 全文検索とファセット検索を使用して映画を検索する
AWSLambdaとRedisEnterpriseCloudを使用したサーバーレス開発 AWSLambdaとRedisEnterpriseCloudを使用したサーバーレス開発

上記のように、アプリケーションはデータストアにAWS API Gateway、AWS Lambda、およびRedisEnterpriseCloudを利用します。さらに、PythonサービスはAWS Key Management Serviceを使用して、Redisデータベースのパスワードを保存および暗号化します。

デモアプリケーションをインストールして実行します

開始するには、いくつかの前提条件が必要です。

  • CLIがインストールされたAWSアカウントの設定、クレデンシャル
  • RediSearchモジュールが有効になっているRedisEnterpriseCloudアカウントとデータベース
  • Git
  • Node.js
  • Python
  • Redisコマンドラインインターフェース(CLI)

すべてを組み立てたら、サンプルアプリケーションをインストールして実行するプロセスを見ていきましょう。

ステップ1:RedisEnterpriseCloudデータベース情報を取得する

Redis Enterprise Cloudでデータベースをまだ作成していない場合は、Redisモジュール入門ガイドの情報を使用して作成してください。

Redis Enterprise Cloudに接続すると、データベース接続情報をWebコンソールで見つけることができます。モジュール「RediSearch2」をデータベースに追加してください。

AWSLambdaとRedisEnterpriseCloudを使用したサーバーレス開発

Lambda関数をRedisデータベースに接続するには、次のプロパティが必要です。

  • REDIS_HOST:redis-18541.xxx.xxxx.xxx.cloud.redis.com
  • REDIS_PORT:18541
  • REDIS_PASSWORD:<画面に表示されたパスワード>

ステップ2:GitHubからプロジェクトを取得する

リポジトリをローカル環境に複製し、プロジェクトディレクトリに移動します

> git clone https://github.com/redis-developer/aws-redis-cloud-demo.git

> cd aws-redis-cloud-demo

プロジェクトのディレクトリ構造は次のとおりです。

aws-redis-cloud-demo
├── README.md
├── front-end                   => Vue.js project
│   ├── .env.development        => to set the Lambda URLs in dev mode
│   ├── .env.production         => to set the Lambda URLs in production mode    
│   ├── ...
│   └── vue.config.js
│   └── ...
├── movie-comments-microservice => The Python, comments service
│   ├── .chalice
│   │   └── config.json         => Lambda & Service configuration  
│   ├── app.py
│   ├── chalicelib              => Contains application code and lib
│   │   └── ….
│   ├── readme.md
│   └── requirements.txt
└── movies-list-microservice    => The Node.js, movie service
    ├── import_movies.redis     => Dataset file
    ├── ...
    ├── serverless.yml          => Lambda & Service configuration
    ├── src
    │   └── ...
    └── ...

ステップ3:映画データベースデータセットをアプリケーションにインポートします

ファイルaws-redis-cloud-demo/ movies-list-microservice / import_movies.redis データベースに映画を挿入するためのすべてのRedisコマンドが含まれています。使用されるコマンドは次のとおりです。

  • 各映画のHSET
  • FT.CREATEを使用してRediSearchインデックスを作成します。

データセットをインポートするには、ターミナルを開いて次のコマンドを実行します。

> export REDISCLI_AUTH=<YOUR_DB_PASSWORD>
> redis-cli -h redis-18541.xxx.xxxx.xxx.cloud.redis.com \
        -p 18541 < movies-list-microservice/import_movies.redis

ステップ4:RedisEnterpriseCloudインスタンスを使用するようにアプリケーションを構成する

アプリケーションをテストする前に、RedisEnterpriseCloudデータベースインスタンスを使用して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 serverless

2.movi​​es-list-microserviceディレクトリに移動します

> cd movies-list-microservice

3.依存関係をインストールします

> npm install

4.Lambda関数をローカルで実行します

> npm start

5. RESTサービスへのブラウザー呼び出しを開いてサービスをテストします: http:// localhost:3000 / api / movies / 1

6.次のコマンドを実行して、AWS環境に関数をデプロイすることにより、サービスをAWSにデプロイします。

> serverless deploy
................................
Serverless: Stack update finished...
Service Information
service: movies-list-microservice
stage: api
region: us-east-1
stack: movies-list-microservice-api
resources: 33
api keys:
  None
endpoints:
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/search
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/group_by/{field}
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id}
  POST - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id}
functions:
  listMovies: movies-list-microservice-api-listMovies
  searchMovies: movies-list-microservice-api-searchMovies
  getMovie: movies-list-microservice-api-getMovie
  saveMovie: movies-list-microservice-api-saveMovie
layers:
  None

7.ブラウザでhttps://.execute-api。.amazonaws.com/ api / movies / 1 にアクセスして、APIをテストします。

注:エラーが発生した場合は、AWS CloudWatchの関数ログをチェックして、何が起こったかを確認してください。

コードの詳細:

  • package.jsonファイルには、このNode.jsプロジェクトで使用される依存関係が含まれています。このプロジェクトは非常に単純で、次の依存関係を使用します。
    • redis およびredis-redisearch ライブラリは、Redisおよび公開されたRediSearchコマンドに接続するために使用されます。
    • aws-lambda ライブラリは、すべてのAWS Lambda関数を呼び出して、ノードアプリケーションをAWS環境にデプロイするために使用されます。
  • serverless.yml fileは、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大学のRedisコマンドとRediSearchコマンド、およびGitHubのRediSearch2.0チュートリアルの概要について詳しく知ることができます。

ステップ6:コメントマイクロサービス(Python)をビルドして実行します

プロジェクトをビルドして実行する手順は次のとおりです。 (プロジェクトのReadmeファイルにもすべての情報があります。)

  1. Pythonプロジェクトに移動して、仮想環境を作成します。
> cd movie-comments-microservice

> python3 -m venv chalice-env

> source chalice-env/bin/activate

2.依存関係をインストールします:

> pip install -r requirements.txt

3. AWS環境をセットアップし、次のコマンドを実行して、IDとシークレットを構成します。

> aws configure

AWS Access Key ID [None]: ****************ABCD
AWS Secret Access Key [None]: ****************abCd
Default region name [None]: us-west-2
Default output format [None]:

4.次のコマンドを実行して、AWS環境に関数をデプロイすることにより、サービスをAWSにデプロイします。

> chalice deploy

Reusing existing deployment package.
Updating policy for IAM role: movie-comments-microservice-dev
Creating lambda function: movie-comments-microservice-dev
Creating Rest API
Resources deployed:
  - 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 Redisにアクセスし、RediSearchAPIを使用します
  • config.json ファイルはサーバーレスアプリケーションを定義し、環境変数を定義するために使用されます。このアプリケーションでは、Redisデータベース接続情報です。
  • app.py fileは、さまざまなルートを使用してすべてのRESTエンドポイントを定義するアプリケーションエントリポイントです。アプリケーションはさまざまな依存関係、特に CommentServiceをインポートします これは、Redisとの対話に使用されます。複数のファイルを使用する場合は、ファイルを chalicelibに配置する必要があります フォルダ。
  • comment_service.pyファイルには、コメントを作成、クエリ、削除するためのRedisとのすべてのやり取りが含まれています。コメント機能の興味深い点は、 search()です。 方法。このメソッドは、 search_client.search()を使用して、作成日でソートされた映画のコメントを取得するために使用されます。 電話してください。

オプションで、Redisデータベースのパスワードをに保存できます。 AWSキー管理サービス 。構成手順はプロジェクトにあります ドキュメント

ステップ7:フロントエンドアプリケーションを実行する

  1. フロントエンドディレクトリに移動し、依存関係をインストールします:
> cd front-end

> npm install

2. .env.developmentを編集します 映画とコメントサービスのURLを設定するファイル:

VUE_APP_MOVIES_SERVICE=https://<xxx>.execute-api.<reg>.amazonaws.com/api
VUE_APP_COMMENTS_SERVICE=https://<xxx>..execute-api.<reg>.amazonaws.com/api

3.アプリケーションを実行します:

> npm run serve

4.ブラウザを開き、 http:// localhost:8084に移動します

これで、アプリケーション内を移動したり、映画を更新および検索したり、コメントを追加/削除したりできます。

オプションで、S3とを使用できます CloudFront VueアプリケーションをAWS環境にデプロイし、ユーザーに公開します。これはプロジェクトで説明されています ドキュメント

結論

AWSLambdaとRedisEnterpriseCloudを使用すると、サービスのデプロイが簡単になります。 Redis Enterprise CloudとRediSearchを使用すると、値を使用してRedisデータを簡単にクエリできるため、Redisをサービスのメインデータベースとして使用できます。

Redis Enterprise CloudはRedisと互換性があるため、OSSとマネージドサービスの両方の既存のRedisデプロイメントを簡単に移行できます。接続パラメータ(データベースエンドポイントなど)を変更するだけです。ライブマイグレーションを実行するには、次のような複数の方法があります。

  • 青緑色の展開
  • アクティブパッシブジオディストリビューションを使用したAmazonElastiCacheとRedisEnterpriseCloudの同期
  • オープンソースのRIOTツールを使用してデータを移行する

RediSearchに加えて、Redis Enterprise Cloudを使用すると、グラフ、JSON、時系列、ブルームフィルターなどの他の有望なデータモデルを使用でき、高可用性、スケーラビリティ、永続性、セキュリティ、およびアクティブ-アクティブな地理的分布。

もっと知りたいですか? AWS re:Inventホームページをチェックして、これらのチュートリアルとブログ投稿を読んでください:

  • AWSでRedisモジュールの使用を開始する
  • DBaaSプロバイダーを選択する際に考慮すべき6つの主な機能
  • RedisEnterpriseCloudがAWSで成熟するエンタープライズ顧客のニーズにどのように対応するか

  1. Flutter、サーバーレスフレームワーク、Upstash(REDIS)を備えたフルスタックサーバーレスアプリ-パート2

    このチュートリアルシリーズのパート2へようこそ。最初のパートでは、Upstash、Serverless Framework、およびRedisを使用してRESTAPIを構築する方法を説明しました。 このパートでは、Flutterを使用してモバイルアプリケーションを構築し、RESTAPIエンドポイントを使用します。 始めましょう🙃 まず、フラッターをコンピューターにインストールして実行する必要があります フラッター IDEで新しいフラッタープロジェクトを作成し、任意の名前を付けます。 pubspec.yamlを開きます flutterプロジェクトのルートディレクトリにあるファイルを

  2. Flutter、サーバーレスフレームワーク、Upstash(REDIS)を備えたフルスタックサーバーレスアプリ-パート1

    この投稿では、データを保存するためのFlutter、Serverless Framework、Upstash、Redisを使用してサーバーレスモバイルアプリケーションを構築します。 Upstashとは? Upstashは、Redis用のサーバーレスデータベースです。 Upstashを使用すると、リクエストごとに支払います。これは、データベースが使用されていないときに課金されないことを意味します。 Upstashはデータベースを構成および管理します。これは、DynamoDBやFaunaなどの他のデータベースの強力な代替手段であり、などの利点があります。 低レイテンシ REDISAPIと同