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

    CI/CD パイプラインでの AWS デプロイ

    CI/CD パイプラインの一部として AWS にデプロイする場合は deploy-ci ターゲットを使用します。

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

    このターゲットは通常の deploy ターゲットと異なり、事前に合成されたクラウドアセンブリをデプロイすることを保証します。これによりパッケージバージョンの変更に伴う非決定性の問題を回避し、すべてのパイプラインステージで同じクラウドアセンブリを使用してデプロイできます。

    追加情報

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