Skip to content

CDKインフラストラクチャ

AWS CDK はAWS CloudFormationを通じてクラウドインフラをコードで定義・プロビジョニングするフレームワークです。

TypeScriptインフラジェネレーターはTypeScriptで記述されたAWS CDKインフラアプリケーションを作成します。生成されたアプリケーションにはCFN Guardチェックによるセキュリティベストプラクティスが含まれます。

使用方法

インフラプロジェクトの生成

新しいインフラプロジェクトを2つの方法で生成できます:

  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - ts#infra
  5. 必須パラメータを入力
    • クリック Generate

    オプション

    パラメータ デフォルト 説明
    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インフラの記述を開始できます。例:

    src/stacks/application-stack.ts
    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を作成した場合、コンストラクトをインポートしてインスタンス化するだけで必要なインフラを追加できます:

    src/stacks/application-stack.ts
    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にデプロイ用のコンストラクトが存在します。例:

    src/stacks/application-stack.ts
    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ターゲットを実行することで単独でも実行可能です:

    Terminal window
    pnpm nx run <my-infra>:synth

    合成されたクラウドアセンブリはルートdistフォルダのdist/packages/<my-infra-project>/cdk.outに配置されます。

    AWSアカウントのブートストラップ

    初めてAWSアカウントにCDKアプリケーションをデプロイする場合、事前にブートストラップが必要です。

    まずAWSアカウントの認証情報設定を確認してください。

    次にcdk bootstrapコマンドを実行します:

    Terminal window
    npx cdk bootstrap aws://<account-id>/<region>

    詳細はCDKドキュメントを参照してください。

    AWSへのデプロイ

    ビルド後、deployターゲットを使用してインフラをAWSにデプロイできます。

    まずAWSアカウントの認証情報設定を確認してください。

    次にデプロイターゲットを実行します:

    Terminal window
    pnpm nx run <my-infra>:deploy --all

    追加情報

    CDKの詳細についてはCDK開発者ガイドAPIリファレンスを参照してください。