演習成果物を共有するファイル共有システムを AWS SDK で作った話
こんにちは、AWS 認定インストラクターのたかやまです。
AWS 認定インストラクターとしてコースを実施する傍ら、コースで利用する様々なシステムの開発も行っています。
本日は、受講者の方と成果物の共有をおこなう仕組みを Amazon S3 をベースにしたウェブアプリケーションで構築したお話をお届けいたします。
(前回は、新入社員研修の演習で利用する環境の構築を AWS CDK で行っているという記事を書きました。こちらも併せてご覧ください)
今回ご紹介するもの
新入社員研修のなかには、朝活としてライトニングトークを行っている会社さんもあります。前日までに学んだ内容だったり、個人的に興味のあることをテーマとして発表されることが多いようです。
こうした発表資料を講師や他の受講者の方と共有したり、発表内容に対する他の受講者の方のコメントを送り合うことでお互いを高め合う様子は見ていて気持ちいいですね。
さて、こうしたファイル共有をおこなう場合、いわゆるファイルサーバーに対する FTP 操作が考えられますが、FTP の操作を許可しないネットワークセキュリティが設定されている場合が少なからずあります。
そこで、ブラウザベースで利用できるセキュアなファイル共有システムを用意できないか。ということで構築したのがこちらです。
仕組みとしては、シンプルに Amazon Cognito を利用したユーザー管理機能とともに、Amazon S3 へのアップロードやダウンロード、ファイルブラウザの機能を備えただけのシステムです。
今回は、個人的な趣味と興味でバックエンドの API は用意せず、すべてフロントエンドの AWS SDK for JavaScript から直接 AWS のサービスを利用する形態にしてみました。
また、100名を超えるユーザーの登録を行うことがあるので、Cognito のユーザー管理は AWS Step Functions でバッチ処理できるようにしました。
各アクションでは、さほど大したことは行っていませんが、1つの Lambda 関数の中で複数の手続きを行うよりも今後の拡張時にもメンテナンス性が良いとおもいます。
特徴と工夫
1社だけではなく、複数の企業様で同じ時期にシステムを利用することを想定しているので、S3 バケットは企業や新入社員研修の単位で個別に作成するようにしています。
こうすることで、ソフトウェアのバグなどによる情報流出のリスクに対応しています。
しかし、フロントエンドのアプリケーションを企業ごとに用意するのは手間なので、マルチテナントで利用する SaaS アプリケーションとして構築しています。
受講者や講師がアクセスできる S3 バケットについては、Cognito のグループ機能で IAM ロールを適用することで管理しています。
S3 バケットには、初期状態で student と private というプレフィックスだけ用意しています。これは、講師間で受講者の評価シートや名簿などのファイル共有を行うことも想定されるので、受講者向けのルートディレクトリと講師向けのルートディレクトリを個別に設定できるようにしているためです。
Cognito のグループを受講者グループと講師グループに分けることも考えましたが、講師もすべてのコースで同じではないので、コースごとにグループが増えていくと複雑な管理になると思い Cognito のユーザーがアクセスできる S3 バケットや、ディレクトリなどの管理は Amazon DynamoDB に情報として登録することにしました。
結果として、S3 からデータを取得するタイミングで DynamoDB の情報をもとにフィルタを構成できるようになったのでシンプルなコードになりました。
ファイルのダウンロードは、署名付きURL を生成してから行うことですべてのバケットをプライベートにしたまま利用できます。
まとめ
Amazon S3 をベースにして以下のよう特徴を持つファイル共有システムを構築しました。
- AWS アカウント連携や、IAM ユーザーの準備が不要
- S3 の耐久性と可用性、セキュリティ機能を活用
- Step Functions を利用した拡張性とか可観測性のある構成
個人的には、AWS SDK for JavaScript V3 の使い方を学ぶことができるよい機会でした。
トレノケートのAWS研修(AWS認定トレーニング)
トレノケートのAWS認定トレーニングでは、AWS社の厳格なテクニカルスキル及びティーチングスキルチェックに合格した認定トレーナーがコースを担当します。AWS初心者向けの研修や、AWS認定資格を目指す人向けの研修をご提供し、皆様のAWS知識修得のサポートをいたします。
・トレノケートのAWS研修(AWS認定トレーニング)はこちら
▼AWS初心者の方は、
AWS Cloud Practitioner Essentialsから!
座学中心の研修で、AWSを初めて学ぶ方や、営業などで提案に関わる方におすすめです。
「AWS Certified Cloud Practitioner」資格取得を目指す方の基礎知識修得にも最適です。
→ AWS Cloud Practitioner Essentials 詳細・日程はこちらから