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
CI/CD パイプラインでの AWS デプロイ
CI/CD パイプラインの一部として AWS にデプロイする場合は deploy-ci
ターゲットを使用します。
pnpm nx run <my-infra>:deploy-ci my-stack
yarn nx run <my-infra>:deploy-ci my-stack
npx nx run <my-infra>:deploy-ci my-stack
bunx nx run <my-infra>:deploy-ci my-stack
このターゲットは通常の deploy
ターゲットと異なり、事前に合成されたクラウドアセンブリをデプロイすることを保証します。これによりパッケージバージョンの変更に伴う非決定性の問題を回避し、すべてのパイプラインステージで同じクラウドアセンブリを使用してデプロイできます。
追加情報
CDK の詳細については CDK 開発者ガイド と API リファレンス を参照してください。