Slide 1

Slide 1 text

Amplifyでいろんな機能拡張を
 していったお話
 
 Amplify Boost Up #01
 ゲバラ
 1


Slide 2

Slide 2 text

自己紹介
 2
 高田 健太郎 ENGINEER あだ名:ゲバラ 中小ソフトハウスSE(5年)→POLのエンジニア(2019/6〜) 現在は、新規事業でいろんなプロダクトを模索中 技術領域:フロント、バック、インフラなど広く浅く

Slide 3

Slide 3 text

3
 約一年前にLabBase Nowをリリースしました
 学生によるイベント申込や管理者によるイベント管理


Slide 4

Slide 4 text

本日はこのLabBase Nowが
 どのような機能拡張していったかお話します
 4


Slide 5

Slide 5 text

この1年間で増えた機能
 ● 企業アカウント発行
 ● 学生個人情報の閲覧制限
 ● ファイル共有
 
 
 5


Slide 6

Slide 6 text

この1年間で増えた機能
 ● 企業アカウント発行
 ● 学生個人情報の閲覧制限
 ● ファイル共有
 
 6


Slide 7

Slide 7 text

企業アカウント発行-改善前業務フロー
 7
 LabBaseNow イベント管理画面 企業様宛参加学生リスト 企業ご担当者様 イベント管理者 CSVダウンロード メール送信

Slide 8

Slide 8 text

企業アカウント発行-改善前業務フロー
 8
 LabBaseNow イベント管理画面 企業様宛参加学生リスト 企業ご担当者様 イベント管理者 CSVダウンロード メール送信 メール送信の手間 セキュリティチェックの手間 など工数がかかったり 精神的にも負担

Slide 9

Slide 9 text

企業アカウント発行-改善後業務フロー
 9
 アカウント発行 (初回のみ) 企業ご担当者様 ログインして 参加学生リストが閲覧で きる LabBaseNow イベント管理画面 LabBaseNow 企業様向け管理画面

Slide 10

Slide 10 text

企業アカウント発行
 ● 認証周りはAmplifyのAuthentication
 ● Admin Queries API
 ○ Cognitoを操作するための管理者向けAPI
 ○ functionが自動生成される。楽々です。
 ○ アカウントの無効/有効化が可能
 ○ ユーザグループも登録。後ほど出てくるAPIの@auth用
 ○ ただアカウント作成ができない
 ● Amplify Librariesで別途サインアップ用のAPIを使う
 10


Slide 11

Slide 11 text

懺悔
 ● 管理者でアカウント発行するので、この際にパスワードを控えないとい けない
 ● 生成されるfunctionを修正すれば、管理者が操作するアカウント発行が できる
 
 
 11


Slide 12

Slide 12 text

この1年間で増えた機能
 ● 企業アカウント発行
 ● 学生個人情報の閲覧制限
 ● ファイル共有
 
 
 12


Slide 13

Slide 13 text

学生個人閲覧情報の制限-要件
 13
 ● 企業アカウントで学生の個人情報を閲覧できるようにするため、APIでア クセス制御できるようにしたい
 
 
 


Slide 14

Slide 14 text

APIと@auth
 ● 情報取得はAmplifyのAPI(GraphQL)
 ● @authで認可ルール指定できる
 ○ ownerを指定:対象レコードを操作できるユーザを制限
 ○ groupsを指定:対象レコードを操作できるユーザグループを制限
 ● 操作種類
 ○ create,read,update,delete
 
 14


Slide 15

Slide 15 text

スキーマ定義
 15
 イベント情報と学生の申込情報にそれぞれ認可ルールを設定
 


Slide 16

Slide 16 text

学生個人閲覧情報の制限-実装方法
 16
 ● ownerにCognitoのUserNameを設定
 ○ アカウント作成時にUserNameは取得
 ● groupsは管理者グループを設定
 ● イベント情報作成・更新時にownerをセット
 ● 学生の申し込みレコードに対してもownerをセットしてアクセス制御
 ○ すでに存在するレコードに対してもownerをセット


Slide 17

Slide 17 text

懺悔
 ● レコードごとにownerを設定するので大量に学生がいると更新に時間が かかってしまう。
 ○ @connectionしてたらイベントのowner設定だけで絞れるとかできて欲しい。(調 べたけどできなかった)
 ● この方法でマルチテナント方式にしだすとしぬ
 
 17


Slide 18

Slide 18 text

実際作った機能・要件
 ● 企業アカウント発行
 ● 学生個人情報の閲覧制限
 ● ファイル共有
 
 
 18


Slide 19

Slide 19 text

ファイル共有-要件
 19
 ● ファイル共有を管理者から各企業ごとにできるようにしたい
 ○ イベント運用のための資料やイベント後のアンケート結果の共有
 ● もちろんセキュアに管理したい
 ○ 共有したファイルは共有対象のアカウントのみアクセスできるようにしたい
 


Slide 20

Slide 20 text

Storage
 ● ファイル関連はAmplifyのStorage
 ● 認証済みユーザがファイルディレクトリにアクセスできる。
 ● ファイルの公開範囲
 ○ public:全員アクセス、操作可能
 ○ protected:全員アクセス可能、操作はアップロードしたユーザのみ
 ○ private:アップロードしたユーザのみアクセス、操作可能
 
 20


Slide 21

Slide 21 text

Storageのライブラリ
 これだと管理者から企業へのファイル共有ができない
 21
 上げるとしたらここだが private/{user_identity_id}/ の配下にしかあげられない user_identity_id はCognitoのフェ デレーティッドID


Slide 22

Slide 22 text

管理者から企業へのファイル共有
 ● 自前でS3を操作するためのfunctionを作成
 ○ CLIでfunction作成時にアクセス可能のリソースを指定。
 ○ functionそのものへのアクセスはAPIのスキーマ定義で設定。もちろん@authも OK
 ○ Pathにuser_identity_idが必要なので、ログイン時に保存するように。
 ○ 主な機能
 ■ 署名付きURLの発行。これでアップロードもダウンロードも
 ■ ファイル一覧
 ■ ファイル削除
 ● 企業アカウントからはStorageライブラリで操作
 22


Slide 23

Slide 23 text

1年間の感想
 ● 開発自体は非常に楽
 ○ 認証まわりは特に。
 ○ 拡張性も高い。
 ○ 困ったらfunctionで頑張る。
 
 
 
 23


Slide 24

Slide 24 text

最後に宣伝
 ● 弊社POLでは、Wantedlyで採用募集や、月1で公開雑談という名の勉強 会やってますので興味ありましたら是非!
 
 
 24


Slide 25

Slide 25 text

ご静聴ありがとうございました
 25