AWS CDKでCognitoユーザープールを構築する方法(TypeScript)
概要
AWS CDK(Cloud Development Kit)は、AWS上のリソースをPython / Java / .NET / TypeScriptを使って構築することができるフレームワークです。 Amazon CognitoはAWS上でユーザーの認証基盤を構築できるマネージドサービスです。
- 概要
- 動作確認
- AWS CDKのCLIをインストール
- AWS CDKのプロジェクトを作成
- Amazon Cognitoのコンポーネント
- Cognitoのコンポーネントを構築するためのパッケージを追加する
- Cognitoユーザープールを構築するコードを書く
- AWS CDKで構築したリソースをデプロイする
- リソースを削除する
動作確認
- 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