見守りカメラRingの録画データをS3に保管して家族にのみ配信する
Ringという見守りカメラを実家に設置している
設置のきっかけは祖父の介護。いつも無茶して立ち上がろうとして倒れたりしてて、そんなとき動き出した時点でRingから通知され駆けつけることができていたので便利だった
Ringの録画は家族との何気ない会話や、祖父含め大変だった介護に家族一丸で取り組んだ思い出を振り返ることができる、祖父が亡くなった今となっては貴重な映像になっている
Ringの録画データはクラウドに保存され、基本的には一定期間後に削除される
家族の要望もあり、録画データを保全し、いつでも見られる状態にしたいとなった
Ringの録画データをS3に置いて保全する
ブラウザで気合でダウンロードした
やろうと思えばseleniumとかでダウンロードを自動化できそうではある
気づいたときにはRing運用開始から2ヶ月が経ったことにより初期の録画から削除されつつあったんですが、削除されたのは2日分くらいで済んで、その後のデータは保全することができました
S3に置いた録画データを家族が見られるようにしたい
- 専用クライアントみたいなのはめんどいし、親は多分使いきれないはず
- ブラウザで見られるのがとりあえず良い
- 一応プライベートな映像なので、家族だけが見られて、インターネットの海には流れないようにする
AWSで配信アプリを作った
リポジトリ: https://github.com/kefi550/private_s3_media_distributor
- s3 + cloudfront署名付きURL でビデオ配信
- これについては前回のブログで書きました https://blog.kefiwild.com/posts/cloudfront_sign_url/
- apigateway + lambda でwebアプリ
- Lambda Powertools Pythonを使って最低限のルーティングだけを使ってみた
- Basic認証をベタッと書いていたが、APIGateway REST APIではレスポンスの
WWW-Authenticate
ヘッダが削除されるらしくBasic認証がいい感じに動かなかった。そのためHTTP APIを使うようにした - もともとaws-wsgi + APIGateway REST APIを使おうとしていたが、Basic認証が動かない問題により、aws-wsgiでなくlambda powertools + HTTP APIを使うことにした
- Basic認証をベタッと書いていたが、APIGateway REST APIではレスポンスの
- cdkでlambda等まで作った上で
sam local start-api -t cdk.out/<template>.json
でローカル開発環境にした- 小さいlambda + apigatewayアプリならこのスタイルでいい気がする
- Lambda Powertools Pythonを使って最低限のルーティングだけを使ってみた
認証はとりあえずのBasic認証
UIは最低限で、素朴なHTMLだけを返す
コンテンツ量は限定的なため、ページングとかもせず、愚直にS3をリストして画面に列挙する
ビデオにアクセスされたら毎回CloudFrontの署名URLを作って配信する
保全した録画をとりあえず家族にシェアできるようになってよかったです
今後の展望
- 今は機械的なファイル名が並んでいるだけなのでサムネを作って表示する
- 認証がお粗末ではあるのでcognitoなど使ってマシな認証にする
- お気に入りのような機能を付ける
- 録画データのRingからのダウンロードを自動化する (今も一応防犯用途的に使っているため)