naichi's lab

3日後の自分(他人)への書き置き

【参加してきた】雲勉:大阪【勉強会:開発者向け】サーバーレスで作るモバイルアプリバックエンド #kumoben

kumoben.doorkeeper.jp

参加してきました。

会社紹介

おきまりの宣伝

  • アイレット株式会社
    • 2003〜
    • 従業員162名ちょい
    • システム開発、ゲーム開発、保守、マネージドホスティング
  • cloudpack大阪
    • 構築
    • MSP運用
    • MSP開発
  • cloudpack
    • デザイン
    • 設計・コンサル
    • システム開発
    • MSP
  • 7年間AWSのみで運用
    • 600社1200プロジェクト超
  • APNプログラム
    • Amazonパートナープログラムの
    • プレミアパートナーに5年連続選ばれている
    • アジアで7社だけ
  • 請求代行サービス
  • AWSよりも安い
  • 大阪の話
    • RoBoHon オートヒーリングシステム
      • 改ざん自動修復
    • スタバのサーバーレス案件
    • 毎日放送 動画イズム444
      • フルサーバーレスで実現
      • 3ヶ月でデザインからリリースまで
    • 近畿大学AWS移行
    • MSP事業支援開発
      • kibana
  • サーバーレス開発チームの取り組み
    • MaaS(仮) & ServerlessPack
  • KDDIの子会社になりました。 2017/01/25
  • 募集
    • 開発・インフラ・UI/UXエンジニア

雲勉について

  • cloudpackの社内勉強会を外に公開
  • 基本的に資料公開はしない
  • 今回は中級者向け
  • #kumoben

サーバレスで作るモバイルアプリバックエンド

やっとはじまり

自己紹介

  • すみさきさん
  • Webアプリケーションエンジニア
  • 2016/09~cloudpackにjoin

サーバレスってなに

サーバ「レス」

  • サーバが存在しない
    • サーバはあります
  • サーバの存在を意識しなくていい
    • 自動スケーリング
  • ハードウェア、OS、ミドルウェアに依存しない
    • コードが動くことが大事
  • ステートレス
    • リクエストごとにプロセスを使い捨てる
  • 使いたい「機能」にフォーカスを当てる
    • FaaS (Function as a Service)

どっかの偉い人 0.5秒実行するインスタンスを20mm秒以下で効率的に起動できるならサーバレス

メリット

  • リソースを時間単位で確保
    • 運用費用を削減できる
  • インフラが存在しないため構築の手間を削減
    • 初期費用も削減できる

デメリット

  • それぞれが独立・非同期
    • 原子性を確保することが難しい
  • SLAが保障されていないものが多い
    • 障害発生時のリカバリー手順が必要
  • 構築から運用まで一貫して考える必要あり

実案件で使おうとするとここらへんが難しい

構成例

f:id:naichilab:20170208195803j:plain

AWSにおけるサーバレスサービス

いくつかある。

f:id:naichilab:20170208195602j:plain

AWS Lambda

  • AWSのサーバレスといえばこれ
  • Java8、Node.js、Phthon2.7、C#で記述可能
    • java 初回が重たい
      • CPUがっつり使う処理には有効
    • Node.js
      • 色々めんどくさい
    • Phthon
      • コンソールでかけるのでよい
    • C#
      • まだあまり試してない
  • たいていの処理はなんとかしてくれる
  • 初期の同時実行数は100に制限(アカウント単位!
    • 過度な依存は禁物
    • AWSに相談すれば少しあげることはできる・・・
  • 最大処理可能時間は5分

Amazon API Gateway

  • RESTfulなAPIを構築できるサービス
  • 他のサービスのプロキシをしたり、APII/Fになったり
  • Webサービスのスロットリングにも使える
    • スロットリング:際限なくアクセスされることを防ぐ
  • Lambdaと仲良し
  • 30秒でタイムアウトする

Amazon DynamoDB

  • 高速で柔軟なNoSQLデータベース
  • 事前に設定したスループット要件に合わせて自動的にスケーリング
  • オンラインゲームのバックエンドに使われたりする
  • スループット要件に対して課金される
    • 利用料金が青天井
    • 例)秒間1万件データ取得したい
      • -> 秒間1万件以上に設定すると、その金額がずっとかかる
  • 1日2回しかスループット要件変えられない。

Amazon S3 (Simple Storage Service)

  • シンプルで耐久性がありスケーラブルなオブジェクトストレージ
  • 99.999999999%の耐久性
  • 99.99%の可用性
  • 静的ウェブサイトホスティングという機能があり、コレ1つでWebサイトを作ることも可能
  • 仕組み上高速ではない
    • 同じオブジェクトを読み書きする際には注意が必要
  • 親戚
    • グレイシア(長期保存用)

Amazon Cognito

  • ユーザーのサインアップとサインインの機能を追加できる
  • ソーシャルIDや自前のIDシステムによる認証もできる
  • 認証したユーザーにIAMロールを割り当てる使い方など
  • 中身は3つぐらいに分かれている
    • Cognito UserPool
    • Cognito Identity
    • Cognito Sync
      • スマホ間同期とか
  • 認証用メールがAmazon SESを通じて発行される
    • キャリアメールが関わる場合は工夫が必要
      • キャリア側の迷惑メールフィルタに引っかかる
    • 動画IZMではSendGridを利用

番外編

Amazon CloudFront

  • CDNサービス
  • コンテンツを世界に配信できる
  • S3やAPIGatewayの前段に挟むことで痒いところに手が届く
    • S3へのアクセスを減らせる
    • S3は404以外のエラーはサポートしていない
    • APIGatewayの前段でAppFirewallの機能を担う

Amazon Route 53

  • 可用性・拡張性に優れたDNSサービス
  • S3の静的ホスティング、APIGateway、CloudFrontを独自ドメインで使いたい場合に

他にも

  • Amazon SNS
    • プッシュ通知
  • Amazon SES
    • Email配信
  • Amazon SQS
    • メッセージキューイング
    • 溜め込んでLambdaで取り込んで処理とか。

実際にモバイルバックエンドをサーバレスで考えてみる

簡単な構築パターンを考えてみる

アプリから送ったデータを保存したい

  • 構成例
    • API Gateway -> Lambda -> S3 or DynamoDB
  • f:id:naichilab:20170208203148j:plain

  • Lambdaを直接たたくためにはIAMが必要

  • APIGatewayを挟むと抽象化できる

写真をとったらサムネイルを作りたい

  • 構成例
    • API Gateway -> Lambda(保存) -> S3 -> Lambda(加工) -> S3
      • たまにLambdaの処理が抜ける
  • f:id:naichilab:20170208203229j:plain

  • 構成例2

    • API Gateway -> Lambda(保存) -> S3 / SQS -> (Timer起動)Lambda(加工)
      • SQSを挟むことで確実性を上げる
  • f:id:naichilab:20170208203252j:plain

許可した人にだけAPIを公開したい

  • 構成例
    • Amazon Cognito
      • 認証トークンを発行
    • API Gateway -> Lambda -> …
  • f:id:naichilab:20170208203333j:plain

デモ

  • API Gateway -> Lambda -> Lambda -> S3
  • Unity -> Lambda <- S3
  • f:id:naichilab:20170208203455j:plain

Unity用SDKもあっていくつかの機能は直接呼べる

  • API Gateway
    • AJAXで呼ぶならCORS設定が必要

ホワイトペーパー

cloudpackサーバーレス開発ホワイトペーパーとして公開している

cloudpack.jp

質疑

サーバーレスのログ追跡どうやってるの?

  • CloudWatchは大変
  • 答えはあるがまだ発表できない
    • 2月末ぐらいに発表できる

次回予告

  • 2月開催
    • AWS Storage Gateway
  • 3月
    • 3/1 ホワイトペーパーの説明
    • 3/8 AWS Code Deploy
    • 3/29 クラウド基礎

感想

まだほとんど使えてないけど雰囲気つかめてよかった。 簡単に試せそうやし触ってみよう。