(レポート) AWS re:Invent 2016 Serverless Follow Up #reinvent #aws_serverless

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

本記事は2016年12月7日に開催されたAWS re:Invent 2016 Serverless Follow Upのレポートです。会場はアマゾン目黒オフィスでした。

IMG_4366

本イベントのTweetまとめは以下。

レポート

What's new with Serverless by AWSJ 西谷さん

サーバレス関連の主なアップデートを紹介します

・サーバレスプラットフォームの機能性について。 ・非常に増えてきたというのが今回のre:Inventの感想。 ・堅牢で信頼性の高いエンタープライズアプリケーションの構築を実現可能に。

各種アップデート

・Lambdaで環境変数のサポート。 ・Key-Valueで環境変数を渡せる。 ・アプリ内にハードコードしなくて良くなった。 ・AWS Serverless Application Model(SAM) ・CloudFormationのエクステンション。 ・リソースなどをシンプルに定義可能。 ・Lambdaベースのアプリケーションをパッケージング。 ・サンプルスクリプトやファンクションをSAMとしてエクスポート可能。 ・ちなみに、SAMのアイコンはリス。なぜリスか? ・サーバレスアプリケーションGMのティム・ワグナーが好きだから。 ・サンプル。YAML形式で定義可能。Function、DataStoreなど。 ・従来のCloudFormationテンプレで定義すると大量になった。 ・シンプルに表記できるようになったのがSAM。 ・サーバレスCI/CDパイプライン。 ・CodeBuildによって一通りのCodePipelineが構築できるようになった。 ・CodeBuildでサーバレスアプリをビルドしてパッケージング。 ・必要に応じてユニットテストを実施。 ・CloudFormationで完成したアプリをデプロイ。 ・テストが成功したら本番環境にデプロイ。 ・サーバレスアプリケーションでもCI/CDが回せるようになった。 ・ICYMI ・CloudWatchの新機能。 ・LambdaでCloudWatchを使ってデバッグする時に、メトリクスをパーセンタイルで見れるようになった。 ・メトリクスポイントから直接CloudWatch Logsに飛べるようになった。 ・AWS X-Ray ・re:Inventで発表された新サービス。 ・現時点ではX-Rayのインテグレーションは行えない。 ・もうすぐリリース予定。 ・サービス間のイベント遷移をトレース。 ・Lambdaファンクションから他のサービスを呼び出した時の時間などをトレースできるようになる。 ・サービスのリソース間をマッピングして関連性を目で見て確認できる。 ・画面上にEnableActiveTracingが出てくるようになる。 ・まだPublicになってないのでもう少々お待ち下さい。 ・非同期呼び出しの滞留時間やリトライをGUIで確認できる。 ・一連の処理でどのリソースの処理がどのくらい時間がかかったのかを目視できる。 ・Lambdaそのものの新機能 ・Kinesisをソースとした時に新たにAT_TIMESTAMPをサポート。 ・任意の時点でのストリームデータの処理が可能になった。 ・C#サポート ・Node.js、Python、Java以外のC#でファンクションを書けるようになった。 ・デッドレターキュー ・今まで、Lambdaファンクションで非同期で実施した場合、3回実行しても処理されなかったら消えていった。 ・そういうイベントをSQSキューまたはSNSトピックに投げられるようになった。 ・デッドレターキューを見て別の処理をすることで、より信頼性の高いシステムを構築できるようになった。 ・失敗したイベントをちゃんとハンドリングできるようになった。 ・同期の場合はそもそも呼び出し元にエラーが返るのでハンドリングできる。

Lambda Everyhere

・色んなところでLambdaが使える。 ・AWS Step Functions ・re:Inventで発表された新サービス。 ・ワークフローをマネージメントする。 ・Lambdaファンクションをオーケストレーションする。 ・複数のLambdaファンクションを繋ぎ合わせて一つの大きなワークフローを実施する。 ・これまでは難しかった、Step Functionsで楽になる。 ・Step Functionsはステートマシン。待ち合わせ処理の実装ができるようになった。 ・Lambda Bots and Amazon Lex ・Lambdaを使ったbotが実装できる。 ・Snowball Edge ・オンプレからAWSヘセキュアなデータ転送をするためのサービス。 ・Snowball Edgeのハードウェア上でLambdaファンクションが実行可能。 ・暗号化やメディア変換がその場で可能になる。 ・Greengrass ・IoTの文脈で語られるサービス。 ・Lambdaの処理をデバイス上でローカル実行できる。 ・必要スペックを満たしていればGreengrassが使える。 ・Lambda@Edge ・CloudFrontのエッジ上でLambdaファンクションが動かせる。 ・リクエストやレスポンスの内容をエッジでカスタマイズできる。 ・プレビューではサポートしている言語はNode.jsのみ。最大50msのタイムアウト。弄れるのはヘッダのみ。 ・これまではLambdaを中心にシステムを作ることが多かったが、Lambdaそのものがあちこちで動かせるようになった。

API Gatewayアップデート

・バイナリのサポート。 ・イメージやオーディオなどのバイナリコンテンツをAPI Gatewayだけで取り扱いできるようになった。 ・Lambda連携の場合、LambdaはJSONしか使えないため、API Gatewayが自動的にbase64にエンコードしてくれる。 ・APIドキュメンテーション。 ・APIをドキュメント化。 ・コンソールからもSwaggerインポート/エクスポートでも可能。 ・AWS Marketplaceとのインテグレーション。 ・API Gatewayを使ってAPIを作ってマネタイズできる。 ・作ったAPIをMarketplaceで販売可能。 ・APIの利用をトラッキング、AWSから請求処理がされる。 ・ローンチパートナーとして日本ではDoCoMoさんがAPIを公開。 ・ Developer Portalの生成ができるようになった。 ・APIを公開して第三者の利用を受け付ける時に必要なものがツールで生成できる。 ・API Gatewayで作ったAPIのリストやサインアプの機能など。 ・githubで提供。 ・S3のStatic Web Site Hosting機能で配信することでサーバレスで配信可能。 ・リファレンスインプリメンテーションなのでデザインは自由に変更。

Introducing C# in AWS Lambda by AWSJ 福井さん

AWS Lambdaのメリット

・サービス不要。 ・リクエストごとの課金。 ・独自開発コードの持ち込み。 ・今回C#が使えるようにあった。 ・.NET開発者にLambda開発の道が拓けた。 ・今回のC#は.NET Core対応。従来の.NET Frameworkではない。

AWS Lambda for C#とは

・.NET Coreで動作。 ・Win32 APIやCOMコンポーネントは呼べない。 ・Visual Studioに統合された環境が用意されている。 ・AWS Tools for Visual Studio最新版にLambdaプロジェクトテンプレートが展開されている。 ・dotnetコマンドを使って開発可能。 ・LinuxでもMacでも開発できる。 ・dotnet core環境の構築。 ・そのあとにAWS Tools for Visual Studio最新版をインストール。 ・これだけで環境が整う。 ・AWSサービスイベントオブジェクト。 ・様々なイベントが最初から用意されている。 ・Lambda関数ハンドラ ・第1パラメータがイベントタイプ。 ・関数として呼び出す場合は自分で決めたタイプを自由に定義。 ・Contextオブジェクトで様々なプロパティから実行状態を取得可能。 ・AWS Lambdaでライブラリを提供。 ・Nugetから取得可能。 ・Lambdaメソッドのシグニチャ。 ・デフォルトではSystem.IO.StremaをIN/OUTに指定。 ・シリアライザで型変換を行いカスタマイズされたPOCOを使える。 ・非同期タイプも使える。 ・JSONのシリアライザ。 ・パラメータをJSONからマピング可能。 ・アセンブリのレベルで属性を定義、あるいはメソッドのレベルで定義。 ・Lambdaの作成。 ・Lambdaに対してファンクションの名前を指定する必要がある。 ・ロギング機能。 ・3つ方法がある。 ・Global Logging、ContextからLogging、Console.WriteLineを使用。

デモ

・Visual StudioでLabmda for C#を実行。 ・プロジェクトを展開した時にNugetパッケージの展開が失敗するが再ゲットで治る。 ・ユニットテストからLambdaファンクションを呼び出して処理を実行。 ・Visual StudioからAWS上にLambdaファンクションをアップロード。

まとめ

・LambdaがC#で使えるようになった。 ・.NET Coreで動作するようになった。 ・是非使ってみてください。

Introducing Amazon Lex, Amazon Polly and Amazon Recognition by AWSJ 西谷さん

Amazon Rekognition

・ディープラーニングをベースとした画像認識のサービス。 ・数百万の画像を検索、検証、整理できる。 ・できることは主に4つ。 ・物体及びシーンの検知。 ・顔の分析。 ・顔の比較。 ・そもそもの顔の認識。 ・RekognitionはAPIサービス。 ・APIをコールして使う。 ・DetectLabels ・オブジェクトとシーンの検知。 ・画像に対してDetectLabelsを実行するとJSONで結果が返ってくる。 ・画像の中の椅子や花というオブジェクトを検出しつつ、シチュエーションである居間などを検出する。 ・写真の中にある物体(オブジェクト)と写真が撮られた状況(シチュエーション)を検出する。 ・DetectFaces ・顔分析。 ・顔そのものの認識と顔の特徴を検出する。 ・例えばメガネ、目が開いているか、など。 ・複数の顔を認識可能、BoundingBoxが顔に当たる。 ・どういった人間か、顔のランドマーク、性別、表情、感情、目が開いているか、ヒゲなど、イメージそのもののクオリティ、e.t.c.。 ・CompareFaces ・顔を比較。 ・同じ人の二つの写真をCompareFacesするとSimilarity(どの程度似ているか)が返る。 ・IndexFaces/SearchFacesByImage ・DetectFacesとCompareFacesはステートレスはAPI。 ・IndexFacesは顔画像をコレクションとして保存可能。 ・SearchfaceByImageでINDEX化された画像から近い画像を検索できる。 ・ユースケース。 ・ユーザーがアップロードした画像をラベリングして検索。 ・DetectFacesで写真印刷サービスでベストな写真をリコメンド。 ・DetectFacesで店内の状態をカメラで撮影、フレームで切り取って顔認識。 ・今いる店内の客層を分析。層、感情を把握してマーケティングに利用。 ・アドテク。顧客に動的にパーソナライズしたコンテンツを表示することもできる。 ・メガネをかけた人にメガネの広告をする。性別で広告を分けるなど。 ・写真に人でタグつけ。 ・セキュリティでは人物判別。 ・RekognitionのBenefit。 ・これまでディープラーニングを使った画像認識は大変だった。 ・フルマネージドで使える。 ・S3に使える画像を使える。 ・スケーラビリティ、セキュア、ローコスト。 ・料金。 ・無料枠が最初の12ヶ月、1ヶ月あたり5000イメージまで無料。 ・APIを実行するボリュームによって単価が下がる。 ・マネージメントコンソールからデモが出来る。 ・画像をアップロードして試せるので是非試して欲しい。

Amazon Polly

・Pollyが生まれた背景。 ・エンドユーザとのコミュニケーションで音声を使うアプリが増えている。 ・ユーザーエクスペリエンス上音声が自然である。 ・音声のインテグレーションはユースケースによって異なる。 ・Pollyとは。 ・テキストをリアルな音声に変換するサービス。 ・現時点で24言語、47種類の声を提供。 ・好きなテキストを言語によって好みの声で読み上げできる。 ・低レイテンシ。 ・生成された音声を保存、再生、配信可能。リアルタイムも可能。 ・日本語も最初から対応している。 ・SSML。 ・テキストを読み上げるサービスなので、イントネーションやピッチ、スピードといったテキストを読むためのパラメータがある。 ・SSMLを使ってスピーチの細かい調整が可能。 ・テキストの一部に対して調整可能。 ・調整によってよりリアルな読み上げが実現可能。 ・Lexicons。 ・単語やフレーズの発音をカスタマイズ可能。 ・国ごとの発音の違いを吸収できる。Kaja→カジャじゃなくカヤ、など。 ・どういった処理をしているか。 ・テキストを処理。記号をテキストに置き換え。 ・分かち書きした要素を発音で変更。 ・単語の幅をセレクションして調整、結果を喋る。 ・アプリケーションで実装できる。 ・マネージメントコンソールでいつでも試せる。ぜひ試してください。 ・日本語はまだ棒読み感があるので、SSMLで調整してみてください。 ・料金。 ・従量課金。100万文字あたり$4。無料枠有り。

Amazon Lex

・Lexが生まれた背景 ・第1世代がパンチカード、第2世代がGUI。 ・第3世代が会話型インターフェース。 ・Lexは音声とテキストで会話するインターフェース。 ・Lexの特徴。 ・Alexaと同じ技術を資料。 ・Facebookチャットと連携可能。 ・バージョニング、エイリアスのサポート。 ・テキストと音声言語の理解。 ・Alexaと同じディープラーニング技術をベースとして使っている。 ・チャットサービスへのデプロイはワンクリックで可能。 ・ビルダー向けのデザイン。 ・Lexを使ってサービス構築する方のためにデザインされている。 ・バージョニングとエイリアス。 ・Lexの概念(インデントやスロット)をバージョニング可能。 ・複数の開発者による環境をサポート。 ・以前のバージョンへロールバック可能。 ・異なる環境へ異なるエイリアスをデプロイ。 ・エイリアス→別名。 ・AWS Mobile Hubとのインテグレーション。 ・AWSのサービスをインテグレーションしてモバイルアプリケーションを簡単に生成するサービス。 ・Lexが組み込まれた。会話型のサービスが作れる。 ・Mobile Hubをコネクタとして外部のサービスや既存サービスと連携可能。 ・Lexのユースケース。 ・チャットボット、アプリケーションに対する音声検索、会話型インターフェース。 ・新着ニュースを聞くことで読み上げさせるようなインフォメーショナルなbot。 ・チケットやホテルなどの予約、フードの注文を音声で。 ・エンタープライズでは在庫状況の確認など、業務システムの効率向上。 ・IoT、ウェアラブル、車など。 ・Lexのメリット。 ・簡単に使える。 ・シームレスにデプロイ、スケールできる。 ・費用対効果が高い。 ・Lex Botの構造は割愛。 ・Lambdaとのインテグレーション。 ・Lexで受け取ったビジネスロジックをLambdaで実装。 ・例。音声認識、自然言語理解、Lambdaで処理して結果をPollyでアウトプット。 ・Botを保存するとサーバ上に状態が保存される。 ・モニタリング。発生に失敗した回数やレイテンシがモニタリング可能。 ・料金。 ・無料枠有り。 ・Lexだけプレビュー中なのですぐは使えない。

Amazon Pinpoint by AWSJ 清水さん

モバイルユーザーのエンゲージメント

・エンゲージメント。 ・ユーザーを属性情報でセグメントを分けて、適切なメッセージを送る。 ・効果的なマーケティングの上で非常に重要。 ・モバイルアプリのユーザー獲得はコストがかかる。 ・アプリごとで1ユーザー獲得するのに平均$2.74かかる。 ・獲得したユーザーの保持率(リテンション)も重要。 ・キャンペーンの効果を計ることが必要。 ・ユーザーエンゲージメントの弱点。 ・インハウスでシステムを作ったりSaaSやパッケージを使ったり... ・インハウスだとスケールができない。 ・SaaSだと決まったことしか出来ないので柔軟性がない。 ・どちらにしてもコストがかかる。

Amazon Pinpoint

・アプリユーザーの行動を分析、キャンペーンを改善。 ・ユーザーの属性を分析、それに応じたキャンペーンを実施。 ・カスタムプッシュの通知を送信可能。

効果的なエンゲージメントとは

・ダイレクトまたはインダイレクトなデータを使ったエンゲージメントは近年増加。 ・まずはユーザーの行動を分析。 ・そのあとセグメントやターゲットを分析。 ・適したメッセージを送信。 ・効果があったかを分析評価する。 ・Pinpointは一連のサイクルをサポートする機能を有している。

Pinpointが提供する機能

・ターゲットされたモバイルプッシュ通知と高速配信。 ・セグメンテーションされたユーザーに合わせてプッシュ通知を高速配信。 ・Pinpointにおいてはキャンペーンと呼ぶ。 ・キャンペーンのスケジューリング、繰り返し処理。 ・今までは別のスケジューラを使う必要があった。 ・アプリケーション分析。 ・キャンペーンの効果を分析し次に繋げることが出来る。 ・メッセージ到達率、開封率、セグメンテーションごとの効果分析など。 ・A/Bテストとホールドアウトテスト。 ・あるセグメントのユーザーを分割、メッセージの内容を分けて、効果を比較する。 ・送信する時刻をスケジュールで変えることで、時間による効果も測定できる。 ・ホールドアウトテスト→標本データの一部を解析、妥当性を検証。 ・あるセグメントの一部にメッセージを送って、効果があるかを検証。その後全体に送信するといった施策が可能。 ・Quietタイムとメッセージ制限。 ・夜間など変な時間帯にメッセージが行かないように制限が出来る。 ・1ユーザーがその日に受けることが出来るメッセージ数を制限。 ・セグメンテーションが重複して多数のメッセージを受け取ることがないように。 ・スタンダード通知とサイレント通知。 ・ユーザーに暗黙的に通知(音が鳴らない形の通知)が可能。 ・カスタムイベントとカスタム属性。 ・カスタムイベントは最大1500個、カスタム属性を最大40個。 ・ユーザーのセグメンテーションに利用。 ・カスタム分析のためのS3自動エクスポート。 ・キャンペーンの生データをS3に自動でエクスポートできる。 ・そのデータをRedshiftなどに連携すれば、より濃密度な分析が可能になる。 ・セグメント分析とファネル分析。 ・各フェーズの適切なメッセージが何なのかを分析可能。

デベロッパーにとって

・ターゲティングの自動化。 ・面倒な処理がPinpointでマルッと提供。 ・自動にデータ収集するので構築コストを削減。 ・ディープリンクといった機能も提供。 ・フルAPIで操作可能。既存システムやサービスと連携出来る。

マーケッターにとって

・リッチなコンソール体験。グラフィカルなURI。 ・リッチなメディア通知の作成。 ・動的なユーザーセグメンテーション。タイミングのスナップショットで動的に送信可能 ・A/Bテストとホールドアウトテストで効果最大化。

デモ

・サンプルアプリをXcodeで開き、Build、エミュレータで実行。 ・GUIで各種データを参照。 ・実際にモバイルへプッシュ通知を配信。

料金

・1分に100万通のメッセージ配信。 ・CSVかJSONで4分間で100万件のプロファイルをインポート可能。 ・100万メッセージ送信ごとに$1。 ・100万イベント受信ごとに$1。 ・1ヶ月のターゲティッドユーザーごとに$0.0012。 ・無料枠有り。

Introduction to AWS X-Ray by AWSJ 西谷さん

アプリケーションのデバッグとは

・従来のデバッグではいろんなものが必要だった ・開発環境、問題となるログ、ブレークポイント... ・こういったデバッグプロセスは本番アプリケーションには向いていない ・サーバレスにも向いてない ・退屈だし、繰り返しだし、かなり時間がかかる。 ・モノリシックなアプリケーション。 ・モノシリックなアプリケーションにはそれはそれでメリットがある。 ・シンプル。 ・でも早いイテレーションは難しい、効果的なスケールも難しい。 ・CI/CDに時間がかかるし難しい。 ・マイクロサービスにも課題がある。 ・それ自体は一つ一つが小さいので効果的にはない。 ・数百のアプリケーションのデプロイと管理を簡単にする様々なサービスがある。 ・サービス間の調査、サービスごとにログフォーマットが異なる。 ・デプロイや管理が簡単になっても、本番アプリケーションのデバッグはまだまだ難しい。

X-Ray

・パフォーマンスのボトルネックとエラーの特定。 ・サービスの問題、ユーザーの問題のインパクトを可視化。 ・リクエストをトレース、サービスマップで可視化、問題を分析。 ・SDKが用意されている。 ・Java、.NET、Node.jsで利用可能。 ・メタデータを自動的にキャプチャするフィルタが追加されている。 ・メタデータを記録するアプリコードを手動で実装する必要なし。 ・X-Ray daemon。 ・UDPでSDKからデータを受信。ローカルバッファとして振舞う。 ・毎秒、またはローカルバッファがいっぱいになるとフラッシュ。 ・X-Rayのコンセプト ・色々な概念がある。 ・デフォルトのルールにたいしてサンプリングルールを設定することが可能。 ・X-Ray API。 ・トレースデータの送信、フィルタ、検索。 ・サポートされていない言語も生APIを叩けば可能。 ・自前でSDKを書くことも可能。 ・ロートレースデータをBatch get APIで取得して分析も出来る。

ユースケース

・サービスコールグラフの可視化。 ・サービスマップが自動的に生成、グラフをクリックするとトレース画面に。 ・影響の特定のためにドリルダウンで確認可能。 ・パフォーマンスボトルネックの特定。 ・パフォーマンスをクリックすると全体処理時間に対するサービスごとの処理時間を確認可能 ・どのサービスのやりとりで時間がかかっているのかがわかる。 ・問題の特定。 ・特定のエラーコードを確認することが出来る。

エージェントのインストール

・Linuxでは単純に入れるだけ。 ・Windowsも可能。 ・ECSにも導入可能。

料金

・プレビュー期間中は無料。 ・無料枠がある。 ・追加課金。 ・記録されたトレースは100万トレースあたり$5/月。 ・検索またはスキャンされたトレースは$0.5/月。 ・サンプルアプリも提供されている。ぜひ試してほしい。

さいごに

僕としては、Amazon Pinpointの説明を詳しく聞けたのが非常に楽しかったです。スピーカーの皆さんありがとうございました!