フィードフォースと aws と私

132
弊社・フィードフォースとA WSと私 いのうえ(@a_know

Upload: a-know

Post on 22-Jul-2015

1.413 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: フィードフォースと AWS と私

弊社・フィードフォースとAWSと私

いのうえ(@a_know )

Page 2: フィードフォースと AWS と私

...で、誰?

Page 3: フィードフォースと AWS と私

自己紹介4 いのうえ(@a_know)大都会岡山出身4 株式会社フィードフォース4 Webアプリケーションエンジニア4 新人教育 / リーダー業務

4 COBOL → Java → Ruby

4 前職は GCP(GAE)エンジニア4 スクラム開発

Page 4: フィードフォースと AWS と私
Page 5: フィードフォースと AWS と私
Page 6: フィードフォースと AWS と私

...(つд⊂)ゴシゴシ

Page 7: フィードフォースと AWS と私

(;゚д゚)... "vs" ...

Page 8: フィードフォースと AWS と私
Page 9: フィードフォースと AWS と私
Page 10: フィードフォースと AWS と私

 

Page 11: フィードフォースと AWS と私

... I Love GAE!!

Page 12: フィードフォースと AWS と私

!

Page 13: フィードフォースと AWS と私

ブログもやってます

Page 14: フィードフォースと AWS と私

代表的なエントリ(ぼく)4 「Google Compute Engine 入門」を読んで、AWS と GCP の違いをまとめてみた

Page 15: フィードフォースと AWS と私

代表的なエントリ(ぼく)4 gcp ja night #28 に参加してきたので色々まとめるよ

Page 16: フィードフォースと AWS と私

代表的なエントリ(ぼく)4 "Google App Engine for Java実践ガイド" を Go で書く!

Page 17: フィードフォースと AWS と私

!

Page 18: フィードフォースと AWS と私

株式会社フィードフォース

Page 19: フィードフォースと AWS と私

...で、どこ?

Page 20: フィードフォースと AWS と私

弊社紹介・株式会社フィードフォース4 文京区春日

Page 21: フィードフォースと AWS と私

弊社紹介・株式会社フィードフォース4 BtoB な自社サービスを開発(Ruby / Rails / AWS)

4 GitHub / heroku / Circle CI / slack

Page 22: フィードフォースと AWS と私
Page 23: フィードフォースと AWS と私

技術ブログやってますtech.feedforce. jp

Page 24: フィードフォースと AWS と私

代表的なエントリ(へいしゃ)4 CircleCI + DockerでサーバCI始めました

Page 25: フィードフォースと AWS と私

代表的なエントリ(へいしゃ)4 このブログはGitHub Pages+CircleCIで運用しています

Page 26: フィードフォースと AWS と私

代表的な エントリ(へいしゃ)4 「LEGO(R)ではじめるスクラム入門」に参加してきました

Page 27: フィードフォースと AWS と私

!

Page 28: フィードフォースと AWS と私

では本題

Page 29: フィードフォースと AWS と私

今日はどんなおはなしをするか

Page 30: フィードフォースと AWS と私

今日はどんなおはなしをするか4 AWS について4 ぼくはアプリケーションエンジニア4 なので、お仕事でやったことがあることメイン !

4 AWS は基本会社でしか触っていない(貧者) ! !

4 ので、「弊社と AWS」的なお話しになります ! ! !

Page 31: フィードフォースと AWS と私

AWS

Page 32: フィードフォースと AWS と私

基本情報4 Amazon Web Services

4 アカウント登録して Go!

Page 33: フィードフォースと AWS と私

基本情報4 Amazon Web Services

4 アカウント登録して Go!

Page 34: フィードフォースと AWS と私

基本情報4 Amazon Web Services

4 アカウント登録して Go!

4 一番小さいサーバインスタンス 1年間相当が無料

Page 35: フィードフォースと AWS と私

基本情報4 11リージョン

Page 36: フィードフォースと AWS と私

基本情報4 11リージョン4 特定のリージョンでしか使えないサービスも

4 リージョン毎に Availability Zone

4 物理的に異なるデータセンター

Page 37: フィードフォースと AWS と私

基本情報4 AWS のアカウント ≒ GCP のプロジェクト4 ひとつの AWS アカウント内で複数プロジェクトを回すのはつらそう

4 プロダクト毎に AWS アカウントを作成

Page 38: フィードフォースと AWS と私
Page 39: フィードフォースと AWS と私

弊社と AWS

Page 40: フィードフォースと AWS と私

弊社と AWS4 弊社での利用開始は2009年1月4 当時ローンチしたサービス「えもにゅ」のため

Page 41: フィードフォースと AWS と私

弊社と AWS4 ローンチまでにサーバ買って、ラックに設置して...

4 遅い4 将来的な負荷増大もある程度見込んだ性能を...

4 高い4 クラウド利用のメリット > 従来までの手法のメリット4 クラウド ≒ AWS 、だった当時

Page 42: フィードフォースと AWS と私

弊社と AWS4 3年後、別プロダクトで本格利用

4 DBサービスやロードバランサ等、サービスが出揃ってきた

Page 43: フィードフォースと AWS と私

それ以降、数々の要求にAWS は応え続けて来てくれた

Page 44: フィードフォースと AWS と私

求められていたこと①

Page 45: フィードフォースと AWS と私

求められていたこと①4 プロダクトを稼働させるサーバー4 従来までのスタイル故の "つらみ" からの脱却4 迫り来る保証期限4 not disposable

4 配線やラッキングなどの職人芸4 選ばれし者のみ触れられる聖域

4 プライベートネットワークが構成できること

Page 46: フィードフォースと AWS と私

EC2

Page 47: フィードフォースと AWS と私

EC24 Amazon Elastic Compute Cloud

4 仮想サーバ4 GCP でいうと Google Compute Engine

4 従量課金、課金単位時間は 1h

4 reserved / spot instance

4 弊社サービスは基本 EC2 上で

Page 48: フィードフォースと AWS と私

EC24 AWS Marketplace でイメージ(AMI)を subscribe して使う

Page 49: フィードフォースと AWS と私

EC24 AWS Marketplace でイメージ(AMI)を subscribe して使う4 "Market" だけど、無料のものもここに登録されている4 自作のイメージを使うのにも Marketplace への登録が必要

Page 50: フィードフォースと AWS と私

EC24 スペックよりどりみどり4 汎用:t2, m3, ...

4 CPU特化:C3, C4, ...

4 メモリ特化:R3, ...

4 それぞれに small / medium / large ...

4 t2 シリーズには "バースト" が

Page 51: フィードフォースと AWS と私

EC24 ! が起動からセットアップをする場合4 Webコンソールからポチポチ...でも立てられる、けど4 gem aws-sdk & rake task で API 操作を自動化4 起動・停止・ステータス取得... etc.

$ rake ec2:create:product$ rake ec2:status:product

Page 52: フィードフォースと AWS と私

EC24 Chef-solo で構成管理 & インフラCI

4 CI からテスト用の EC2 インスタンスを立ててた時期も

Page 53: フィードフォースと AWS と私
Page 54: フィードフォースと AWS と私

EC24 ! が最初にサーバ構築するときは...

$ knife solo bootstrap product$ rake spec:product

Page 55: フィードフォースと AWS と私

EC24 ! が構成を変更・追加するときには TDD で!(edit serverspec)

$ rake spec:vm

(spec failed & edit recipe & cook)

$ rake spec:vm

(spec ok!)

Page 56: フィードフォースと AWS と私

ちなみに

Page 57: フィードフォースと AWS と私
Page 58: フィードフォースと AWS と私

EC2(VPC)4 何もせずに EC2 インスタンスを立てると、 default-VPC に属した状態になる

4 Amazon Virtual Private Cloud

4 仮想ネットワーク4 ネットワーク内でサブネットや ACL の設定が可能

4 異なる AZ をまたいでの設定も可能

Page 59: フィードフォースと AWS と私

EC24 その他一般。4 Security Group でアクセス制限

Page 60: フィードフォースと AWS と私

EC24 その他一般。4 Elastic IPs で簡単にグローバル IP アドレス付与4 1アカウントで設定できる IP の数には限りがある

4 ELB でロードバランス

Page 61: フィードフォースと AWS と私

求められていたこと②

Page 62: フィードフォースと AWS と私

求められていたこと②4 立てたサーバからアクセスできる DB サーバが必要4 従来までのスタイル(ry

Page 63: フィードフォースと AWS と私

RDS

Page 64: フィードフォースと AWS と私

RDS4 Amazon Relational Database Service

4 GCP でいう Google Cloud SQL

4 Multi AZ は便利だなー4 "Amazon RDS のマルチ AZ 配置では、異なるアベイラビリティーゾーンに同期スタンバイレプリカが自動的にプロビジョニングされて維持されます。"

4 Automatic Failover

Page 65: フィードフォースと AWS と私
Page 66: フィードフォースと AWS と私
Page 67: フィードフォースと AWS と私
Page 68: フィードフォースと AWS と私
Page 69: フィードフォースと AWS と私

RDS4 Multi AZ は 1オプションで設定可能4 mandatory maintenance にも

Page 70: フィードフォースと AWS と私

求められていたこと③

Page 71: フィードフォースと AWS と私

求められていたこと③4 巨大なファイルをカジュアルに置いておく場所が欲しい4 空きディスクサイズにビクビクしたくない

4 http でアクセスできるようにして欲しい

Page 72: フィードフォースと AWS と私

S3

Page 73: フィードフォースと AWS と私

S34 Amazon Simple Storage Service

4 GCP でいう Google Cloud Storage

4 99.999999999 %の耐久性4 99.99 %の可用性

Page 74: フィードフォースと AWS と私
Page 75: フィードフォースと AWS と私

S34 ただのファイル置き場...じゃない!4 permission

4 logging

4 Cross-Region Replication

4 ...

Page 76: フィードフォースと AWS と私

S34 static resources hosting

Page 77: フィードフォースと AWS と私

求められていたこと④

Page 78: フィードフォースと AWS と私

求められていたこと④4 巨大なファイルを日次で解析してほしい4 ファイルによって異なる解析をする必要がある4 複雑な解析方法に対しても柔軟に対応してほしい

4 「そのためのサーバ」をまた別途構築しなきゃいけない...よね?(だから時間が掛かるよね?)

Page 79: フィードフォースと AWS と私

EMR

Page 80: フィードフォースと AWS と私

EMR4 Amazon Elastic MapReduce

4 Hadoop(MapReduce) を手軽に扱うためのサービス4 EC2 インスタンスを指定された数だけ起動4 各インスタンスで bootstrap action 実行4 EMR クラスタを構成4 これらを自動でやってくれる

Page 81: フィードフォースと AWS と私
Page 82: フィードフォースと AWS と私

EMR

4 EMR クラスタ4 マスター:全体の構成管理4 コア:データを読み込みつつデータ処理4 タスク:データ処理のためにリソースを提供(無くても良い)

Page 83: フィードフォースと AWS と私

Hadoop MapReduce ?4 Map → Shuffle → Reduce

4 Map : データを分割4 Shuffle : 分割されたデータを配分4 Reduce : 配分されたデータに対して処理を実施4 Hadoop を使うなら Map と Reduce のところだけ考えれば良い

Page 84: フィードフォースと AWS と私

Hadoop streaming4 Mapper / Reducer だけ作れば良い4 標準入力を受けられる・標準出力できさえすれば、どんな言語で書いても ok !

Page 85: フィードフォースと AWS と私

Hadoop streaming4 Map : データ(標準入力)をもとに "key <tab> value" の形式で標準出力すれば ok

4 Reduce : "key <tab> value" の形式で標準入力されるデータに対して行いたい処理をし、その結果を標準出力すれば ok

Page 86: フィードフォースと AWS と私

How to use EMR4 Web コンソールからの起動も行えるみたいだけど、もっぱら gem 経由(例はコマンドラインツール)

$ elastic-mapreduce --create --alive --name "Test Cluster" \ --instance-group master \ --instance-type m1.small --instance-count 1 \ --instance-group core \ --instance-type m1.small --instance-count 2 \ --bootstrap-action \ s3n://a-know-s3/bootstrap-actions/install.sh

Page 87: フィードフォースと AWS と私

How to use EMR$ elastic-mapreduce --stream --step-name "Test Streaming" \ --input s3n://a-know-s3/input/development.log \ --output s3n://a-know-s3/output/streaming_out \ --mapper 'ruby s3n://a-know-s3/mapper/log_mapper.rb' \ --reducer 'ruby s3n://a-know-s3/mapper/log_reducer.rb' \ --jobflow xxxxx

Page 88: フィードフォースと AWS と私

How to use EMR4 これで起動するだけで、4 指定した数だけ EC2 インスタンスが立ち上がり4 自動で Bootstrap(含 Hadoop)、クラスタ管理されて4 Mapper / Reducer として指定したスクリプトも各インスタンスに配置されて

4 指定した入力ファイルを mapper の標準入力に渡し4 (つづく)

Page 89: フィードフォースと AWS と私

How to use EMR4 (つづき)4 Mapper の標準出力はそのまま Reducer の入力となり、reduce 処理も行われる

4 Reducer の結果は output で指定した場所に出力4 処理が全て終われば、インスタンスは全て自動で

terminate される

Page 90: フィードフォースと AWS と私

EMR4 「Mapper / Reducer をどう書くか?」だけに集中できるような EMR 基盤の仕組みを用意

4 ...が、最近 Google BigQuery の production 利用が開始4 EMR に取って変わるかも?

Page 91: フィードフォースと AWS と私

求められていたこと⑤

Page 92: フィードフォースと AWS と私

求められていたこと⑤4 自社のサービスを安定的に提供し続けていきたい4 サーバに異常があったときはすぐに知りたい

4 サーバのスペック変更などが必要なタイミングを前もって把握しておきたい4 サーバの状態の推移・傾向を知りたい

Page 93: フィードフォースと AWS と私

Cloud Watch

Page 94: フィードフォースと AWS と私

Cloud Watch4 監視&モニタリングを簡単に実現

Page 95: フィードフォースと AWS と私
Page 96: フィードフォースと AWS と私
Page 97: フィードフォースと AWS と私
Page 98: フィードフォースと AWS と私

Cloud Watch4 監視設定可能な項目4 CPU 使用率4 ディスクの Read / Write 量4 NW 通信量4 ステータスチェック4 CPU credit(t2)4 課金額(Estimated Charge with CloudWatch)

Page 99: フィードフォースと AWS と私

Cloud Watch4 これらについてのメトリクスも確認可能

4 ただし2週間分... cacti を併用

Page 100: フィードフォースと AWS と私

Cloud Watch4 Cloud Watch でしか取れないものもある4 RDS とか ELB などの AWS独自サービス4 agent などのインストールができないので...

Page 101: フィードフォースと AWS と私

Cloud Watch4 事前準備が必要なものもある4 デフォルトではメモリの監視ができない4 メモリの使用量を Cloud Watch に送信するような

script をインスタンス側に仕掛ける必要あり※1

※1: Amazon CloudWatch Monitoring Scripts for Linux - Amazon CloudWatch https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html

Page 102: フィードフォースと AWS と私

求められていたこと⑥

Page 103: フィードフォースと AWS と私

求められていたこと⑥4 AWS のアカウントの使い回しはセキュリティポリシー的にやめたい4 開発者毎にアカウント的なものを設定出来るようにして欲しい

4 不慣れな人(たとえば新人さん)の誤操作で事故につながらないようにして欲しい

Page 104: フィードフォースと AWS と私

IAM

Page 105: フィードフォースと AWS と私

IAM4 AWS Identity and Access Management

4 ある AWS アカウントにアクセスするユーザー・グループを管理4 アクセス権をコントロール

4 無料

Page 106: フィードフォースと AWS と私
Page 107: フィードフォースと AWS と私

求められていたこと⑦

Page 108: フィードフォースと AWS と私

求められていたこと⑦4 知らないうちに、変なところから変な操作されたりしてない?

4 意図してない AWS 操作は発生してない?4 その証左をいつでも提出できる状態にして欲しい

Page 109: フィードフォースと AWS と私

Cloud Trail

Page 110: フィードフォースと AWS と私

Cloud Trail4 アカウントの AWS API の呼び出しを記録4 AWS マネジメントコンソール4 AWS SDK

4 CLI(コマンドラインツール)4 AWS CloudFormation など)を使用した API の呼び出しも

Page 111: フィードフォースと AWS と私

Cloud Trail4 Cloud Trail 記録用の s3 bucket を指定4 API 呼び出し元の ID

4 source IP address

4 リクエストのパラメータ、レスポンス4 これらが json で記録

Page 112: フィードフォースと AWS と私
Page 113: フィードフォースと AWS と私

その他、弊社で利用している AWS サービス

Page 114: フィードフォースと AWS と私

その他、弊社で利用している AWS サービス4 「ドメイン設定して欲しい」4 Route 53

4 DNS, failover とかも

Page 115: フィードフォースと AWS と私

その他、弊社で利用している AWS サービス4 「CDN って手軽に用意できないかな?」4 Cloud Front

4 「キャッシュ・セッションストアってさ...」4 ElastiCache

4 これらは触ったことがないです... orz

Page 116: フィードフォースと AWS と私

良い(と感じている)ところ

Page 117: フィードフォースと AWS と私

良い(と感じている)ところ4 使っている人が多い4 サポートが手厚い(と感じている)4 安くはないかもしれないが、GCP との価格競争に応戦できている

4 新しいサービスが次々と4 (比較的)Ruby から扱いやすい4 略称が(ほぼ)一意

Page 118: フィードフォースと AWS と私

いまいち(と感じている)ところ

Page 119: フィードフォースと AWS と私

いまいち(と感じている)ところ4 単価が安くなっても、課金単位時間が 1h ェ...

4 後続の GCP に性能的に劣っているところが明らかになってきた?

4 常に危険に晒されている感4 仮想通貨採掘に利用されたケースも...

Page 120: フィードフォースと AWS と私

感想とか

Page 121: フィードフォースと AWS と私

感想とか4 「AWS をやってる」というよりは「IaaS をやってる」(稼働環境を自分で作ってる)という気持ち4 でもやっぱりロックインは多少されてる感4 (お仕事で)EC2 の代わりに GCE を使う未来?4 学習コスト・既存資産 < 導入メリット?4 用途と目的により使い分けていくのかなぁとか

Page 122: フィードフォースと AWS と私
Page 123: フィードフォースと AWS と私

感想とか4 Web UI からポチポチやれば、サーバは簡単に立てられる4 「そこでアプリケーションを安全に動作させる」ということを考えると...

4 AWS (IaaS)に精通していること < OS やミドルウェアを適切に使うこと

4 セキュリティ、ネットワークに関する知識も4 AWS 独自オプションで楽できたり、とかはある

Page 124: フィードフォースと AWS と私

感想とか4 Chef が導入されたことなどにより、インフラエンジニアの「作業」が僕らにも "見える" ようになってきた4 「サーバを立てて、そこでアプリケーションを安全に動作させる」ことのプロが、インフラエンジニア(だと思う)

4 今後もしばらくは "プロ" と相談しながらじゃないとキツそう

Page 125: フィードフォースと AWS と私

感想とか4 Chef が導入されたことなどにより、インフラエンジニアの「作業」が僕らにも "見える" ようになってきた4 動作確認とか技術検証とかはインフラエンジニアを介さなくても可能になってきているのは !

Page 126: フィードフォースと AWS と私

感想とか4 PaaS での開発から IaaS での開発へ4 新鮮、勉強になってる(知らないことだらけ)4 「奥の手」を使ってなんでもできる感じ(?)

Page 127: フィードフォースと AWS と私

感想とか4 PaaS での開発から IaaS での開発へ4 PaaS がいくら便利でも、やりたいことが出来なかったら使えない4 僕らにはどうにもできないハードルがあったりする4 「すみません、(技術的に)できません...」が、一番悔しい

Page 128: フィードフォースと AWS と私

感想とか4 PaaS での開発から IaaS での開発へ4 ミドルウェアに問題があった場合、解決までのプロセスは第三者に委ねるしかない4 「いつ復旧するの?」...orz

4 「今度同じような障害があっても、次はもっと早く復旧できるよね!」...orz

Page 129: フィードフォースと AWS と私

感想とか4 PaaS での開発から IaaS での開発へ4 PaaS のアプリケーション開発に集中できることのメリットは大きい4 最終的には GAE + MVMs みたいなところに繋げたい

Page 130: フィードフォースと AWS と私

まとめ(的なもの)

Page 131: フィードフォースと AWS と私

まとめ(的なもの)4 弊社・フィードフォースと AWS と私についてのお話4 求められるものに対して、AWS は応えてくれてきた4 EC2 / RDS / S3 / EMR / Cloud Watch / IAM / Cloud

Trail

4 良いと思っている点、いまいちだなと思っている点4 個人的な感想

Page 132: フィードフォースと AWS と私

まとめ(的なもの)4 弊社・フィードフォースと AWS と私についてのお話4 求められるものに対して、AWS は応えてくれてきた4 EC2 / RDS / S3 / EMR / Cloud Watch / IAM / Cloud

Trail

4 良いと思っている点、いまいちだなと思っている点4 個人的な感想4 I Love GAE!!!