@ito_tetsushi

東京・神奈川のサーバーレス / Web / モバイルアプリエンジニア

AWS CDKでCognitoユーザープールを構築する方法(TypeScript)

概要

AWS CDK(Cloud Development Kit)は、AWS上のリソースをPython / Java / .NET / TypeScriptを使って構築することができるフレームワークです。 Amazon CognitoはAWS上でユーザーの認証基盤を構築できるマネージドサービスです。

動作確認

  • aws-cdk@1.6.1

AWS CDKのCLIをインストール

$ npm i -g aws-cdk

AWS CDKのプロジェクトを作成

# ディレクトリを作成
$ mkdir cognito

# ディレクトリに移動
$ cd cognito

# AWS CDKプロジェクトを作成
$ cdk init app --language=typescript

この時点でのディレクトリは以下のようになっています。

$ tree . -I node_modules
.
├── README.md
├── bin
│   └── cognito.ts
├── cdk.json
├── lib
│   └── cognito-stack.ts
├── package-lock.json
├── package.json
└── tsconfig.json

Amazon Cognitoのコンポーネント

Amazon Cognitoはユーザープールとフェデレーテッドアイデンティティで構成されます。

  • Cognito User Pools(ユーザープール):ユーザーの情報を格納 / ユーザーの認証 / JWTトークン生成
  • Cognito Identity Pools(フェデレーテッドアイデンティティ):クライアントに対してAWSの認証情報を付与

また、Cognitoユーザープールにアクセスするユーザープールクライアントという概念もあります。 CDKでは、これらを別々のコンストラクタで生成します。

フェデレーテッドアイデンティティでは、未認証のクライアントに対して付与するIAMロール(Unauth Role)と認証済みのクライアントに付与するロール(Auth Role)を指定する必要があります。 これらのIAMロールは事前に生成しておき、フェデレーテッドアイデンティティの生成時に結びつける必要があります。

Cognitoのコンポーネントを構築するためのパッケージを追加する

AWS CDKでは、AWSの各リソースを構築するためのクラスはそれぞれ別パッケージとなっています。 次のコマンドでAmazon Cognitoを構築するためのパッケージをインストールします。

$ npm i @aws-cdk/aws-cognito @aws-cdk/aws-iam

Cognitoユーザープールを構築するコードを書く

UserPoolクラスの3つ目の引数に指定するオプションに必須項目は無いので、一行でCognitoユーザープールを生成できる。

import cdk = require("@aws-cdk/core");
// 以下のコードを追加
import cognito = require("@aws-cdk/aws-cognito");

export class CognitoStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 以下のコードを追加
    new cognito.UserPool(this, "UserPool");
  }
}

AWS CDKで構築したリソースをデプロイする

# TypeScriptをコンパイル
$ npx tsc

# リソースをデプロイ
$ npx cdk deploy

リソースを削除する

# リソースを削除する
$ npx cdk destroy