「実践SERVERLESS」に参加してきた #cmdevio

2016年8月2日に実施された「実践SERVERLESS」に参加してきました。会場は目黒雅叙園にあるAmazonさんのオフィスでした。周りに珍しいポケモンはいませんでした。

classmethod.connpass.com

雑ですが以下参加メモ。資料は公開されしだい更新します。

Introducing Serverless Computing アマゾンウェブサービスジャパン 西谷 圭介氏

AWS Lambdaのユースケース

Real-time file processing

  • イメージのサムネイル生成
  • ビデオの変換(投稿動画が問題ないか解析したり)
  • ドキュメントのメタデータをインデックス化
  • ログの処理
  • メディアコンテンツのバリデーション

Real-time stream processing

  • クライアントのアクティビティトラッキング
  • クリックストリーム分析
  • メトリクス生成
  • データクレンジング
  • ログフィルタリング
  • インデクシング
  • バイスデータのテレメトリと測定

ストリームデータをKinesisに貯めてLambdaに流すケースが多い

Extract, Transform and Load

  • データバリデーション
  • バックアップ
  • 分析

Serverless web and mobile application

以下の組み合わせが多い

  • 静的コンテンツ S3
  • 動的コンテンツ Lambda
  • HTTPアクセス API Gateway
  • NoSQLデータ・ストレージ DynamoDB

Lambda と API Gateway の管理 クラスメソッド 諏訪 悠紀

サーバレスの役割

  • どこをサーバレスにするか
  • サーバレスは様々なレイヤーで使用できる

フロントエンドレイヤー

バックエンドレイヤー

  • ユーザの目に見えない部分
  • Data Processingなど
  • SNS + Lambda
  • S3 + Lambda
  • Streams系 + Lambda

他にも

  • Cognito User Pools + Lambda
  • CouldFormationのLambda-backend カスタムリソース
  • Slack + API Gateway + LambdaでChatOps

管理方法の選定方法のコツ

  • いっぱいある
  • ツールごとに管理する上での観点が違う

API Gatewayとの併用

  • 対象がAPI GatewayとLambda(もしくはLambdaのみ)
  • フロントエンドを対象としているツール(フレームワーク意識)が多い
  • Lambdaのみを対象としているツールは汎用的で導入しやすい

他のリソース管理

  • 規模による
  • 規模が大きく管理するリソースが多い場合は分割したほうが良い(例えばAPI GatewayとLambda、他は別ツールなど)
  • 小さい場合はまとめたほうが管理しやすい

ロールバック

  • 対応しているツールとしていないツールがある(Lambdaを前のデプロイに戻したい場合)
  • ロールバック非対応の場合は手作業か自分で実装する必要があり手間がかかる

使い回し

  • そのアーキテクチャを他のサービスで使い回すか?
  • 汎用的にする必要があるか?
  • 設定値は実行時パラメータ?
  • 環境変数は必要か?

管理ツール6種使い比べ

AWS CloudFormation

  • AWSのリソース管理できる
  • JSON記述
  • 他のAWSリソースも管理出来る
  • 依存関係定義
  • 実行時パラメータを定義可能
  • Lambda、API Gatewayサポート
  • ソースコードJSON内に記述可能
  • EventSourceMappingをイベントソースに指定可能

Serverless

Apex

  • Lambda特化
  • LambdaファンクションのBuild/Deploy/Manageが可能
  • Terraform連携
  • Lamdaファンクションをテストするコマンドもあり

Gulp

  • Node.js界隈でよく使われる
  • 既にGulp使っているのであれば良さそう

SwaggerHub

  • Swaggerのクラウドサービス
  • Swaggerドキュメント(設定ファイル)をブラウザで記述できる
  • API Gateway & Lambdaへのエクスポートが可能

Chalice(Beta)

  • awslabsで公開
  • API Gateway + Lambda
  • Pythonで動く
  • IAMを自動で生成することもできる

Flourish(Comming Soon?)

  • Serverless Confで発表された
  • AWS支援のOSS
  • SwaggerHubライク

まとめ

  • 何を重視するか
  • 最適な管理方法を選定しよう
  • いろいろなツールに触れよう

質問

  1. API Gatewayサポートと言いつつ、一部APIをサポートしていないケースがあったりするのだがどうしているか
  2. 実際にそのケースはある。Cloud Formationはほぼサポートしているのでおすすめ

実際に使う Cognito UserPools クラスメソッド 丹内 優紀

speakerdeck.com

ServerlessとCognito

  • Serverlessアーキテクチャとは: 非常駐型プロセスをイベントによってトリガーするインフラストラクチャ
  • AWS Lambdaが代表的

serverlessで解決したい問題

  • EC2無しで簡単なプログラム運用(手間、お金)
  • アプリケーションから本質的でないコードを少なくしたい
  • Lambda以外のアプローチもある

Cognitoとは

アプリケーションの認証・認可をサポートするフルマネージドサービス

Cognito Identity

  • 外部で認証されたユーザに対して機能を提供する
  • Federated Identity
  • 外部の認証サービスからの名寄せ
  • 匿名ユーザとして認証可能(地味だけど結構大事)
  • 複数のIdentity ProviderをひとつのIdentityとしてマージ可能

STS

  • AWSへのアクセスキーを安全に発行する
  • AssumeRoleやCondition節などIAMとの連携
  • 短期間だけ有効なIAMを発行可能

Cognito Sync

  • ユーザデータの同期機能を提供
  • Sync Store
  • KVSのように使えるデータストア
  • SDK経由ならローカルストレージとの連携も簡単

Cognito Streams

Kinesis Streamsに送信できる

Cognito Events

Lambda Functionを実行できる

Cognito User Pool

  • AWSが提供するIdentity Provider
  • ユーザの登録・管理、認証
  • パスワードやMFA、確認メール送信など一般的な認証機能を持っている
  • GAになった!東京リージョンにも来た!

User Poolsの機能

  • ユニークなユーザ名を設定
  • パスワード認証、MFA
  • パスワードポリシーが利用可

アトリビュート

  • ユーザごとに属性を設定可能(性別、住所、いろいろ)
  • エイリアスによってログインで使用する属性を指定可能
  • 独自のアトリビュートも可能

メール・SMS確認・MFA

  • 認証コード発行
  • メッセージのテンプレート編集可能
  • MFA可能

バイストラッキング

  • 同一ユーザのログイン上限を設定可能
  • 初回ログイン時に認証とは別にトラッキングのトークンが発行される
  • ラッキングが有効な端末はMFAをスキップ可能
  • 管理者はSDK非公開のREST APIからデバイスリストを取得可能
  • Global Sign-out(同一ユーザの全端末サインアウト)や管理者権限サインアウトも可能

トリガ

  • Lambda Functionと連携可能

Cognito Identity連携

ポリシー変数

  • Cognitoに割り当てられるIDに一致するリソースのみへの権限発行
  • サーバを介さない処理を安全に行える
  • IAMのCOndition節に変数を記載

OIDC Provider

  • GoogleやSalseforceなど
  • SAMLも使えるようになった

大量リクエスト時の制限

Trust Relationship

  • どのTOken発行者に対してAssume Roleを許可するかのポリシー
  • 自分で編集するとハマる

まとめ

  • User Poolsで認証機能をAWS
  • Cognito Identity連携でより多くの機能が使える
  • 自分のビジネスに沿うやり方でサーバレスに

質疑応答

  1. Emailのメッセージに日本語入れて保存できない?
  2. (会場で実際に試して)できないですね。