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

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

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

作成者: Aniket Braganza (AWS)

概要

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

注記

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

前提条件と制限

前提条件

製品バージョン

  • 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 クラウド開発キット (AWSCDK) は、AWSCDKアプリを操作するための主要なツールです。アプリケーションを実行し、定義したアプリケーションモデルを調査し、 AWS によって生成されたAWS CloudFormation テンプレートを生成してデプロイしますCDK。

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

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

コード

このパターンのコードは、 GitHub Chaining S3 to to SNS 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 cdkde destroy コマンドを実行します。

アプリ開発者