

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

# AWS SAM を使用してネストされたアプリケーションのデプロイを自動化
<a name="automate-deployment-of-nested-applications-using-aws-sam"></a>

*Amazon Web Services、Dr. Rahul Sharad Gaikwad、Ishwar Chauthaiwale、Dmitry Gulin、Tabby Ward*

## 概要
<a name="automate-deployment-of-nested-applications-using-aws-sam-summary"></a>

Amazon Web Services (AWS) では、AWS サーバーレスアプリケーションモデル (AWS SAM) は関数、API、データベース、およびイベントソースマッピングを表現するための省略構文を提供するオープンソースフレームワークです。リソースごとに数行入力するだけで、必要なアプリケーションを定義し、YAML を使用してモデル化できます。デプロイ時に、SAM は SAM 構文を AWS CloudFormation 構文に変換して拡張します。これにより、サーバーレスアプリケーションをより迅速に構築できます。

AWS SAM は、AWS プラットフォームでのサーバーレスアプリケーションの開発、デプロイ、管理を簡素化します。標準化されたフレームワーク、迅速なデプロイ、ローカルテスト特徴量、リソース管理、開発ツールとのシームレスな統合、支援コミュニティを提供します。これらの特徴量により、サーバーレスアプリケーションを効率的かつ効果的に構築するための貴重なツールとなっています。

このパターンでは、AWS SAM テンプレートを使用して、ネストされたアプリケーションのデプロイを自動化します。ネストされたアプリケーションは、別のアプリケーション内のアプリケーションです。親アプリケーションは子アプリケーションを呼び出します。これらはサーバーレスアーキテクチャのコンポーネントとして疎結合されています。 

ネストされたアプリケーションを使用すると、独自に作成および管理されているが、AWS SAM とServerless Application Repository を使用して構成されているサービスまたはコンポーネントを再利用することで、高度に洗練されたサーバーレスアーキテクチャを迅速に構築できます。ネストされたアプリケーションは、より強力なアプリケーションを構築し、作業の重複を避け、チームや組織全体で一貫性とベストプラクティスを確保するのに役立ちます。ネストされたアプリケーションを示すために、このパターンでは「[AWS サーバーレスショッピングカートアプリケーションの例をデプロイします](https://github.com/aws-samples/aws-sam-nested-stack-sample)」。

## 前提条件と制限事項
<a name="automate-deployment-of-nested-applications-using-aws-sam-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ 既存の仮想プライベートクラウド (VPC) とサブネット
+ Visual Studio Code などの統合開発環境 (詳細については、「[AWS で構築するためのツール](https://aws.amazon.com/getting-started/tools-sdks/#IDE_and_IDE_Toolkits)」を参照してください)
+ pip install wheel を使用してインストールされた Python ホイールライブラリ (まだインストールされていない場合)

**制限事項**
+ サーバーレスアプリケーションでネストできるアプリケーションの最大数は 200 です。
+ ネストされたアプリケーションで使用できるパラメータの最大数は 60 です。

**製品バージョン**
+ このソリューションは AWS SAM コマンドラインインターフェイス (AWS SAM CLI) バージョン 1.21.1 上に構築されていますが、このアーキテクチャは新しい AWS SAM CLI バージョンでも動作するはずです。

## アーキテクチャ
<a name="automate-deployment-of-nested-applications-using-aws-sam-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon API Gateway
+ AWS SAM
+ Amazon Cognito
+ Amazon DynamoDB
+ AWS 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 オペレーション。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/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 ステップのプロセス。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5828026e-72ad-4a3f-a5f2-bffac0f13e42.png)


1. スタックを構築してデプロイします。

1. Auth CloudFormation スタックには Amazon Cognito が含まれています。

1. プロダクトCloudFormation スタックには Lambda 関数と Amazon API Gateway が含まれています。

1. Shopping CloudFormation スタックには、Lambda 関数、Amazon API Gateway、SQS キュー、Amazon DynamoDB データベースが含まれています。

## ツール
<a name="automate-deployment-of-nested-applications-using-aws-sam-tools"></a>

**ツール**
+ 「[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html)」は、任意のスケールで REST、HTTP、WebSocket API を作成、公開、維持、監視、保護する上で役立ちます。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) を使用すると、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクル全体にわたってリソースを管理できます。
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) は、ウェブおよびモバイルアプリの認証、認可、およびユーザー管理機能を提供します。
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを発揮します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ 「[AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)」は、 AWS クラウドのサーバーレスアプリケーションを構築するために支援するオープンソースフレームワークです。
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) は、分散したソフトウェアシステムとコンポーネントの統合と切り離しを支援し、セキュアで耐久性があり、利用可能なホスト型キューを提供します。

**コード**

このパターンのコードは、GitHub 内の「[AWS SAM ネストスタックのサンプル](https://github.com/aws-samples/aws-sam-nested-stack-sample)」リポジトリで利用できます。

## エピック
<a name="automate-deployment-of-nested-applications-using-aws-sam-epics"></a>

### AWS SAM CLI のインストール
<a name="install-aws-sam-cli"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS SAM CLI をインストールします。 | AWS SAM CLI をインストールするには、「[AWS SAM ドキュメント](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)」の手順を参照してください。 | DevOps エンジニア | 
| AWS 認証情報を設定します。 | AWS SAM CLI がユーザーに代わって AWS サービスを呼び出せるように AWS 認証情報を設定するには、`aws configure` コマンドを実行してプロンプトに従います。<pre>$aws configure<br />AWS Access Key ID [None]: <your_access_key_id><br />AWS Secret Access Key [None]: your_secret_access_key<br />Default region name [None]:<br />Default output format [None]:</pre>認証情報をセットアップする詳細情報については、「[権限とアクセス承認情報](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html)」を参照してください。 | DevOps エンジニア | 

### AWS SAM プロジェクトを初期化する
<a name="initialize-the-aws-sam-project"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS SAM コードリポジトリを複製します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps エンジニア | 
| テンプレートをデプロイしてプロジェクトを初期化します。 | プロジェクトを初期化するには、`SAM init` コマンドを実行します。テンプレートソースを選択するよう求められたら、`Custom Template Location` を選択します。 | DevOps エンジニア | 

### SAM テンプレートコードをコンパイルしてビルドする。
<a name="compile-and-build-the-sam-template-code"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS SAM アプリケーションテンプレートを確認します。 | ネストされたアプリケーションのテンプレートを確認します。この例では、以下のネストされたアプリケーションテンプレートを使用しています。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps エンジニア | 
| 親テンプレートを見直します。 | ネストされたアプリケーションテンプレートを呼び出すテンプレートを確認します。この例では、親テンプレートは `template.yml` です。個別のアプリケーションはすべて単一の親テンプレート `template.yml` にネストされています。 | DevOps エンジニア | 
| AWS SAM テンプレートコードをコンパイルしてビルドします。 | AWS SAM CLI を使用して、次のコマンドを実行します。<pre>sam build</pre> | DevOps エンジニア | 

### AWS SAM テンプレートをデプロイする
<a name="deploy-the-aws-sam-template"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アプリケーションをデプロイします。 | ネストされたアプリケーション CloudFormation を作成して AWS 環境にコードをスタックしてデプロイする SAM テンプレートコードを起動するには、以下のコマンドを実行します。<pre>sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND</pre>コマンドを実行すると、いくつかの質問が表示されます。すべての質問に `y` で答えてください。 | DevOps エンジニア | 

### デプロイメントを確認する
<a name="verify-the-deployment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| スタックを確認する | AWS SAM テンプレートで定義された AWS CloudFormation スタックと AWS リソースを確認するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps エンジニア | 

## 関連リソース
<a name="automate-deployment-of-nested-applications-using-aws-sam-resources"></a>

リファレンス
+ 「[AWS サーバーレスアプリケーションモデル (AWS SAM)](https://aws.amazon.com/serverless/sam/#:~:text=The%20AWS%20Serverless%20Application%20Model,and%20model%20it%20using%20YAML.)」 
+ 「[GitHub の AWS SAM](https://github.com/aws/serverless-application-model)」
+ 「[サーバーレスショッピングカートマイクロサービス](https://github.com/aws-samples/aws-serverless-shopping-cart)」 (AWS サンプルアプリケーション)

**チュートリアルと動画**
+ 「[サーバーレスアプリケーションの構築](https://youtu.be/Hv3YrP8G4ag)」
+ 「[AWS オンラインテックトーク:AWS SAM によるサーバーレスアプリケーションの構築とデプロイ](https://youtu.be/1NU7vyJw9LU)」

## 追加情報
<a name="automate-deployment-of-nested-applications-using-aws-sam-additional"></a>

コードがすべて揃うと、この例は次のようなディレクトリ構造になります。
+ 「[sam\$1stacks](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html)」 — このフォルダーには `shared.py` レイヤーが含まれています。レイヤーは、ライブラリ、カスタムランタイム、その他の依存関係などを含むファイルアーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。デプロイパッケージに含める必要はありません。
+ *product-mock-service* – このフォルダには、製品に関連するすべての Lambda 関数とファイルが含まれています。
+ *shopping-cart-service* – このフォルダには、ショッピング関連のすべての Lambda 関数とファイルが含まれています。