サーバレスアーキテクチャ概論

Similar documents
PowerPoint プレゼンテーション

PowerPoint Presentation

PowerPoint プレゼンテーション

SinfonexIDaaS機能概要書

FUJITSU Cloud Service K5 認証サービス サービス仕様書

そこが知りたい!AWSクラウドのセキュリティ

FUJITSU Cloud Service for OSS 認証サービス サービス仕様書

はしがき・目次・事例目次・凡例.indd

Presentation Template Koji Komatsu

ii

FUJITSU Cloud Service for OSS 「コンテナサービス」 ご紹介資料

II

AWS Deck Template

パソコン機能ガイド

パソコン機能ガイド

SIOS Protection Suite for Linux v9.3.2 AWS Direct Connect 接続クイックスタートガイド 2019 年 4 月

PowerPoint プレゼンテーション

目次 なぜAPIが注目されているのか? API 公開のライフサイクル 事例概要 Amazon API Gateway 利用のポイント APIソリューションご紹介 Copyright 2017 OGIS-RI Co., Ltd. All rights reserved. 2

Bluemix いつでもWebinarシリーズ 第15回 「Bluemix概説(改訂版)」

Javaと.NET

10年オンプレで運用したmixiをAWSに移行した10の理由

FUJITSU Cloud Service for OSS 「ログ監査サービス」 ご紹介資料


Graph APIでインターナルアプリケーションを開発

よくある問題を解決する~ 5 分でそのままつかえるソリューション by AWS ソリューションズビルダチーム


Microsoft Word - AWSBlueprint final.docx

エクセルカバー入稿用.indd

Microsoft Azure Service Fabric によるレジリエントなマイクロサービスの構築

SC-85X2取説


<4D F736F F F696E74202D C835B B E B8CDD8AB B83685D>

01_.g.r..

ネットアップクラウドデータサービス

使用する前に

オープンソース・ソリューション・テクノロジ株式会社 代表取締役 チーフアーキテクト 小田切耕司

™…

FUJITSU Cloud Service A5 for Microsoft Azure サービス仕様書

PowerPoint Presentation

CP100 SAP Cloud Platform. コース概要 コースバージョン : 04 コース期間 :

Microsoft Azure Microsoft Corporation Global Blackbelt Sales Japan OSS TSP Rio Fujita

Oracle Cloud Adapter for Oracle RightNow Cloud Service

アジェンダ はクラウド上でも十分使えます 1. の概要 とは の導入事例 で利用される構成 2. をクラウドで使う クラウドサービスの分類 Amazon Web Services による構成例 2

IBM i ユーザーの課題 モバイルや IOT に対応した新しい開発案件への対応 RPG COBOL など既存アプリのメンテナンス 要員の確保 属人化しない運用 管理体制 2

困ったときのQ&A

活用ガイド (ハードウェア編)

プレゼンタイトルを入力してください

タイトル

INDEX Demo の目的 ゴール Scenario 1: 自動化 Scenario 2: 効率化 2

JP-2-Develop Websites and Components in AEM v6x_(V3_after QA)_1111

ライフサイクル管理 Systemwalker Centric Manager カタログ

トラブルシューティング集

製品概要

これわかWord2010_第1部_ indd

パワポカバー入稿用.indd

これでわかるAccess2010

自己紹介 AWS 視点で経歴振り返り 2015 年 今現在 2


AWS 上でのサーバーレスアーキテクチャ 入 門 AWS Black Belt Online Seminar 2016 アマゾンウェブサービスジャパン株式会社 ソリューションアーキテクト清 水崇之 , Amazon Web Services, Inc. or its Aff



Visual Studio with Cordova クロスプラットフォーム開発の全貌

CLUSTERPROXSingleServerSafe SingleServerSafe ご紹介 2007 年 10 月

Workspace Gate ~ Workspace ONE(AirWatch) 連携 Cloud ホワイトペーパー ~ 1. Workspace Gate とは Workspace ONE(AirWatch) と社内サーバーやクラウドとの連携に必要なゲートウェイサーバーを Azure/AWS など

概要 ここでは先程デモを行った OpenStack の中で仮想マシンのデータがどのように管理されているかをご紹介致します OpenStack の中でデータがどのように配置され 管理されているかを知ることは 可用性を検討する上で非常に重要になります 2

vdi_service_details

untitled

Transcription:

Internet Week 2017 S7 IoT もおまかせ! サーバーレスで変わるインフラとの関わり方 サーバーレスアーキテクチャ概論 2017-11-29 @IW2017 株式会社 WHERE IoT 基盤センター仲山昌宏 / @nekoruri

自己紹介 株式会社 WHERE IoT 基盤センターサービスプロデューサー (2016-) セキュリティ キャンプ (2015-) 講師 プロデューサー SecHack365 実施協議会 (2017-) 技術系同人誌サークル めもおきば ProjectDIVA Arcade LV.624

本セッションについて サーバーレス と呼ばれる技術 ムーブメントについて 1. ぶっちゃけ 何 を指しているのか 2. エンジニアにとってどんな 変化 をもたらすのか 3. 活用するにはどのような 視点 が必要になるのかこれらを紹介します

サーバーレスアーキテクチャ? サーバ が 無い アーキテクチャ FAQ: でもサーバ有るんでしょ? イメージは人それぞれ いまだに明確な定義はされていない

サーバーレスアーキテクチャ の歴史 2008 年 2012 年 2014 年 2015 年 2016 年 2017 年 Google App Engine プレビューリリースサーバーレスな PaaS として一つの完成形 Serverlessというテクニカルターム登場 Why The Future Of Software And Apps Is Serverless AWS Lambda リリース http://readwrite.com/2012/10/15/why-the-future-of-software-and-apps-is-serverless/ 日本語圏で広く知られるきっかけとなる記事 サーバーレスアーキテクチャという技術分野についての簡単な調査 http://qiita.com/zerobase/items/3bc0d15980b472af841d Azure Functions Bluemix OpenWhisk 正式リリース Google Cloud Functions ベータ公開 各社から継続的な機能拡張

サーバーレスアーキテクチャ 自分で管理する サーバ を無くすための二つの方針 1. フルマネージドなアプリケーション実行環境を活用することで 開発や運用における サーバ という単位を廃する 2. クラウド上のコンポーネントをイベント駆動で結びつけて最大限活用していくシステムアーキテクチャ ( そもそも自分で用意する機能そのものを減らす )

1. フルマネージドなアプリケーション実行環境 いわゆる FaaS(Function as a Service) 関数 と呼ばれる小さなコードを動かすマネージドサービス 様々な呼び出し方法を用意 HTTP リクエスト ( 同期呼び出し ) メッセージキューやストレージ等からのトリガー ( 非同期呼び出し ) 各社 サーバーレス の中心人物 AWS Lambda Azure Functions Google Cloud Functions Bluemix OpenWhisk FaaS 以外の形態もあるが今回は割愛

1. フルマネージドなアプリケーション実行環境 IaaS PaaS FaaS アプリケーション アプリケーション アプリケーション ( 関数 ) セルフサービス フレームワークミドルウェア フレームワークミドルウェア イベント連携フレームワーク ミドルウェア OS OS OS 物理 / 仮想マシン 物理 / 仮想マシン 物理 / 仮想マシン

1. フルマネージドなアプリケーション実行環境 自分のコードを持ち込む (Bring Your Own Code) だけ = サーバ の面倒を自分で見なくてよい 実際のマシン上にコードや依存ライブラリを展開 権限に紐づくアクセスキー等の設定配布 コードを動かすアプリケーションプロセスの起動 呼び出し元からのデータ受け取り ログを外部ストレージに転送 保存 需要に応じたマシンの追加 削除とロードバランシング 実際の使用リソースに基づいた課金

1. フルマネージドなアプリケーション実行環境 確保した量 から 使用した量 へのシフト 所有から利用 の次の段階 確保したサーバ台数 ( 箱の大きさ ) に課金するのでは無く 実際に使用した実行時間 ( 中身の大きさ ) に課金をする ( 勝手に ) クラウド側が自動でスケールさせる サーバ内にファイル置いたりすると消える The twelve-factor app など ステートレスなアプリケーションのための ベストプラクティスな制約 の普及 メガクラウドの物量作戦

参考 :The Twelve-Factor App I. コードベース II. 依存関係 III. 設定 IV. バックエンドサービス V. ビルド リリース 実行 VI. プロセス VII. ポートバインディング VIII. 並行性 IX. 廃棄容易性 X. 開発 / 本番一致 XI. ログ XII. 管理プロセス 12

1. フルマネージドなアプリケーション実行環境 いわゆる PaaS(Heroku 等 ) との違い 明確な定義の違いは無く スケールのしやすさで区別 https://twitter.com/adrianco/status/736553530689998848 個人的には 1 秒ぐらいで上がってくるならいいのでは?

2. コンポーネントを のり付け するアーキテクチャ 高機能なクラウド上のコンポーネントの活用 Functional SaaS(Software as a Service) あるいは BaaS(Backend as a Service) コンポーネント自身が高機能化し 様々な イベント を生成 イベントから FaaS を呼び出して連携 フロント側のネイティブアプリ化 /SPA 化の波 アプリから直接データストア等にアクセスできる ガチャ のようなブラックボックスだけクラウド側に実装を持つ アプリの一部としてクラウドとメッセージング連携

2. コンポーネントを のり付け するアーキテクチャ クラウド時代の 制御の反転 アプリケーションサーバが各コンポーネントを呼び出すのではなく 各コンポーネントを小さな関数が接続する システムアーキテクチャの設計手法の変化 マイクロサービス化 コレオグラフィ化の流れの一部 背景 高水準なクラウド上のコンポーネントの登場 様々な イベントトリガ の整備 ID 基盤のうえでコンポーネント側だけで細かいアクセス認可 そもそも 餅は餅屋 自分で作らなくて良い部分が増えている

大手クラウドでのサーバーレスアーキテクチャ Amazon Web Services AWS Lambda Microsoft Azure Azure Functions Service Fabric Google Cloud Platform Google App Engine Google Cloud Functions IBM Bluemix OpenWhisk

AWS Lambda 主な特徴 2014 年末にリリース JavaScript(Node) Python Java8 C#(.NET Core) に対応 Amazon Linux ベースのコンテナで Go バイナリなども実行可能 実行プロセスは 良い感じ に使い回される 課金モデル 確保メモリ 実行時間 + 実行回数 確保メモリは 128MB~1.5GB の範囲で 64MB 単位であらかじめ指定 実行時間は 100ms 単位で計測 ( スケールに伴う起動時間などは 一定時間までは無料 )

AWS Lambda 主なイベントソース 単独では AWS API からのみ実行可能 手動実行 定期実行 HTTP API:API Gateway データストア :S3 DynamoDB Cognito メッセージ配信 :Kinesis Streams Simple Notification Service 外部連携 :Simple Email Service Echo 管理 :CloudFormation CloudWatch Logs/Events AWS Config 実行権限とアクセスコントロール IAM Role による権限管理と リソース側での認可 Cognito Identity で AWS 側の一次トークンに紐付け

Azure Functions 主な特徴 2016 年 3 月にプレビューリリース C# JavaScript(Node) Python F# PHP BAT Bash Java 良い感じにスケールする 動的サービスプラン のほか App Service として確保した VM 上で動かすプランも設置 実行ランタイムが GitHub にてオープンソース化 課金モデル 確保メモリ 実行時間 + 実行回数 確保メモリは 128MB~1.5GB の範囲で 128MB 単位であらかじめ指定 実行時間は 100ms 単位で計測

Azure Functions 主なイベントソース ( 入力バインド ) 単独でも HTTP API として呼び出し可能 タイマー HTTP リクエスト (API Management) Webhook データストア :Storage BLOB Storage テーブル DocumentDB Mobile Apps メッセージ配信 :Storage キュー Service Bus キュー Event Hub 出力バインド : 関数の出力をコンポーネントに接続 実行権限とアクセスコントロール Azure 全体の RBAC 準拠 Shared Access Signature でリソースに直接アクセス可能

Google App Engine 主な特徴 2008 年にプレビューリリースされた元祖サーバレス だったはずが 正式リリースでは インスタンス単位課金の一般的な PaaS に 基本的には HTTP で呼び出される普通の PaaS

Google Cloud Functions 主な特徴 2017 年 3 月にベータリリース JavaScript(Node) が実行可能 課金モデル 確保インスタンス単価 実行時間 + 実行回数 インスタンスは [128MB/200MHz] から [2048MB/2.4GHz] の 5 タイプ 実行時間は 100ms 単位で計測

Google Cloud Functions 主なイベントソース HTTP リクエスト データストア :Cloud Storage 非同期メッセージング :Cloud Pub/Sub モバイル統合 :Firebase

IBM Bluemix OpenWhisk 主な特徴 オープンソース実装とそれに基づくパブリッククラウド基盤 パブリッククラウドとしては 2016 年 12 月に正式リリース JavaScript(Node) Python Swift Docker コンテナが実行可能 主なイベントソース HTTP リクエスト データストア :nosql DB 非同期メッセージング :Message Hub タイマー

サーバーレス時代の指針 : 全てを分散システムの流儀で考える リアクティブシステム ID 管理とリソースへのアクセス制御

リアクティブシステム 分散システムのベストプラクティス 素早く かつ安定した応答時間を保つ (= リアクティブな ) システムを設計するためのベストプラクティス いわば The Twelve Factor App のレイヤー高い版 4 つの 特徴 を定義 目的 : 即応性 要件 1: 耐障害性 要件 2: 弾力性 手段 : メッセージ駆動

リアクティブシステム 目的 : 即応性 システム全体として 素早く かつ安定した応答時間を保つ 要件 1: 耐障害性 障害が発生しても それをコンポーネント内部に影響を隔離することで システム全体としての即応性を保つ 要件 2: 弾力性 負荷の増減があっても ボトルネックを排除し 割り当てるリソースを調整することで 即応性を保つ 手段 : メッセージ駆動 各コンポーネント間を 非同期なメッセージ配信で疎結合に保つ

リアクティブシステム メッセージ駆動 ( 手段 ) システム間をキューで非同期に接続する 複数のワーカプロセスがキューから取ってきて処理 弾力性 ( 要件 2) メッセージが増えてきたらワーカプロセスを増やせばよい 横並びのワーカプロセスに相互依存はないので気軽にスケールアウト イン 耐障害性 ( 要件 1) コンポーネントで異常が起きたら自爆して 別のワーカが実行 ずっとおかしいメッセージは Dead letter queue に積み替えて例外処理 即応性 ( 目的 ) 様々な状況に強いシステムが構築できる

ID 管理とリソースのアクセス制御 外部サービス これまで : 全ての権限を持つアプリケーションが入口で認証 アプリケーション内部で認可制御 A さんは管理者だから と が可能 App マイクロサービス DB これから 認証システムがトークンを発行 各サブシステム ( マイクロサービス ) が個別に認可 トークンに 管理者 という属性があるので という操作を許可 マイクロサービス A さんに管理者という属性を入れたトークンを送信 認証システム DB 外部サービス

ID 管理とリソースのアクセス制御 サーバレス時代のマルチクラウド連携は ID 連携が基本 ID を連携し それに対するリソース側で細かい認可を制御 JWT 等を引き回すことで 誰の どのアプリが アクセスしてきたのかをコンポーネント間で連携 プログラムは 整合性 のための最小限に留まるのでは ガチャ 複雑なトランザクション

クライアントアプリからの 2-tier 構成 クライアントアプリを経由した ID 連携 mbaas(cognito や Firebase) 等がすでに確立している そもそも高レベルのデータストア等があり ID 基盤のうえで 細かいアクセス制御 ( 認可 ) が可能 Facebook から連携した ID があれば 書き込みを許可 ID=A なら 階層 A の下の領域だけ読み書き可能

主なパターン ウェブアプリ モバイルアプリのバックエンド いわゆる BaaS の発展系 サーバ側ロジックが不要ならデータストアに直接アクセス クラウド基盤のイベント処理 ピタゴラ装置 的に動画共有サイトを実現する事例など AWS Lambda は イベント をたくさん用意したのが勝利の鍵 運用の自動化では既に多数の事例 イベントのストリーミング処理 さいきんはやりの LINE Bot を手軽に実現する事例など

サーバーレスアーキテクチャの今と未来 今 基本機能は揃い始め 既に適用しやすい領域ではメリット大 小さく始める 領域では もうデメリットは小さい 管理ツールなどが見えてきた テスト手法 CI/CD のやり方や開発フレームワークの整備はこれから 未来 ID 管理とリソース側の認可だけでできることが増え サーバが全ての面倒を見る設計じたいが陳腐化していくのでは FaaS がエッジコンピューティング側にも拡がっていく第一歩 次の集中から分散への波

サーバーレス時代のエンジニア像 餅は餅屋 戦略への転換が必要 自分が所有するべき 得意分野 である技術領域は何か その領域を最大化するためには何が必要か 所有する必要が無い技術の 放棄 時間は有限 人も有限 選択と集中が求められている だいたいのことはクラウドベンダーの方が自分より上手くできる クラウドベンダーのかんがえたベストプラクティス とはいえ抑えている方が つぶしはきく

いわゆる サーバ 系技術の今後 サーバの設計 構築 運用系の技術 純粋に必要が無くなる領域もある例 : ディスク障害時の迅速なベンダー連絡方法 形が変わるだけの領域もある例 : システムの監視 プライベートクラウドの需要は当面続く 自らが組織内クラウドベンダーとしてパブリッククラウドと闘う 当然全てのスキルセットが必要となる

Infrastructure as Code 普及期 準備は整っている API 経由で全てが制御できる Hashicorp Terraform などのツールエコシステムの整備 オンプレミス環境でも十分に採用可能 もはや 手作業 が許されなくなる時代 サーバ環境の変更履歴を残すことの重要性が増している 人間は必ずミスをする 手作業の余地を減らすのは義務 働き方改革 同じ場所から作業するわけですらない

これからの付加価値 クラウドベンダー特化の知識 膨大に存在するクラウド上のコンポーネントの知識 実際にその構成で どれくらいいけるのか という実績 ノウハウ 一般的なシステムアーキテクチャの知識 クラウドの背後に存在するシステムへの理解を踏まえた最適化例 :DB やネットワークなど 高い品質のサービスを安価にリスク少なく実現できる技術選択方針

まとめ ふたつのサーバーレスアーキテクチャ ステートレスなソフトウェアを前提としたフルマネージドな実行環境 クラウドコンポーネントを活用するリアクティブなアーキテクチャ設計 どちらも良いシステムを導くための 良い制約 = クラウドが提供するベストプラクティスの活用 大手クラウドの提供する サーバーレス の違い サーバーレスなシステムを設計するときの指針 リアクティブシステム ID 管理とリソース側での細かい認可 サーバーレス時代のエンジニア像と付加価値