「実践SERVERLESS」に参加してきた #cmdevio
2016年8月2日に実施された「実践SERVERLESS」に参加してきました。会場は目黒雅叙園にあるAmazonさんのオフィスでした。周りに珍しいポケモンはいませんでした。
雑ですが以下参加メモ。資料は公開されしだい更新します。
Introducing Serverless Computing アマゾンウェブサービスジャパン 西谷 圭介氏
AWS Lambdaのユースケース
Real-time file processing
- イメージのサムネイル生成
- ビデオの変換(投稿動画が問題ないか解析したり)
- ドキュメントのメタデータをインデックス化
- ログの処理
- メディアコンテンツのバリデーション
Real-time stream processing
ストリームデータをKinesisに貯めてLambdaに流すケースが多い
Extract, Transform and Load
- データバリデーション
- バックアップ
- 分析
Serverless web and mobile application
以下の組み合わせが多い
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との併用
他のリソース管理
ロールバック
- 対応しているツールとしていないツールがある(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
Chalice(Beta)
Flourish(Comming Soon?)
AWS謹製ということでFlourishというものも近い将来にリリースされる予定です。詳細はまだ言えませんが、先ほどのChalice同様OSSとして公開される予定ですー。乞うご期待! #cmdevio
— Keisuke Nishitani (@Keisuke69) August 2, 2016
まとめ
- 何を重視するか
- 最適な管理方法を選定しよう
- いろいろなツールに触れよう
質問
- API Gatewayサポートと言いつつ、一部APIをサポートしていないケースがあったりするのだがどうしているか
- 実際にそのケースはある。Cloud Formationはほぼサポートしているのでおすすめ
実際に使う Cognito UserPools クラスメソッド 丹内 優紀
ServerlessとCognito
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
大量リクエスト時の制限
Trust Relationship
- どのTOken発行者に対してAssume Roleを許可するかのポリシー
- 自分で編集するとハマる
まとめ
- User Poolsで認証機能をAWSに
- Cognito Identity連携でより多くの機能が使える
- 自分のビジネスに沿うやり方でサーバレスに
質疑応答
- Emailのメッセージに日本語入れて保存できない?
- (会場で実際に試して)できないですね。