Skip to content

CDKインフラストラクチャ

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

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

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

Section titled “インフラストラクチャプロジェクトの生成”

新しいインフラストラクチャプロジェクトを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インフラストラクチャの実装

    Section titled “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');
    }
    }

    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');
    }
    }

    ウェブサイトインフラストラクチャ

    Section titled “ウェブサイトインフラストラクチャ”

    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アカウントのブートストラップ

    Section titled “AWSアカウントのブートストラップ”

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

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

    次にcdk bootstrapコマンドを使用します:

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

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

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

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

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

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

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

    Section titled “CI/CDパイプラインでのAWSデプロイ”

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

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

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

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