giftee Tech Blog

ギフティの開発を支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信しています。

S3 と AWS Transfer Family でファイルサーバーを作った話

こんにちは!
ギフティの Contents Creation Division Product Unit 1 という部署でエンジニアをしている市橋です。

事業部について

本題に入る前に少しだけチームの紹介をさせてください。

私が所属している部署は、eギフトの生成・販売・管理を一貫して行える eGift System というサービスの開発をしています。 このサービスが提供する管理画面から、商品と販売サイトを作成することができ、eギフトの発行をすることができます。
eギフトのシステムを SaaS として提供をしているわけです。
そのため、実は社内では初めに申し上げた部署名ではなく、saas事業部 (サース) と呼ばれていたりします。

"e-gift.co"というワードで Google 検索 をしていただくと、実際の画面をご覧いただけるかと思います。
※上記検索結果以外に一部独自ドメインで提供しているページもあります。

個人的に、入社前から知っている企業も多いです。思い入れがある企業とeギフトというサービスを展開できていることをとても嬉しく思います。 希望すれば企業へ訪問する際に同行もさせてもらえるのですが、企業ごとの個性があるオフィス巡りが私の仕事の楽しみのひとつでもあります。

AWS Transfer Family

eGift System がeギフトの発行・管理を担っていることもあり、社内外問わず、他チームと比較的やり取りが多い部署です。 業務の中でファイル連携を行うことも多いのですが、これまでは社内ネットワークや外部サービスを使って運用をしていました。

先日、AWS のサービスである AWS Transfer Family のことを知り、 最近のアップデートによって、AWS にファイルサーバーを構築することが、要件を満たし、さらに今後も継続して活用していけそうだと判断し、環境構築を行いました。
今回はその話をします。
eGift System で使われている技術に関しては別の記事をご覧ください。

(参考: R&D から二次元コードリーダー消込を eGift System にリリースした話)

技術選定について

今回ファイルサーバーが必要な背景として、外部とファイルのシステム連携が必要という要件がありました。
ギフティでは要件・課題の把握の段階から、エンジニアが話に入り、解決策を協議することが多いです。例えば、先方に用意してもらえないか、既存のシステムを応用できないか、外部サービスを使えるか、などです。

AWS Transfer Family を使ったファイルサーバーは、今回の要件である SFTP プロトコルで通信ができます。
また、ファイルの保管が S3 になるため、バケットでファイル管理を柔軟に行うことができますし、なにより耐久性・セキュリティにおいて優れています。 今回のシステム連携以外の用途でも、社内外問わず活用していけると判断をして採用しました。

環境構築

ギフティでは、管理や保守などの理由からプロダクトごとに AWS アカウントを分けて運用しています。
参考: AWSアカウント管理をコード化する

今回も、専用の AWS アカウントを作成して、構築を行いました。
簡易的ではありますが、構築方法を紹介させていただきます。

※事前に、VPC, EIP, S3 バケット, S3 バケットへアクセス権限があるIAM を準備しています。

アーキテクチャ

コンソールから AWS Transfer Family のページを開きます。

添付画像を参考に進めます。

ユーザー追加を行います。

ユーザーごとに下記設定を行います。 - アクセスする S3 バケット - ホームディレクトリおよびアクセス可能ディレクトリ - 公開鍵

sftp でアクセスが出来ました!

また、上記に追加設定をすることで
※セキュリティグループで接続元 IP アドレスの制限の設定が可能です。
※ログ書き出し用の IAM Role を用意することで、バケット/ユーザーごとのアクセス・ファイル操作の履歴が確認できます。

おわりに

今回 AWS にファイルサーバーを構築してみました。
私自身、インフラの専門知識があるわけではありませんが、比較的簡単かつ短時間で構築できたように思います。

構築した環境は、当初の想定通り、複数案件で活用されており、今のところは大きな問題なく運用できています。
今後も、課題や要件を固有のものとせず、できるだけ汎用性と拡張性をもった解決策を考えて取り組んでいきたいと思います。