

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

# AWS CDK と TypeScript を使用してマルチスタックのアプリケーションをデプロイする
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript"></a>

*Dr. Rahul Sharad Gaikwad、Amazon Web Services*

## 概要
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-summary"></a>

このパターンは、AWS Cloud Development Kit (AWS CDK) と TypeScript を使用して、Amazon Web Services (AWS) にアプリケーションをデプロイするための段階的なアプローチを示しています。例として、このパターンはサーバーレスのリアルタイム分析アプリケーションをデプロイします。

このパターンはネストされたスタックアプリケーションをビルドしてデプロイします。親の AWS CloudFormation スタックは、子スタックまたはネストされたスタックを呼び出します。 各子スタックは、CloudFormation スタックで定義されている AWS リソースをビルドしてデプロイします。コマンドラインインターフェイス (CLI) コマンド `cdk` である AWS CDK ツールキットは、CloudFormation スタックの主要なインターフェイスです。

## 前提条件と制限事項
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ 既存の仮想プライベートクラウド (VPC) とサブネット
+ インストールおよび設定済みの AWS CDK Toolkit。
+ 管理者権限とアクセスキーセットを持つユーザー。
+ Node.js
+ AWS コマンドラインインターフェイス (AWS CLI)

**制限事項**
+ AWS CDK は AWS CloudFormation を使用しているため、AWS CDK アプリケーションには CloudFormation サービスクォータが適用されます。詳細については、「[AWS CloudFormation のクォータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html)」を参照してください。

**製品バージョン**

このパターンは、以下のツールとバージョンを使用して構築され、テストされています。
+ AWS CDK ツールキット 1.83.0
+ Node.js 14.13.0
+ npm 7.0.14

このパターンは、AWS CDK または npm のどのバージョンでも機能するはずです。Node.js のバージョン 13.0.0 から 13.6.0 は AWS CDK と互換性がないことに注意してください。

## アーキテクチャ
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-architecture"></a>

**ターゲットテクノロジースタック**
+ AWS Amplify Console
+ Amazon API Gateway
+ AWS CDK
+ Amazon CloudFront
+ Amazon Cognito
+ Amazon DynamoDB
+ Amazon Data Firehose
+ Amazon Kinesis Data Streams
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)

**ターゲットアーキテクチャ**

次の図は、AWS CDK と TypeScript を使用したマルチスタックのアプリケーションのデプロイを示しています。

![\[VPC のスタックアーキテクチャです。親スタックと、リソースを含む 2 つの子スタックがあります。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/8f92e86a-aa3d-4f8a-9b11-b92c52a7226c.png)


 

次の図は、サンプルサーバーレスリアルタイムアプリケーションのアーキテクチャを示します。

![\[リージョンのアプリケーションアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/2df00faf-f871-4aec-9655-19ba2eb14cf8.png)


 

## ツール
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-tools"></a>

**ツール**
+ [AWS Amplify Console](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) は、フルスタックのウェブおよびモバイルアプリケーションを AWS にデプロイするためのコントロールセンターです。Amplify コンソールホスティングは、継続的なデプロイでフルスタックのサーバーレス Web アプリをホストするための Git ベースのワークフローを提供します。Admin UI は、フロントエンドのウェブ開発者やモバイル開発者が AWS コンソールの外部でアプリケーションのバックエンドを作成および管理するためのビジュアルインターフェイスです。
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) は、あらゆる規模の REST、HTTP、WebSocket API を作成、公開、管理、モニタリング、保護するための AWS のサービスです。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) は、AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) は、AWS CDK アプリとの対話に役立つコマンドラインのクラウド開発キットです。`cdk` CLI コマンドは、AWS CDK アプリケーションを操作するための主要なツールです。アプリを実行し、定義したアプリケーションモデルを調べ、AWS CDK によって生成された AWS CloudFormation テンプレートを作成してデプロイします。
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) は、.html、.css、.js、画像ファイルなどの静的および動的 Web コンテンツの配布を高速化する Web サービスです。CloudFront は、エッジロケーションと呼ばれるデータセンターの世界規模のネットワークを通じてコンテンツを配信し、レイテンシーを短縮し、パフォーマンスを向上させます。
+ [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 データベースサービスであり、シームレスなスケーラビリティを備えた高速で予測可能なパフォーマンスを提供します。
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) は、Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Splunk、カスタム HTTP エンドポイント、またはサポートされているサードパーティのサービスプロバイダーが所有する HTTP エンドポイントなどの宛先に、リアルタイムの[ストリーミングデータ](https://aws.amazon.com/streaming-data/)を配信するフルマネージドサービスです。
+ [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) は、データレコードの大規模なストリームをリアルタイムで収集および処理するためのサービスです。
+ 「[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)」 – AWS Lambda はサーバーのプロビジョニングや管理を行わずにコードの実行を支援できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。課金は実際に消費したコンピューティング時間に対してのみ発生します。コードが実行されていない場合、料金は発生しません。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**コード**

このパターンのコードは添付されています。

## エピック
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-epics"></a>

### AWS CDK ツールキットをインストール
<a name="install-aws-cdk-toolkit"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS CDK ツールキットをインストールします。 | AWS CDK Toolkit をグローバルにインストールするには、次のコマンドを実行します。`npm install -g aws-cdk` | DevOps | 
| バージョンを確認します。 | AWS CDK Toolkit のバージョンを確認するには、次のコマンドを実行します。 `cdk --version` | DevOps | 

### AWS 認証情報の設定
<a name="set-up-aws-credentials"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 認証情報を設定します。 | 認証情報を設定するには、`aws configure` コマンドを実行し、プロンプトに従います。<pre>$aws configure<br />AWS Access Key ID [None]: <br />AWS Secret Access Key [None]: your_secret_access_key<br />Default region name [None]:<br />Default output format [None]:</pre> | DevOps | 

### プロジェクトコードのダウンロード
<a name="download-the-project-code"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 添付のプロジェクトコードをダウンロードしてください。 | ディレクトリとファイル構造の詳細については、「*追加情報*」セクションを参照してください。 | DevOps | 

### AWS CDK 環境を起動する
<a name="bootstrap-the-aws-cdk-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 環境を起動します。 | 使用したいアカウントと AWS リージョンに AWS CloudFormation テンプレートをデプロイするには、次のコマンドを実行します。`cdk bootstrap <account>/<Region>`詳細については、[AWS ドキュメント](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)を参照してください。 | DevOps | 

### プロジェクトの構築とデプロイ
<a name="build-and-deploy-the-project"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| プロジェクトをビルドします。 | プロジェクトコードをビルドするには、`npm run build` コマンドを実行します。 | DevOps | 
| プロジェクトをデプロイします。 | プロジェクトコードをデプロイするには、`cdk deploy` コマンドを実行します。 |  | 

### 出力の確認
<a name="verify-outputs"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| スタックの作成を確認します。 | AWS マネジメントコンソールで、**[CloudFormation]** を選択します。プロジェクトのスタックで、親スタックと 2 つの子スタックが作成されていることを確認します。 | DevOps | 

### アプリケーションをテストする
<a name="test-the-application"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データを Kinesis Data Streams に送信します。 | Amazon Kinesis Data Generator (KDG) を使用して KinKinesis Data Streams にデータを送信するように AWS アカウントを設定します。詳細については、「[Amazon Kinesis Data Generator](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html)」を参照してください。 | DevOps | 
| Amazon Cognito ユーザーを作成します。 | Amazon Cognito ユーザーを作成するには、[Kinesis Data Generator のヘルプページ](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html)の「*Amazon Cognito ユーザーの作成*」セクションから cognito-setup.json CloudFormation テンプレートをダウンロードしてください。テンプレートを起動し、Amazon Cognito の**ユーザー名**と**パスワード**を入力します。**[出力]** タブには Kinesis Data Generator URL が一覧表示されます。 | DevOps | 
| Kinesis Data Generator にログイン | KDG にログインするには、指定した Amazon Cognito 認証情報と Kinesis データジェネレーター URL を使用します。 | DevOps | 
| アプリケーションをテストします。 | KDG の **[レコードテンプレート]**、**[テンプレート 1]** に「*追加情報*」セクションのテストコードを貼り付け、**[データを送信]** を選択します。 | DevOps | 
| API Gateway をテストします。 | データが取り込まれたら、`GET` メソッドを使用してデータを取得して API ゲートウェイをテストします。 | DevOps | 

## 関連リソース
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-resources"></a>

**リファレンス**
+ [AWS クラウド開発キット](https://aws.amazon.com/cdk/)
+ [AWS CDK on GitHub](https://github.com/aws/aws-cdk)
+ [ネストされたスタックの操作](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)
+ [AWS サンプル例 - サーバーレスリアルタイム分析](https://github.com/aws-samples/serverless-realtime-analytics)

## 追加情報
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-additional"></a>

**ディレクトリとファイルの詳細**

このパターンでは、次の 3 つのスタックが設定されます。
+ `parent-cdk-stack.ts` – このスタックは親スタックとして機能し、2 つの子アプリケーションをネストされたスタックとして呼び出します。 
+ `real-time-analytics-poc-stack.ts` – このネストされたスタックには、インフラストラクチャとアプリケーションコードが含まれています。
+ `real-time-analytics-web-stack.ts` – このネストされたスタックには、静的な Web アプリケーションコードのみが含まれます。

重要なファイルとその機能
+ `bin/real-time-analytics-poc.ts` – AWS CDK アプリケーションのエントリポイント。`lib/` で定義されたすべてのスタックをロードします。
+ `lib/real-time-analytics-poc-stack.ts` – AWS CDK アプリケーションのスタックの定義 (`real-time-analytics-poc`)。
+ `lib/real-time-analytics-web-stack.ts` – AWS CDK アプリケーションのスタックの定義 (`real-time-analytics-web-stack`)。
+ `lib/parent-cdk-stack.ts` – AWS CDK アプリケーションのスタックの定義 (`parent-cdk`)。
+ `package.json` – npm モジュールマニフェスト。アプリケーション名、バージョン、依存関係が含まれます。
+ `package-lock.json` – npm が管理します。
+ `cdk.json` – アプリケーションを実行するためのツールキット。
+ `tsconfig.json` – プロジェクトの TypeScript を設定します。
+ `.gitignore` – Git がソースコントロールから除外すべきファイルのリスト。
+ `node_modules` – npm が管理します。プロジェクトの依存関係を含みます。

親スタックの次のコードセクションでは、子アプリケーションをネストされた AWS CDK スタックとして呼び出します。

```
import * as cdk from '@aws-cdk/core';
import { Construct, Stack, StackProps } from '@aws-cdk/core';
import { RealTimeAnalyticsPocStack } from './real-time-analytics-poc-stack';
import { RealTimeAnalyticsWebStack } from './real-time-analytics-web-stack';


export class CdkParentStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);


    new RealTimeAnalyticsPocStack(this, 'RealTimeAnalyticsPocStack');
    new RealTimeAnalyticsWebStack(this, 'RealTimeAnalyticsWebStack');
  }
}
```

**テスト用のコード**

```
session={{date.now('YYYYMMDD')}}|sequence={{date.now('x')}}|reception={{date.now('x')}}|instrument={{random.number(9)}}|l={{random.number(20)}}|price_0={{random.number({"min":10000, "max":30000})}}|price_1={{random.number({"min":10000, "max":30000})}}|price_2={{random.number({"min":10000, "max":30000})}}|price_3={{random.number({"min":10000, "max":30000})}}|price_4={{random.number({"min":10000, "max":30000})}}|price_5={{random.number({"min":10000, "max":30000})}}|price_6={{random.number({"min":10000, "max":30000})}}|price_7={{random.number({"min":10000, "max":30000})}}|price_8={{random.number({"min":10000, "max":30000})}}|
```

**API ゲートウェイのテスト**

API ゲートウェイコンソールで、`GET` メソッドを使用して API ゲートウェイをテストします。

![\[OPTIONS で GET が選択された API Gateway コンソールです。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/452e5b8f-6d61-401d-8484-e5a436cb6f1b.png)


 

## アタッチメント
<a name="attachments-0ac29a11-1362-4084-92ed-6b85205763ca"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/0ac29a11-1362-4084-92ed-6b85205763ca/attachments/attachment.zip)」