オープンなAmazon Cognitoエミュレーター "Magnito" のご紹介
はじめに
こんにちは。かる(@caru_ini)です!
大学生として勉強する傍ら、日々フロントエンドエンジニアを目指して活動しています。今回は、私がコミッターとして参加しているMagnitoというOSSプロジェクトについて紹介します。
皆さんは、AWSのCognitoというサービスを知っていますか? スマホアプリからWebアプリまで、多くのアプリケーションで認証・認可の機能は不可欠です。その中でも、Amazon Cognitoは多くの開発者に利用されている認証・認可サービスの一つです。この記事では、Cognitoを使う際の課題と、Magnitoがそれにどう対応するかを紹介します。
Amazon Cognitoとは
Amazon Cognitoは、Amazon Web Serviceが提供するユーザー認証、認可、およびユーザー管理を簡単にするためのサービスです。これにより、アプリケーションにユーザーサインインやアクセス制御機能を統合できます。
ローカル開発の課題
しかし、ローカル環境での開発やテスト時には、以下のような課題があります。
- ユーザープールやIDプールの設定が煩雑
- ユーザーのサインアップや認証のテストが難しい
- インターネット接続が必須
これらの課題を解決するために、Magnitoの開発が始まりました。
Magnitoの概要
Magnitoは、AWSのCognitoサービスをローカルでエミュレートするためのツールです。これにより、開発者はインターネット接続なしでCognitoの操作を行うことができます。現時点では、ユーザープール機能を中心に、ユーザーのサインアップ、ログイン、ログアウト、パスワードリセットなどをサポートしています。ただし、GoogleログインやLambda連携などの機能はサポートされていません。
主な特徴
Magnitoの主な特徴は以下の通りです。
- 🤝オープンソースで無料
- 🔌インターネット接続なしでCognitoをエミュレート
- 💻サポートしている機能範囲内での高い信頼性
- 🔧煩雑な設定不要
特にDockerファーストで永続化に対応している点が特徴的で、Motoserverと比較して、ユーザー情報の管理が容易です。MotoserverはPythonのBoto3前提で動作することが多く、ユーザー情報の保持が非常に面倒ですが、Magnitoではその点が改善されています。
導入手順
インストール方法
MagnitoはDocker Hubからダウンロードして利用できます。docker-composeを利用した使用方法を紹介します。
services:
magnito:
image: frourio/magnito:latest
ports:
- 5050:5050 # Cognito API
- 5051:5051 # web interface
environment:
COGNITO_USER_POOL_ID: ap-northeast-1_example
COGNITO_USER_POOL_CLIENT_ID: example-client-name
COGNITO_ACCESS_KEY: magnito-access-key
COGNITO_SECRET_KEY: magnito-secret-key
COGNITO_REGION: ap-northeast-1
SMTP_HOST: inbucket
SMTP_PORT: 2500
SMTP_USER: fake_mail_user
SMTP_PASS: fake_mail_password
volumes:
- magnito:/usr/src/app/data
inbucket:
image: inbucket/inbucket:3.0.3
ports:
- 2500:2500 # SMTP
- 9000:9000 # web interface
volumes:
- inbucket:/storage
volumes:
magnito:
driver: local
inbucket:
driver: local
以下のコマンドで起動します。
docker-compose up -d
Magnitoが起動したら、http://localhost:5051にアクセスして、MagnitoのWebインターフェースにアクセスできます。
SMTPサーバーの使用方法
上のcompose.ymlでは、SMTPサーバーとしてInbucketを使用しています。Inbucketは、ローカルで動作するSMTPサーバーで、メールの送信や受信をエミュレートすることができます。Magnitoから送信されるすべてのメールはInbucketに保存され、Webインターフェース(http://localhost:9000)から確認することができます。
Amplify UIでの設定
Amplify UIを使用している場合、以下のようにエンドポイントを変更します。
import awsConfig from './aws-exports';
// other imports...
Amplify.configure({
Auth: {
Cognito: {
userPoolId: 'ap-northeast-1_example',
userPoolClientId: 'example-client-name',
userPoolEndpoint: 'http://localhost:5050',
},
},
});
これで、ローカル環境でCognitoを利用する準備が整いました。
活用シナリオ
新規プロジェクトのプロトタイピング
MagnitoはDockerコンテナとして提供されているため、アプリケーションのプロトタイピングや開発環境の構築が簡単に行えます。実装のミスでユーザープールを破壊してしまった場合でも、コンテナを作成し直すだけでリセットできるため、安心して開発を進めることができます。
ローカルでの開発
ローカルで実行されるため、429(Too Many Requests)エラーやネットワーク遅延などの問題を気にせずに、テストやデバッグを行うことができます。
テストへの組み込み
テストにおいても、インターネット接続が不要なため、CI/CDパイプラインでのテストがスムーズに行えます。
まとめ
Magnitoは、Amazon Cognitoの機能をローカル環境でエミュレートするための強力なツールです。これにより、インターネット接続が不要となり、設定の煩雑さやテストの難しさを解消できます。オープンソースで無料提供されており、特にAmplify UIとの組み合わせで、簡単にローカル開発環境を構築できます。Magnitoを活用することで、開発効率の向上やテスト・デバッグの迅速化が期待できるでしょう。ぜひ一度試してみてください。
おわりに(お願い)
Magnitoはまだ発展途上のOSSプロジェクトです。GitHubリポジトリにスター⭐をつけていただけると、開発メンバーにとって大変励みになります。また、バグ報告や機能リクエスト、コードの改善提案などのコントリビューションも大歓迎です。詳しくは、以下のリンクをご覧ください!
以上、Magnitoの紹介でした!ご質問やフィードバックがありましたら、コメント欄または X までお気軽にお寄せください。最後まで読んでいただき、ありがとうございました!
Discussion