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

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

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

作成者:Aniket Braganza (AWS)

環境:本稼働

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

AWS サービス: Amazon S3; Amazon SNS; Amazon SQS; AWS Lambda

[概要]

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

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

前提条件と制限

前提条件

製品バージョン

  • 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)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。

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

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

その他のツール

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

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

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

コード

このパターンのコードは、 GitHub Chaining S3 to SNS to SQS to Lambda リポジトリにあります。

エピック

タスク説明必要なスキル

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

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

アプリ開発者

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

  1. AWS CDK で、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 スタックがデプロイされる各 AWS リージョンで AWS CDK デプロイの環境をブートストラップします。

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

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

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

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

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

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

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

アプリ開発者