PAYMENTのテックブログです2019-11-18署名付きURLを使ってS3のファイルを取得するこんにちは。いうお話をしたいと思います。紹介のとおり、請求管理ロボはレガシーな背景のあるアプリをコンテナ化してECSで動かしています。基盤刷新するにあたってもろもろの改修をしたわけですが、当時スケジュールなどの制約もあって全箇所を対応することはできませんでした。対応しきれなかった箇所の1つとして、ユーザーがアップロードした画像ファイルの配信方法があります。アンチパターンの代表のような話ですが、もともとはアップロードした画像ファイルはアプリケーションサーバのファイルシステム上に置かれていました。基盤刷新の際にアプリケーションコンテナはステートレスになるよう改修を進めていましたが、先述のとおりスケジュール等の都合でどうしても間に合わず、配信方法まで完遂することはできませんでした。いうS3バケットを擬似的にマウントするツールを導入し場をしのぐことになりました。この構成で運用してきたのですが、これはS3本来の使い方ではないことや、まれにgoofysプロセスが落ちて接続障害が発生する等いろいろと問題がありました。そのため、この度あるべき姿を整理し署名付きURLを用いた配信方法に改修する運びとなりました。署名付きURLを使ってS3のファイルを取得する署名付きURLとはS3に置いてあるファイルを取得するにはそれ相応のアクセス権限が必要です。権限を持たない人に対してファイルを共有したい場合に、あらかじめアクセス権限を期限付きで付与したURLを発行することができます。認証付きURL、期限付きURLなどと呼ばれることもあるようです。期限内であればアクセス権限を持たない不特定多数のユーザーがこのURLを使ってファイルにアクセスできるようになります。署名付きURLは指定した期間内であれば誰でもアクセスできるものなので、機密情報を扱う際には注意が必要です。機密レベルを考慮し、適切な共有方法と有効期限を検討します。今回は特に問題ないと判断しました。コード実装S3と密結合にならないようにストレージレイヤを抽象化する実装を心がけます。環境変数で、ストレージにS3を使うかどうか、バケット名、署名付きURLの有効期限など環境固有の情報を扱うようにし、環境ごとに切り替えられるようにおきます。詳しく書いてあります。}}docs.aws.amazon.com大変だったこともともと影響範囲の洗い出しがボリューム的にネックになっていたので、対応漏れのないように注意して進めました。結果的に対応する必要があったのは全体に対して一部のファイルだけだったのですが、よくわからない状態からスタートするのは怖いものですね。気をつけたこと当初、署名付きURLを発行してからファイル取得されるまで大した時間はかからないだろうと想定し、有効期限はわりと短め(でも十分と思える)な期間に設定していました。多量の件数をシーケンシャルに処理するようなものがあり、処理のはじめのほうで発行した署名付きURLが実際にファイル取得される頃には期限が切れているということありました。・・・この事象は有効期限をさらに十分に伸ばすことにより解決しました。発行した認証付きURLがどういったタイミングで使われることになるのか、しっかり把握していないと思わぬ挙動になってしまうこともあるので気をつけたいですね。自作して管理する必要がなくなりました。これによって請求管理ロボはインスタンスに依存しない、よりコンテナベースなプロダクトに近づきました。利用するなどの選択も取れるようになり、よりシンプルでポータブルなシステムになりました。まとめ今回の取り組みで、基盤刷新の際に対応しきれなくて心残りだった部分を解消することができました。ECSインスタンスに手を加える必要がなくなったのはけっこう大きなポイントだと思っています。即座にユーザーへの変化はなくても、今後の請求管理ロボの発展における礎となったことでしょう。クラウドベンダーが用意した仕組みをうまく利用してよりよいシステムをつくっていきたいですね。今回は以上となります。最後までお付き合いいただきありがとうございました。インターン生の渡辺です。...2019-10-11スクラム開発を導入する〜その2〜こんにちは。請求管理ロボシステムPMの田本(@tamotamo97)で...2019-09-20スクラム開発を導入する〜その1〜こんにちは。請求管理ロボシステム基盤の概要2019-08-02テックブログはじめますこんにちは。Framework月別アーカイブはてなブログをはじめよう!trunkatreeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。