翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS SAM を使用してネストされたアプリケーションのデプロイを自動化
作成者:Dr. Rahul Sharad Gaikwad (AWS)、Dmitry Gulin (AWS)、Ishwar Chauthaiwale (AWS) と Tabby Ward (AWS)
コードリポジトリ: aws-sam-nested-stack-sample | 環境:PoC またはパイロット | テクノロジー: モダナイゼーション、サーバーレス、 DevOps |
ワークロード:その他すべてのワークロード | AWS サービス: AWS Serverless Application Repository |
[概要]
Amazon Web Services (AWS) では、AWS サーバーレスアプリケーションモデル (AWS SAM) は関数、API、データベース、およびイベントソースマッピングを表現するための省略構文を提供するオープンソースフレームワークです。リソースごとに数行入力するだけで、必要なアプリケーションを定義し、YAML を使用してモデル化できます。デプロイ中、SAM は SAM 構文を AWS CloudFormation 構文に変換して拡張し、サーバーレスアプリケーションを迅速に構築するために使用できます。
AWS SAM は、AWS プラットフォームでのサーバーレスアプリケーションの開発、デプロイ、管理を簡素化します。標準化されたフレームワーク、迅速なデプロイ、ローカルテスト特徴量、リソース管理、開発ツールとのシームレスな統合、支援コミュニティを提供します。これらの特徴量により、サーバーレスアプリケーションを効率的かつ効果的に構築するための貴重なツールとなっています。
このパターンでは、AWS SAM テンプレートを使用して、ネストされたアプリケーションのデプロイを自動化します。ネストされたアプリケーションは、別のアプリケーション内のアプリケーションです。親アプリケーションは子アプリケーションを呼び出します。これらはサーバーレスアーキテクチャのコンポーネントとして疎結合されています。
ネストされたアプリケーションを使用すると、独自に作成および管理されているが、AWS SAM とServerless Application Repository を使用して構成されているサービスまたはコンポーネントを再利用することで、高度に洗練されたサーバーレスアーキテクチャを迅速に構築できます。ネストされたアプリケーションは、より強力なアプリケーションを構築し、作業の重複を避け、チームや組織全体で一貫性とベストプラクティスを確保するのに役立ちます。ネストされたアプリケーションを示すために、このパターンでは「AWS サーバーレスショッピングカートアプリケーションの例をデプロイします
前提条件と制限
前提条件
アクティブなAWS アカウント
既存の仮想プライベートクラウド (VPC) とサブネット
AWS Cloud9 や Visual Studio Code などの統合開発環境 (詳細については、「AWS で構築するためのツール
」を参照してください) pip install wheel を使用してインストールされた Python ホイールライブラリ (まだインストールされていない場合)
制約事項
サーバーレスアプリケーションでネストできるアプリケーションの最大数は 200 です。
ネストされたアプリケーションで使用できるパラメータの最大数は 60 です。
製品バージョン
このソリューションは AWS SAM コマンドラインインターフェイス (AWS SAM CLI) バージョン 1.21.1 上に構築されていますが、このアーキテクチャは新しい AWS SAM CLI バージョンでも動作するはずです。
アーキテクチャ
ターゲットテクノロジースタック
Amazon API Gateway
AWS SAM
Amazon Cognito
Amazon DynamoDB
Lambda
Amazon Simple Queue Service (Amazon SQS) キュー
ターゲットアーキテクチャ
次の図は、API を呼び出してショッピングサービスにユーザーリクエストを送信する方法を示しています。必要なすべての情報を含むユーザーのリクエストは、Amazon API Gatewayと Amazon Cognito オーソライザーに送信されます。Amazon Cognito オーソライザーは API の認証と承認のメカニズムを実行します。
DynamoDB で項目を追加、削除、または更新すると、DDynamoDB Streams にイベントが送信され、次に Lambda 関数が開始されます。同期ワークフローの一部として古い項目がすぐに削除されないように、メッセージは SQS キューに入れられ、メッセージを削除するワーカー関数が開始されます。
![API Gateway から Lambda 関数、DynamoDB、Product Service への POST および PUT オペレーション。](images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5b454bae-5fd4-405d-a37d-6bafc3fcf889.png)
このソリューション設定では、AWS SAM CLI が AWS CloudFormation スタックのインターフェイスとして機能します。AWS SAM テンプレートはネストされたアプリケーションを自動的にデプロイします。親 SAM テンプレートは子テンプレートを呼び出し、親 CloudFormation スタックは子スタックをデプロイします。各子スタックは、AWS SAM CloudFormation テンプレートで定義されている AWS リソースを構築します。
![親スタックと 3 つの子 CloudFormation スタックで AWS SAM CLI を使用する 4 ステップのプロセス。](images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5828026e-72ad-4a3f-a5f2-bffac0f13e42.png)
スタックを構築してデプロイします。
認証 CloudFormation スタックには Amazon Cognito が含まれます。
製品 CloudFormation スタックには、Lambda 関数と Amazon API Gateway が含まれています。
ショッピング CloudFormation スタックには、Lambda 関数、Amazon API GatewaySQS キュー、および Amazon DynamoDB データベースが含まれています。
ツール
ツール
Amazon API Gateway は、あらゆる規模で REST、HTTP、 WebSocket APIs を作成、公開、保守、モニタリング、保護するのに役立ちます。
AWS CloudFormation は、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。
「Amazon Cognito」は、ウェブおよびモバイルアプリの認証、認可、およびユーザー管理機能を提供します。
Amazon DynamoDB は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを発揮します。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
「AWS Serverless Application Model (AWS SAM)」は、 AWS クラウドのサーバーレスアプリケーションを構築するために支援するオープンソースフレームワークです。
Amazon Simple Queue Service (Amazon SQS) は、分散したソフトウェアシステムとコンポーネントの統合と切り離しを支援し、セキュアで耐久性があり、利用可能なホスト型キューを提供します。
コード
このパターンのコードは、 GitHub AWS SAM ネストされたスタックサンプル
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
AWS SAM CLI をインストールします。 | AWS SAM CLI をインストールするには、「AWS SAM ドキュメント」の手順を参照してください。 | DevOps エンジニア |
AWS 認証情報の設定 | AWS SAM CLI がユーザーに代わって AWS サービスを呼び出せるように AWS 認証情報を設定するには、
認証情報をセットアップする詳細情報については、「権限とアクセス承認情報」を参照してください。 | DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS SAM コードリポジトリを複製します。 |
| DevOps エンジニア |
テンプレートをデプロイしてプロジェクトを初期化します。 | プロジェクトを初期化するには、 | DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS SAM アプリケーションテンプレートを確認します。 | ネストされたアプリケーションのテンプレートを確認します。この例では、以下のネストされたアプリケーションテンプレートを使用しています。
| DevOps エンジニア |
親テンプレートを見直します。 | ネストされたアプリケーションテンプレートを呼び出すテンプレートを確認します。この例では、親テンプレートは | DevOps エンジニア |
AWS SAM テンプレートコードをコンパイルしてビルドします。 | AWS SAM CLI を使用して、次のコマンドを実行します。
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
アプリケーションをデプロイします。 | ネストされたアプリケーション CloudFormation スタックを作成し、AWS 環境にコードをデプロイする SAM テンプレートコードを起動するには、次のコマンドを実行します。
コマンドを実行すると、いくつかの質問が表示されます。すべての質問に | DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
スタックを確認する | AWS SAM テンプレートで定義された AWS CloudFormation スタックと AWS リソースを確認するには、次の手順を実行します。
| DevOps エンジニア |
関連リソース
リファレンス
「サーバーレスショッピングカートマイクロサービス
」 (AWS サンプルアプリケーション)
チュートリアルと動画
追加情報
コードがすべて揃うと、この例は次のようなディレクトリ構造になります。
「sam_stacks」 — このフォルダーには
shared.py
レイヤーが含まれています。レイヤーは、ライブラリ、カスタムランタイム、その他の依存関係などを含むファイルアーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。デプロイパッケージに含める必要はありません。product-mock-service – このフォルダには、製品関連のすべての Lambda 関数とファイルが含まれています。
shopping-cart-service – このフォルダには、ショッピング関連のすべての Lambda 関数とファイルが含まれています。