Slide 1

Slide 1 text

freeeの成長とAWS freee K.K. 松崎 啓治

Slide 2

Slide 2 text

お話しすること 何を話すか ● AWSベストプラクティスではなく、freeeの急成長とAWS利 用の足跡 ● これまでのインフラの試行錯誤

Slide 3

Slide 3 text

freeeの紹介 http://www.freee.co.jp

Slide 4

Slide 4 text

freeeの紹介 スモールビジネスに関わるみんなが 創造的な活動にフォーカスできるよう バックオフィス業務のテクノロジーによる自動化・クラウド化を推進 クラウド会計ソフト freee 給与計算ソフト freee を提供 2012 年 7 月創業 → 累計資金調達額 17 億円以上 従業員は 100 人超

Slide 5

Slide 5 text

サービス紹介 クラウド会計ソフト freee とは https://secure.freee.co.jp

Slide 6

Slide 6 text

サービス紹介 クラウド:中小企業・個人事業主のための       クラウド会計ソフト freee 簡単:  簿記の知識がなくても簡単に使える 自動:  銀行やカードの web 明細と同期し、   自動で会計帳簿を作成

Slide 7

Slide 7 text

自己紹介 氏名: 松崎 啓治 (まつざき けいじ) 2014年6月入社 Twitter: GitHub: 最近ボルダリングに ハマり始めています。 @xga @futoase

Slide 8

Slide 8 text

freeeの成長とAWS freeeの成長とAWS

Slide 9

Slide 9 text

freeeの成長とAWS

Slide 10

Slide 10 text

freeeの成長とAWS 創業から2年で 30万事業所が登録

Slide 11

Slide 11 text

freeeの成長とAWS アジェンダ ● 創業期 ● 1stリリース ● 第1次成長期 ● 第2次成長期 ● 現在 2012年10月〜 2013年3月〜 2013年10月〜 2014年5月〜 2015年〜

Slide 12

Slide 12 text

freeeの成長とAWS 創業期 (βリリース) 2012年10月〜

Slide 13

Slide 13 text

freeeの成長とAWS メンバー 10名 メンバー 5名

Slide 14

Slide 14 text

freeeの成長

Slide 15

Slide 15 text

創業期 2012年10月〜 2012年10月〜サービス開発時 さくらVPS 銀行 銀行 銀行 ※銀行データ同期 お客様

Slide 16

Slide 16 text

創業期 2012年10月〜 2012年10月〜サービス開発時 さくらVPS 銀行 銀行 銀行 ※銀行データ同期 お客様 ● 2012年サービス開発時の構成はHerokuさん中心だった ● DBすら、Herokuさんで構成していた ● 銀行データ同期サービスはさくらVPSさん上で動かしていた ● 各サービス間でのアクセス制御はできていない状態だった

Slide 17

Slide 17 text

創業期 2012年10月〜 2012年12月〜 初期構成から2ヶ月後 銀行 銀行 銀行 ※銀行データ同期 over SSL over SSL お客様 AWS 化

Slide 18

Slide 18 text

創業期 2012年10月〜 2012年12月〜 初期構成から2ヶ月後 銀行 銀行 銀行 ※銀行データ同期 over SSL over SSL お客様 AWS 化 ● 銀行データ同期サービスをAWS EC2上に移行しました ● Herokuさんで稼働していたDBをRDS上に移行(ただしEC2) ● Heroku <-> EC2 <-> RDS 間でのアクセス制御が可能になった ● Heroku <-> AWS(Tokyoリージョン)間のレイテンシが気になるように

Slide 19

Slide 19 text

創業期 2012年10月〜 2013年1月〜 AWSを中心に構成し直す 銀行 銀行 銀行 ※銀行データ同期 Web App over SSL ※同期処理を非同期 化 deploy deploy お客様 AWS 化

Slide 20

Slide 20 text

創業期 2012年10月〜 2013年1月〜 AWSを中心に構成し直す 銀行 銀行 銀行 ※銀行データ同期 Web App over SSL ※同期処理を非同期 化 deploy deploy お客様 AWS 化 ● AWSを中心としたサーバ構成に乗り換えを終えた ● jenkinsを利用したデプロイフローの自動化を行った ● Amazon SQS を利用し、非同期的にデータ同期処理を行えるように ● ログ集約をしなければいけないという新たな課題が上がった

Slide 21

Slide 21 text

1stリリース 2013年3月〜 クラウド会計ソフト freee 1stリリース 2013年3月〜

Slide 22

Slide 22 text

1stリリース 2013年3月〜 メンバー 10名

Slide 23

Slide 23 text

1stリリース 2013年3月〜

Slide 24

Slide 24 text

1stリリース 2013年3月〜 サーバー台数

Slide 25

Slide 25 text

1stリリース 2013年3月〜 2013年3月〜 サービス正式リリース 銀行 Web App Redis Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPC

Slide 26

Slide 26 text

1stリリース 2013年3月〜 2013年3月〜 サービス正式リリース 銀行 Web App Redis Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPC ● CloudPackさんのお陰でVPC内にサービスを移行することができた ● サービスリリース2週間前にVPC移行を決めたが成功した ● VPC内でサービス構築行うことでセキュリティ面の不安点を払拭 ● 銀行同期サービスとWebApplicationを分離することで侵入リスク考慮

Slide 27

Slide 27 text

1stリリース 2013年3月〜 しばらくfreeeのアプリケーション側の み、成長が続く

Slide 28

Slide 28 text

1stリリース 2013年3月〜 しばらくfreeeのアプリケーション側の み、成長が続く ● 請求書リリース ● 申告書対応が不足していたため開発を進める ● 有料サービス開始 ● freee本出版

Slide 29

Slide 29 text

1stリリース 2013年3月〜 インフラエンジニア 0名

Slide 30

Slide 30 text

第1次成長期 2013年10月〜 freee 第1次成長期 2013年10月〜

Slide 31

Slide 31 text

第1次成長期 2013年10月〜 メンバー 28名

Slide 32

Slide 32 text

第1次成長期 2013年10月〜

Slide 33

Slide 33 text

第1次成長期 2013年10月〜 サーバー台数

Slide 34

Slide 34 text

第1次成長期 2013年10月〜 freeeにインフラエンジニアが入社!

Slide 35

Slide 35 text

第1次成長期 2013年10月〜 2013年10月 インフラエンジニア加入 銀行 Web App Redis Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPN

Slide 36

Slide 36 text

第1次成長期 2013年10月〜 2013年10月 インフラエンジニア加入 銀行 Web App Redis Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPN ● VPN接続が可能になった!

Slide 37

Slide 37 text

第1次成長期 2013年10月〜 2013年10月 インフラエンジニア加入 銀行 Web App Redis Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPN

Slide 38

Slide 38 text

第1次成長期 2013年10月〜 2013年10月 インフラエンジニア加入 銀行 Web App Redis Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPN ● Nagios -> Zabbix への変更によりサーバメトリクスの蓄積が可能に

Slide 39

Slide 39 text

第1次成長期 2013年10月〜 2013年10月 インフラエンジニア加入 銀行 Web App Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPN ElastiCache

Slide 40

Slide 40 text

第1次成長期 2013年10月〜 2013年10月 インフラエンジニア加入 銀行 Web App Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPN ● EC2上で運用していたRedisインスタンスをElastiCacheに移行 ● JobWorkerのスケールアウトがElastiCache移行により可能に

Slide 41

Slide 41 text

第1次成長期 2013年10月〜 2013年10月 インフラエンジニア加入 銀行 Web App Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPN

Slide 42

Slide 42 text

第1次成長期 2013年10月〜 2013年10月 インフラエンジニア加入 銀行 Web App Job Worker NAT 銀行同期 developer お客様 踏み台 データ暗号化 VPN ● ログデータ解析のための基盤としてElasticSearchとKibanaを導入 ● エンジニアによるアプリケーションログの確認が容易に

Slide 43

Slide 43 text

第1次成長期 2013年10月〜 モバイル向け クラウド会計ソフト freeeアプリ リリース

Slide 44

Slide 44 text

第1次成長期 2013年10月〜

Slide 45

Slide 45 text

第1次成長期 2013年10月〜 2014年2月 モバイルアプリリリース 銀行 Web App Job Worker NAT 銀行同期 developer 踏み台 データ暗号化 VPN api iOS お客様 出先から

Slide 46

Slide 46 text

第1次成長期 2013年10月〜 2014年2月 モバイルアプリリリース 銀行 Web App Job Worker NAT 銀行同期 developer 踏み台 データ暗号化 VPN api iOS お客様 出先から ● モバイルアプリ向けのapi用インスタンスを用意 ● APIを経由し、iOSアプリ側から会計情報を更新/取得 ● モバイルアプリリリースによりお客様が出先でののデータ閲覧が可能に

Slide 47

Slide 47 text

第1次成長期 2013年10月〜 クラウド会計 freeeアプリ 初めての確定申告 2014年3月

Slide 48

Slide 48 text

第1次成長期 2013年10月〜 サポートチケット数 アクティブユーザー数

Slide 49

Slide 49 text

第1次成長期 2013年10月〜 モバイル向け クラウド会計 freeeアプリ for Android リリース

Slide 50

Slide 50 text

第1次成長期 2013年10月〜 2014年4月 Androidアプリリリース 銀行 Web App Job Worker NAT 銀行同期 developer 踏み台 データ暗号化 VPN api お客様 出先から iOS Android

Slide 51

Slide 51 text

第1次成長期 2013年10月〜 2014年4月 Androidアプリリリース 銀行 Web App Job Worker NAT 銀行同期 developer 踏み台 データ暗号化 VPN api お客様 出先から iOS Android ● Androidアプリをリリースした際、iOSアプリのインフラ基盤を流用 ● インフラ基盤を流用したことにより迅速なリリースが可能になった

Slide 52

Slide 52 text

第1次成長期 2013年10月〜 サービス運用上の失敗

Slide 53

Slide 53 text

第1次成長期 2013年10月〜 サービス運用上の失敗 Drop DB 事件 (初期のお話!) 確定申告期を終え、一息ついたころ ...

Slide 54

Slide 54 text

第1次成長期 2013年10月〜 サービス運用上の失敗 Drop DB 事件 (初期のお話!) → 開発環境のDBを消すスクリプトが合った → chef cookbookを適用したら対象が productionになった → スクリプトがcronで定期実行 → Drop DBがproduction RDS で実行

Slide 55

Slide 55 text

第1次成長期 2013年10月〜 サービス運用上の失敗 Drop DB 事件 (初期のお話!) → 即座にサービスをメンテナンス状態に → 復旧のためRestore To Point In Timeにより削除前の時間を指定し復旧 → Restore To Point In Timeによる復元により、サービスの復帰

Slide 56

Slide 56 text

第1次成長期 2013年10月〜 サービス運用上の失敗からの対策 Drop DB 事件 (初期のお話!) → 結論 RDSは素晴らしい → 対策として、Drop DBができる権限のユーザは使わない → 現在はアプリごとに接続ユーザを分けたりしている (GRANTによる制限)

Slide 57

Slide 57 text

第1次成長期 2013年10月〜 サービス運用上の失敗からの対策 Drop DB 事件 (初期のお話!) → 結論 RDSは素晴らしい → 対策として、Drop DBができる権限のユーザは使わない → 現在はアプリごとに接続ユーザを分けたりしている (GRANTによる制限) ● DROP, DELETEが行えるユーザを絞る、そのためのユーザを作成する ● 初めてRestore To Point In Timeを使った復旧を実施 ● 稼働中の運用・バックアップを含めたサービスであるRDSは素晴らしい

Slide 58

Slide 58 text

第2次成長期 2014年5月〜 freee 第2次成長期 2014年5月〜

Slide 59

Slide 59 text

第2次成長期 2014年5月〜 メンバー 50名

Slide 60

Slide 60 text

第2次成長期 2014年5月〜

Slide 61

Slide 61 text

第2次成長期 2014年5月〜 サーバー台数

Slide 62

Slide 62 text

第2次成長期 2014年5月〜 クラウド給与計算ソフト freee リリース https://p.secure.freee.co.jp

Slide 63

Slide 63 text

第2次成長期 2014年5月〜 入力・出力が面倒な給与明細、 年末調整の機能を自動化、 勤怠管理機能など。

Slide 64

Slide 64 text

第2次成長期 2014年5月〜 2014年5月 クラウド給与freeeリリース 銀行 クラウド会計 freee Job Worker NAT 銀行同期 developer 踏み台 データ暗号化 VPN api お客様 出先から iOS Android クラウド給与 freee

Slide 65

Slide 65 text

第2次成長期 2014年5月〜 2014年5月 クラウド給与freeeリリース 銀行 クラウド会計 freee Job Worker NAT 銀行同期 developer 踏み台 データ暗号化 VPN api お客様 出先から iOS Android クラウド給与 freee ● 2015年5月にクラウド給与ソフト freee リリース ● クラウド会計ソフト freee と同一VPC内で別サービスとしてリリース

Slide 66

Slide 66 text

第2次成長期 2014年5月〜 サービスを2つ抱えることによる 1つの問題点

Slide 67

Slide 67 text

第2次成長期 2014年5月〜 お客様を認証するための 機構を統一する必要が出た

Slide 68

Slide 68 text

第2次成長期 2014年5月〜 お客様を認証するための 機構を統一する必要が出た ● 今までクラウド会計ソフトfreeeのみだったが2つのサービスを抱える ● 2つのサービス間にて同一の認証機構が必要になる ● 認証機構が2つのサービスで異なるとサービス間連携がしづらい

Slide 69

Slide 69 text

第2次成長期 2014年5月〜 freee 共通認証基盤リリース

Slide 70

Slide 70 text

第2次成長期 2014年5月〜 2014年5月 共通認証基盤リリース 銀行 クラウド会計 freee Job Worker NAT 銀行同期 developer データ暗号化 VPN api お客様 出先から iOS Android クラウド給与 freee 共通認証基盤

Slide 71

Slide 71 text

第2次成長期 2014年5月〜 2014年5月 共通認証基盤リリース 銀行 クラウド会計 freee Job Worker NAT 銀行同期 developer データ暗号化 VPN api お客様 出先から iOS Android クラウド給与 freee 共通認証基盤 ● 共通認証基盤サービスを内部サービスとして提供 ● 2つのサービス間でのアカウント連携が可能に ● 共通認証基盤用gemパッケージを利用し、通信のことを考えずに実装可能

Slide 72

Slide 72 text

第2次成長期 2014年5月〜 サービス運用上の失敗

Slide 73

Slide 73 text

第2次成長期 2014年5月〜 サービス運用上の失敗 Security Groupの 弱点ご存知ですか?

Slide 74

Slide 74 text

第2次成長期 2014年5月〜 サービス運用上の失敗 Security Group 100いっちゃった事件

Slide 75

Slide 75 text

第2次成長期 2014年5月〜 サービス運用上の失敗 Security Group 100いっちゃった事件 ● 1つのVPC内でProduction, Stagingの運用をしていた ● サービスが成長するが、VPC分割、設計見直しを考えていなかった ● Security Groupのホワイトリスト形式での厳しい切り分けを行っていた ● 100に達するまで、VPC内でのSecurity Group上限を意識していなかった

Slide 76

Slide 76 text

第2次成長期 2014年5月〜 サービス運用上の失敗を改善する Security Group 100いっちゃった事件 ● ACL, VPC, ネットワークセグメントの再設計中 ● Security Groupを極力減らす運用ができないか設計中 ● 次の確定申告時期までタイムリミットが決まってるので切実

Slide 77

Slide 77 text

第2次成長期 2014年5月〜 サービス運用上の失敗談

Slide 78

Slide 78 text

第2次成長期 2014年5月〜 サービス運用上の失敗談 index貼り忘れでサービスダウン寸前

Slide 79

Slide 79 text

第2次成長期 2014年5月〜 サービス運用上の失敗談 index貼り忘れでサービスダウン寸前 → innotopで詰まっているクエリを特定 → 原因最初わからず超焦った → 結論 index貼り忘れ

Slide 80

Slide 80 text

第2次成長期 2014年5月〜 サービス運用上の失敗談

Slide 81

Slide 81 text

第2次成長期 2014年5月〜 サービス運用上の失敗談 index貼り忘れでサービスダウン寸前 → innotopで詰まっているクエリを特定 → 原因最初わからず超焦った ● index貼り忘れあるある話 ● 最初アプリの問題かと思って自身でアプリのコード見なおしたり ● index貼り直したら問題なかった

Slide 82

Slide 82 text

これから 2015年4月〜 これから

Slide 83

Slide 83 text

これから 2015年4月〜 メンバー 100名

Slide 84

Slide 84 text

これから 2015年4月〜

Slide 85

Slide 85 text

これから 2015年4月〜 紙を無くす

Slide 86

Slide 86 text

これから 2015年4月〜 開発面として

Slide 87

Slide 87 text

これから 2015年4月〜 ● masterしかDBがないのでスケールどうするか ● サービスを細かくわけないとメンテナンスが追いつかない ● サーバ台数が増えすぎている ● ACL, VPCの再設計 ● レイテンシの改善 ● MySQL 5.6へのアップデート ● 課題がもろもろ

Slide 88

Slide 88 text

freeeのサーバ構成の移り変わり まとめ ● サービス運用は予測できないことだらけ ○ 3年先を予測して設計してもうまくいかない ○ 都度柔軟にインフラは設計変更していくしかない ● うまい具合にAWSの新サービスがリリースされて利用できた ● 少人数でサービスをリリースし急成長させることができた ○ AWS側でインフラコストを任せることができたから

Slide 89

Slide 89 text

でも人は必要ですよね? 少人数で運用可能といっても サービスの成長と共に インフラチームの規模も拡大中

Slide 90

Slide 90 text

でも人は必要ですよね? インフラエンジニア募集!!!!! https://www.wantedly.com/projects/11928

Slide 91

Slide 91 text

番外編 ここから番外編

Slide 92

Slide 92 text

解析基盤の改善 解析基盤の改善

Slide 93

Slide 93 text

解析基盤の改善 解析基盤の改善 (初期) Web App 銀行同期 Job Worker Map Reduce insight developer marketing... ダッシュボードを閲覧

Slide 94

Slide 94 text

解析基盤の改善 解析基盤の改善 (現在) Web App 銀行同期 Job Worker insight ダッシュボードを閲覧 アプリケーションログ調査

Slide 95

Slide 95 text

作業のコード化 作業のコード化

Slide 96

Slide 96 text

作業のコード化 例えばこういう秘伝のタレ... seq -w 20 | xargs -P8 -n1 -INN ssh svr-NN "touch /var/stop.txt; while ps auxw | grep -Po \s+process\s+; do sleep 1; printf .; done; rm -fv /var/stop.txt"

Slide 97

Slide 97 text

作業のコード化 秘伝のタレを抑えるために使っているもの ● capistrano ● chef ● ansible ● serverspec ● fabric

Slide 98

Slide 98 text

freeeの成長とAWS ありがとうございます!