AWS SAM を使用してネストされたアプリケーションのデプロイを自動化 - AWS 規範ガイダンス

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

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 オペレーション。

このソリューション設定では、AWS SAM CLI が AWS CloudFormation スタックのインターフェイスとして機能します。AWS SAM テンプレートはネストされたアプリケーションを自動的にデプロイします。親 SAM テンプレートは子テンプレートを呼び出し、親 CloudFormation スタックは子スタックをデプロイします。各子スタックは、AWS SAM CloudFormation テンプレートで定義されている AWS リソースを構築します。

親スタックと 3 つの子 CloudFormation スタックで AWS SAM CLI を使用する 4 ステップのプロセス。
  1. スタックを構築してデプロイします。

  2. 認証 CloudFormation スタックには Amazon Cognito が含まれます。

  3. 製品 CloudFormation スタックには、Lambda 関数と Amazon API Gateway が含まれています。

  4. ショッピング 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 認証情報を設定するには、aws configure コマンドを実行してプロンプトに従います。

$aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: your_secret_access_key Default region name [None]: Default output format [None]:

認証情報をセットアップする詳細情報については、「権限とアクセス承認情報」を参照してください。

DevOps エンジニア
タスク説明必要なスキル

AWS SAM コードリポジトリを複製します。

  1. 次のコマンドを入力して、このパターンの「aws sam ネストスタックのサンプル」リポジトリを複製します。

    git clone https://github.com/aws-samples/aws-sam-nested-stack-sample.git
  2. 次のコマンドを入力して、クローンされたディレクトリに移動します。

    cd aws-sam-nested-stack-sample
DevOps エンジニア

テンプレートをデプロイしてプロジェクトを初期化します。

プロジェクトを初期化するには、SAM init コマンドを実行します。テンプレートソースを選択するよう求められたら、Custom Template Location を選択します。

DevOps エンジニア
タスク説明必要なスキル

AWS SAM アプリケーションテンプレートを確認します。

ネストされたアプリケーションのテンプレートを確認します。この例では、以下のネストされたアプリケーションテンプレートを使用しています。

  • auth.yaml — このテンプレートは、Amazon Cognito や AWS Systems Manager Parameter Store などの認証関連リソースを設定します。

  • product-mock.yaml — このテンプレートは、Lambda 関数や Amazon API Gateway などの製品関連リソースをデプロイします。

  • shoppingcart-service.yaml — このテンプレートは、AWS Identity and Access Management (IAM)、DynamoDB テーブル、Lambda 関数などのショッピングカート関連リソースを設定します。

DevOps エンジニア

親テンプレートを見直します。

ネストされたアプリケーションテンプレートを呼び出すテンプレートを確認します。この例では、親テンプレートは template.yml です。個別のアプリケーションはすべて単一の親テンプレート template.yml にネストされています。

DevOps エンジニア

AWS SAM テンプレートコードをコンパイルしてビルドします。

AWS SAM CLI を使用して、次のコマンドを実行します。

sam build
DevOps エンジニア
タスク説明必要なスキル

アプリケーションをデプロイします。

ネストされたアプリケーション CloudFormation スタックを作成し、AWS 環境にコードをデプロイする SAM テンプレートコードを起動するには、次のコマンドを実行します。

sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

コマンドを実行すると、いくつかの質問が表示されます。すべての質問に y で答えてください。

DevOps エンジニア
タスク説明必要なスキル

スタックを確認する

AWS SAM テンプレートで定義された AWS CloudFormation スタックと AWS リソースを確認するには、次の手順を実行します。

  1. AWS マネジメントコンソールにログインし、CloudFormationコンソールに移動します。

  2. 親スタックと子スタックが一覧表示されていることを確認します。

    この例では、sam-shopping-cart はネストされた Auth、Product、Shopping スタックを呼び出す親スタックです。

    プロダクトスタックは、プロダクト API ゲートウェイ URL リンクを出力として提供します。

DevOps エンジニア

関連リソース

リファレンス

チュートリアルと動画

追加情報

コードがすべて揃うと、この例は次のようなディレクトリ構造になります。

  • sam_stacks」 — このフォルダーには shared.py レイヤーが含まれています。レイヤーは、ライブラリ、カスタムランタイム、その他の依存関係などを含むファイルアーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。デプロイパッケージに含める必要はありません。

  • product-mock-service – このフォルダには、製品関連のすべての Lambda 関数とファイルが含まれています。

  • shopping-cart-service – このフォルダには、ショッピング関連のすべての Lambda 関数とファイルが含まれています。