00:02
こんにちは。今日も夜帰りながら歩いて撮っています。さっき、ご機嫌な人になりたいというか、ご機嫌だといいよねという話を聞いていて、
最近、自分がご機嫌になれてるかちょっと不安になりました。もっと安定してご機嫌にやっていかなければいけないというか、
ご機嫌なつもりなんですけど、自分もご機嫌になりたいなと思いました。
今日も、ウォークブログの話をします。
今日は、画像の投稿の話をします。
gawkで作ってるウォークブログというアプリケーションでは、画像の投稿もサポートしています。
どんなふうに使うかというと、記事の投稿画面とか編集画面で画像をドラッグ&ドロップしたり、あとはボタンを押してファイルを選択したりすると、
記事の中にマークダウン記法で画像の埋め込みのイメージタグにあたるマークダウン記法が追記されて、アップロードされているので、その記事を公開すると、
記事の中に画像が埋め込まれるというふうになっています。
これをどう実現しているかというと、APIのエンドポイントを一つ増やしています。
それと、Amazon S3の署名付きアップロードというのを使っています。
実は画像アップロードといっても、gawkのウェブアプリケーションでは、画像のファイルを直接受け付けてはいません。
画像というのはバイナリ形式のファイルですから、そのまま使うのは結構扱いづらい。
テキストが得意なgawkにとってバイナリというのは結構扱いづらいものなんですね。
アップロードされたファイルをどこに置くかといっても、結局現代のウェブアプリケーションというのはオブジェクトストレージを使ってファイルを管理するということになるんじゃないかなというふうに思います。
なので、直接S3にあげてもらったほうがいいんじゃないかということで、署名付きアップロードを使っています。
署名付きアップロードというのはどういう機能かというと、事前にAWSのクライアントIDとクライアントシークレットみたいなものがありますけど、
03:02
シークレットとアップロードの許可するメタデータみたいなものを組み合わせて、それを決められた手順で圧縮化しておくということをやる仕組みになります。
例えば、アップロードするファイルのパスというかオブジェクトストレージのキーだったりとか、ファイルサイズだったりとか、あとはその署名が有効な時間とかですかね。
例えば、無期限に有効にしてしまうとまずいので、5分だけそのURLを使いますとか。
そういう情報を元にして、そういった情報と、あとはS3側と我々しか知らない秘密の値ということで、クライアントシークレットを使って、
そのメタデータをベースロッキングにしたものと、加えてそれを秘密の値とともに圧縮化したものというのを組み合わせて、これをブラウザーとかクライアントに返してあげると。
そうすると、その値というのは、秘密の値を知っている人しか作れないものなんで、実質的にそれが署名になって、それを使ってWebブラウザから直接ファイルをS3に送り付けても、ファイルのアップロードができると、そういうような仕組みになってます。
S3側でCRSの設定を確かしなきゃいけないと思うんですけど、それをしておけば、Webサーバーは一切ファイルに感知せずに、S3側にファイルをアップロードして、それはクラウドフォンロードから配信されてみたいなことが実現できるというわけです。
ジオークではハッシュを取るみたいなのは結構難しいので、これはOpenSSLのコマンドをシェルで呼んで、ハッシュを取って実装しています。
ハッシュを取る手順っていうのは決められたものなので、AWSのSDKみたいなのなくても、OpenSSLのコマンドさえあれば自分で計算できるので、そういうのを実装しているというわけです。
今日はこの辺にします。