catch-img

演習成果物を共有するファイル共有システムを AWS SDK で作った話

こんにちは、AWS 認定インストラクターのたかやまです。

AWS 認定インストラクターとしてコースを実施する傍ら、コースで利用する様々なシステムの開発も行っています。

本日は、受講者の方と成果物の共有をおこなう仕組みを Amazon S3 をベースにしたウェブアプリケーションで構築したお話をお届けいたします。

前回は、新入社員研修の演習で利用する環境の構築を AWS CDK で行っているという記事を書きました。こちらも併せてご覧ください)

今回ご紹介するもの

新入社員研修のなかには、朝活としてライトニングトークを行っている会社さんもあります。前日までに学んだ内容だったり、個人的に興味のあることをテーマとして発表されることが多いようです。

こうした発表資料を講師や他の受講者の方と共有したり、発表内容に対する他の受講者の方のコメントを送り合うことでお互いを高め合う様子は見ていて気持ちいいですね。

さて、こうしたファイル共有をおこなう場合、いわゆるファイルサーバーに対する FTP 操作が考えられますが、FTP の操作を許可しないネットワークセキュリティが設定されている場合が少なからずあります。

そこで、ブラウザベースで利用できるセキュアなファイル共有システムを用意できないか。ということで構築したのがこちらです。

AWS_SDK_01

仕組みとしては、シンプルに 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 に情報として登録することにしました。

AWS_SDK_02

結果として、S3 からデータを取得するタイミングで DynamoDB の情報をもとにフィルタを構成できるようになったのでシンプルなコードになりました。

ファイルのダウンロードは、署名付きURL を生成してから行うことですべてのバケットをプライベートにしたまま利用できます。

まとめ

Amazon S3 をベースにして以下のよう特徴を持つファイル共有システムを構築しました。

  • AWS アカウント連携や、IAM ユーザーの準備が不要
  • S3 の耐久性と可用性、セキュリティ機能を活用
  • Step Functions を利用した拡張性とか可観測性のある構成

個人的には、AWS SDK for JavaScript V3 の使い方を学ぶことができるよい機会でした。

 

髙山 裕司(たかやま ゆうじ)

トレノケート株式会社 講師。AWS 認定インストラクター。AWS認定ソリューションアーキテクト - アソシエイト / AWS 認定クラウドプラクティショナー。生粋の猫派。

無料ダウンロード

オススメコンテンツ

オススメ記事

プロジェクトマネジメント PMP AWS ビジネススキル Microsoft PMBOKⓇ 田中淳子 IT資格 人材育成 山下光洋 AMA Azure コミュニケーション 人材開発用語集 PMBOK®ガイド入門 クラウド ITスキル 新入社員 横山哲也 PMP試験問題に挑戦 re:Invent セキュリティ 人材育成応援ラジオ DX Cisco PMBOKⓇガイド 第6版 試験体験記 イベント・セミナー PMBOK®ガイド第6版の変更点 人材開発 CCIE CCNA テレワーク ネットワーク リモートワーク 研修 AI(人工知能) GCP PMP(R)試験問題 第6版対応 PMP合格体験記 Windows Server AWS_Q&A Active Directory IT人材 IT資格解説 アセスメント デジタルビジネス ヒューマンスキル リーダーシップ 人気コースランキング 大喜利 部下の育成 Conversations PMの心得 キャリア グローバル人材 新入社員研修といえば DX人材育成 IoT OJT reinvent2022 CCNP Security Windows PowerShell クリエイティビティ プログラミング リスキリング 人材トレンド 試験対策問題 PMP試験対策一問一答 コーチング プロジェクト プロトタイプビルダー 1on1 AWS_DiscoveryDay AWSトレーニングイベント GCP無料セミナー Google Cloud Google Cloud Platform G検定 ITインフラ oVice アワード クリティカルシンキング サンプル問題 ステークホルダー ダイバーシティ ディープラーニング ワーケーション 自律 試験Tips AI人材 Linux PMI Power Platform Python Teams Web会議 kintone アイデア