サーバーレスアプローチを使用してAWSサービスを連鎖させる - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

サーバーレスアプローチを使用してAWSサービスを連鎖させる

作成者: Aniket Braganza (AWS)

環境:本稼働

テクノロジー: サーバーレス、 CloudNative DevelopmentAndTesting、 DevOps、モダナイゼーション、インフラストラクチャ

AWS サービス: Amazon S3、Amazon SNS、Amazon SQS、AWSLambda

[概要]

このパターンは、Amazon Simple Storage Service (Amazon S3)、Amazon Simple Notification Service (Amazon )、SNSAmazon Simple Queue Service (Amazon SQS)、および AWS Lambda を連鎖させることで、アップロードされたファイルを処理するためのスケーラブルでサーバーレスなアプローチを示しています。アップロードされたサンプルファイルはデモ用です。ビジネス目標を達成するために必要なAWSサービスの組み合わせを連鎖させることで、サーバーレスアプローチを使用して他のタスクを完了できます。サーバーレスアプローチでは、イベント駆動型の通知、耐障害性のあるストレージ、Function as a Service (FaaS) コンピューティングを利用してのリクエスト処理する非同期ワークフローを採用しています。サーバーレス方式を使用すると、コストを最小限に抑えながら、ニーズに合わせてスケールできます。 

注: サーバーレスアプローチを使用してAWSサービスを連鎖させるには、いくつかのオプションがあります。例えば、Amazon SNSや Amazon の代わりに Lambda と Amazon S3 を組み合わせたアプローチを使用できますSQS。ただし、この方法では、イベント通知中に Lambda 呼び出しプロセスに複数の統合ポイントを追加し、処理オーバーヘッドを最小限に抑えながらサーバーレスオーケストレーションに複数のリスナーを含めるように実装を拡張できるため、SQSこのパターンは Amazon SNSと Amazon を使用します。

前提条件と制限

前提条件

製品バージョン

  • AWS CDK 2.x

  • Python 3.9

アーキテクチャ

次の図は、連鎖AWSサービスによってユーザーが S3 バケットにファイルをアップロードして処理できるようにする方法を示しています。

連鎖AWSサービスを使用して S3 バケットにファイルをアップロードするワークフロー。

この図表は、次のワークフローを示しています:

  1. ユーザーが S3 バケットにファイルをアップロードします。 

  2. アップロードは、SNSトピックにメッセージを公開する S3 イベントを開始します。メッセージには、S3 イベントの詳細が含まれます。

  3. SNS トピックに発行されるメッセージはキューに挿入され、SQSキューはそのトピックをサブスクライブして通知を受け取ります。

  4. Lambda 関数はSQSキューをポーリングし (イベントソースとして)、メッセージが処理されるのを待ちます。

  5. Lambda 関数は、SQSキューからメッセージを受信すると、それらを処理し、それらのメッセージの受信を確認します。

  6. Lambda によってメッセージが処理されない場合、そのメッセージはSQSキューに返され、最終的にSQSデッドレターキュー に転送されます。

テクノロジースタック

  • Amazon S3

  • Amazon SNS

  • Amazon SQS

  • AWS Lambda

ツール

AWS サービス

  • Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

  • Amazon Simple Notification Service (Amazon SNS) は、ウェブサーバーや E メールアドレスなど、パブリッシャーとクライアント間のメッセージ交換の調整と管理に役立ちます。

  • Amazon Simple Queue Service (Amazon SQS) は、安全で耐久性があり、利用可能なホストキューを提供し、分散ソフトウェアシステムとコンポーネントの統合と分離に役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を必要とせずにコードを実行するのに役立つコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

その他のツール

  • AWS Cloud Development Kit (AWS CDK) は、AWSCDKアプリケーションを操作するための主要なツールです。アプリケーションを実行し、定義したアプリケーションモデルを調査し、 AWS によって生成されたAWS CloudFormation テンプレートを生成してデプロイしますCDK。

  • AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェル内のコマンドを使用してAWSサービスとやり取りするのに役立つオープンソースツールです。

  • Python は、高水準のインタープリター型汎用プログラミング言語です。

コード

このパターンのコードは、 GitHub Chaining S3 to SNS to SQS to Lambda リポジトリで使用できます。

エピック

タスク説明必要なスキル

リポジトリをクローン作成します。

リポジトリをクローンし、python/s3-sns-sqs-lambda-chain フォルダに移動します。

アプリ開発者

仮想環境をセットアップします。

  1. でAWSCDK、 python3 -m venv .venv コマンドを実行します。

  2. MacOS/Linux または .venv\Scripts\activate.bat Windows で source .venv/bin/activate コマンドを実行します。

アプリ開発者

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

pip install -r requirements.txt コマンドを実行します。

アプリ開発者
タスク説明必要なスキル

ユニットテストを実行します。

  1. pip install -r requirements-dev.txt コマンドを実行します。

  2. (オプション) cdk synth --no-staging > template.yml コマンドを実行して CloudFormation スタックを生成します。重要: スタックをチェックすることはできますが、ステージングされたやアーティファクトを生成しないようにしてください。

  3. pytest コマンドを実行し、すべてのユニットテストを実行します。

  4. (オプション) pytest tests/unit/<test_filename> コマンドを実行し、特定ファイルのテストを実行します。

アプリ開発者、テストエンジニア
タスク説明必要なスキル

ブートストラップ環境をセットアップします。

AWS ドキュメントのブートストラップの指示に従って、 CloudFormation スタックがAWSCDKデプロイされる各AWSリージョンでデプロイする環境をブートストラップします。

注: このステップには、プログラムでのアクセス可能な認証情報が必要です。

アプリケーション開発者、 DevOps エンジニア、データエンジニア

CloudFormation スタックをデプロイします。

cdk deploy コマンドを実行して、スタックを構築してAWSアカウントにデプロイします。

アプリ開発者、 DevOps エンジニア、 AWS DevOps
タスク説明必要なスキル

CloudFormation スタックを削除し、関連するリソースを削除します。

作成された CloudFormation スタックを削除し、関連するすべてのリソースを削除するには、run cdkdestruct コマンドを実行します。

アプリ開発者