CDKインフラストラクチャ
AWS CDK はAWS CloudFormationを通じてクラウドインフラをコードで定義・プロビジョニングするフレームワークです。
TypeScriptインフラジェネレーターはTypeScriptで記述されたAWS CDKインフラアプリケーションを作成します。生成されたアプリケーションにはCFN Guardチェックによるセキュリティベストプラクティスが含まれます。
使用方法
インフラプロジェクトの生成
新しいインフラプロジェクトを2つの方法で生成できます:
- インストール Nx Console VSCode Plugin まだインストールしていない場合
- VSCodeでNxコンソールを開く
- クリック
Generate (UI)
"Common Nx Commands"セクションで - 検索
@aws/nx-plugin - ts#infra
- 必須パラメータを入力
- クリック
Generate
pnpm nx g @aws/nx-plugin:ts#infra
yarn nx g @aws/nx-plugin:ts#infra
npx nx g @aws/nx-plugin:ts#infra
bunx nx g @aws/nx-plugin:ts#infra
オプション
パラメータ | 型 | デフォルト | 説明 |
---|---|---|---|
name 必須 | string | - | The name of the application. |
ruleSet | string | aws_prototyping | Rule set to validate your AWS resources with. |
directory | string | packages | The directory of the new application. |
ジェネレーター出力
ジェネレーターは<directory>/<name>
ディレクトリに以下のプロジェクト構造を作成します:
Directorysrc
- main.ts CDKスタックをインスタンス化するアプリケーションエントリーポイント
Directorystacks CDKスタック定義
- application-stack.ts メインアプリケーションスタック
- cdk.json CDK設定ファイル
- project.json プロジェクト設定とビルドターゲット
CDKインフラの実装
src/stacks/application-stack.ts
内でCDKインフラの記述を開始できます。例:
import * as cdk from 'aws-cdk-lib';import { Bucket } from 'aws-cdk-lib/aws-s3'import { Construct } from 'constructs';
export class ApplicationStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
// インフラをここに記述 new Bucket(this, 'MyBucket'); }}
APIインフラ
tRPC APIまたはFastAPIジェネレーターを使用してAPIを作成した場合、packages/common/constructs
にデプロイ用のコンストラクトが既に存在します。
例えばmy-api
というtRPC APIを作成した場合、コンストラクトをインポートしてインスタンス化するだけで必要なインフラを追加できます:
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import { MyApi } from ':my-scope/common-constructs';
export class ApplicationStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
// APIのインフラを追加 new MyApi(this, 'MyApi'); }}
ウェブサイトインフラ
CloudScapeウェブサイトジェネレーターを使用した場合、packages/common/constructs
にデプロイ用のコンストラクトが存在します。例:
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import { MyWebsite } from ':my-scope/common-constructs';
export class ApplicationStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props);
// ウェブサイトのインフラを追加 new MyWebsite(this, 'MyWebsite'); }}
ウェブサイトのランタイム設定にすべてのAPI設定を含めるためには、APIコンストラクトの後にウェブサイトを宣言することが重要です。
インフラの合成
build
ターゲットの一部として、デフォルトのコンパイル・リント・テストターゲットに加え、インフラプロジェクトをCloudFormationに合成します。synth
ターゲットを実行することで単独でも実行可能です:
pnpm nx run <my-infra>:synth
yarn nx run <my-infra>:synth
npx nx run <my-infra>:synth
bunx nx run <my-infra>:synth
合成されたクラウドアセンブリはルートdist
フォルダのdist/packages/<my-infra-project>/cdk.out
に配置されます。
AWSアカウントのブートストラップ
初めてAWSアカウントにCDKアプリケーションをデプロイする場合、事前にブートストラップが必要です。
まずAWSアカウントの認証情報設定を確認してください。
次にcdk bootstrap
コマンドを実行します:
npx cdk bootstrap aws://<account-id>/<region>
詳細はCDKドキュメントを参照してください。
AWSへのデプロイ
ビルド後、deploy
ターゲットを使用してインフラをAWSにデプロイできます。
まずAWSアカウントの認証情報設定を確認してください。
次にデプロイターゲットを実行します:
pnpm nx run <my-infra>:deploy --all
yarn nx run <my-infra>:deploy --all
npx nx run <my-infra>:deploy --all
bunx nx run <my-infra>:deploy --all