翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
で AWS CDK を使用してマルチスタックアプリケーションをデプロイする TypeScript
作成者:Dr. Rahul Sharad Gaikwad (AWS)
環境:本稼働 | テクノロジー: モダナイゼーション、移行、 DevOps | ワークロード:その他すべてのワークロード |
AWS サービス: Amazon API Gateway、AWS Lambda、Amazon Kinesis |
[概要]
このパターンは、 で AWS Cloud Development Kit (AWS CDK) を使用して、Amazon Web Services (AWS) にアプリケーションをデプロイするための step-by-step アプローチを提供します TypeScript。例として、このパターンはサーバーレスのリアルタイム分析アプリケーションをデプロイします。
このパターンはネストされたスタックアプリケーションをビルドしてデプロイします。親 AWS CloudFormation スタックは、子スタックまたはネストされたスタックを呼び出します。 各子スタックは、 CloudFormation スタックで定義されている AWS リソースを構築してデプロイします。コマンドラインインターフェイス (CLI) コマンド である AWS CDK Toolkit はcdk
、 CloudFormation スタックのプライマリインターフェイスです。
前提条件と制限
前提条件
アクティブな AWS アカウント
既存の仮想プライベートクラウド (VPC) とサブネット
インストールおよび設定済みの AWS CDK Toolkit。
管理者権限とアクセスキーセットを持つユーザー。
Node.js
AWS コマンドラインインターフェイス (AWS CLI)
制限
AWS CDK は AWS を使用するため CloudFormation、AWS CDK アプリケーションには CloudFormation サービスクォータが適用されます。詳細については、「AWS CloudFormation クォータ」を参照してください。
製品バージョン
このパターンは、以下のツールとバージョンを使用して構築され、テストされています。
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 と互換性がないことに注意してください。
アーキテクチャ
ターゲットテクノロジースタック
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 つの子スタックがあります。](images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/8f92e86a-aa3d-4f8a-9b11-b92c52a7226c.png)
次の図は、サンプルサーバーレスリアルタイムアプリケーションのアーキテクチャを示します。
![リージョンのアプリケーションアーキテクチャ。](images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/2df00faf-f871-4aec-9655-19ba2eb14cf8.png)
ツール
ツール
AWS Amplify Console は、フルスタックのウェブおよびモバイルアプリケーションを AWS にデプロイするためのコントロールセンターです。Amplify コンソールホスティングは、継続的なデプロイでフルスタックのサーバーレス Web アプリをホストするための Git ベースのワークフローを提供します。Admin UI は、フロントエンドのウェブ開発者やモバイル開発者が AWS コンソールの外部でアプリケーションのバックエンドを作成および管理するためのビジュアルインターフェイスです。
Amazon API Gateway は、REST、HTTP、API をあらゆる規模で作成、公開、保守、モニタリング、保護するための AWS のサービス WebSocket APIs。
AWS Cloud Development Kit (AWS CDK) は、AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
AWS CDK Toolkit は、AWS CDK アプリとの対話に役立つコマンドラインのクラウド開発キットです。
cdk
CLI コマンドは、AWS CDK アプリケーションを操作するための主要なツールです。アプリケーションを実行し、定義したアプリケーションモデルを調べ、AWS CDK によって生成された AWS CloudFormation テンプレートを生成してデプロイします。Amazon CloudFront は、.html、.css、.js、イメージファイルなどの静的および動的なウェブコンテンツの配信を高速化するウェブサービスです。 は、エッジロケーションと呼ばれるデータセンターのワールドワイドネットワークを介してコンテンツを CloudFront 配信し、レイテンシーを短縮し、パフォーマンスを向上させます。
Amazon Cognito は、ウェブおよびモバイルアプリの認証、認可、およびユーザー管理機能を提供します。ユーザーは、直接サインインしても、サードパーティを介してサインインしてもかまいません。
Amazon DynamoDB は、フルマネージド NoSQL データベースサービスであり、シームレスなスケーラビリティを備えた高速で予測可能なパフォーマンスを提供します。
Amazon Data Firehose は、Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Splunk、およびサポートされているサードパーティーサービスプロバイダーが所有するカスタム HTTP エンドポイントまたは HTTP エンドポイントなどの宛先にリアルタイムのストリーミングデータを
配信するためのフルマネージドサービスです。 Amazon Kinesis Data Streams は、データレコードの大規模なストリームをリアルタイムで収集および処理するためのサービスです。
「AWS Lambda」 – AWS Lambda はサーバーのプロビジョニングや管理を行わずにコードの実行を支援できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。課金は実際に消費したコンピューティング時間に対してのみ発生します。コードが実行されていない場合、料金は発生しません。
Amazon Simple Storage Service (Amazon S3) は、任意の量のデータを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。
コード
このパターンのコードは添付されています。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CDK ツールキットをインストールします。 | AWS CDK Toolkit をグローバルにインストールするには、次のコマンドを実行します。
| DevOps |
バージョンを確認します。 | AWS CDK Toolkit のバージョンを確認するには、次のコマンドを実行します。
| DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
認証情報を設定します。 | 認証情報を設定するには、
| DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
添付のプロジェクトコードをダウンロードしてください。 | ディレクトリとファイル構造の詳細については、「追加情報」セクションを参照してください。 | DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
環境を起動します。 | 使用するアカウントと AWS リージョンに AWS CloudFormation テンプレートをデプロイするには、次のコマンドを実行します。
詳細については、AWS ドキュメントを参照してください。 | DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
プロジェクトをビルドします。 | プロジェクトコードをビルドするには、 | DevOps |
プロジェクトをデプロイします。 | プロジェクトコードをデプロイするには、 |
タスク | 説明 | 必要なスキル |
---|---|---|
スタックの作成を確認します。 | AWS マネジメントコンソールで、 を選択しますCloudFormation。プロジェクトのスタックで、親スタックと 2 つの子スタックが作成されていることを確認します。 | DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
データを Kinesis Data Streams に送信します。 | Amazon Kinesis Data Generator (KDG) を使用して KinKinesis Data Streams にデータを送信するように AWS アカウントを設定します。詳細については、「Amazon Kinesis Data Generator | DevOps |
Amazon Cognito ユーザーを作成します。 | Amazon Cognito ユーザーを作成するには、Kinesis Data Generator ヘルプページ [出力] タブには Kinesis Data Generator URL が一覧表示されます。 | DevOps |
Kinesis Data Generator にログイン | KDG にログインするには、指定した Amazon Cognito 認証情報と Kinesis データジェネレーター URL を使用します。 | DevOps |
アプリケーションをテストします。 | KDG の [レコードテンプレート]、[テンプレート 1] に「追加情報」セクションのテストコードを貼り付け、[データを送信] を選択します。 | DevOps |
API Gateway をテストします。 | データが取り込まれたら、 | DevOps |
関連リソース
リファレンス
追加情報
ディレクトリとファイルの詳細
このパターンでは、次の 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 コンソール。](images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/452e5b8f-6d61-401d-8484-e5a436cb6f1b.png)
添付ファイル
このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「attachment.zip」