月曜日は「AWS re:Invent 2017 Serverless re:Cap」に参加してきた.日本だと完全に深夜帯だったキーノートは全て見たし,Black Belt「re:Invent 2017 速報」も見たけど,アップデートが多いので繰り返し学びたいなと思っていたのと,今回は Serverless 関連に特化したイベントだったので,より深く話が聞けるかなというのを期待していた.すぐに資料が公開されると嬉しいんだけども🙏
Serverless Updates
- Lambda
- CPU をより使えるように,メモリを最大 3GB まで設定できるようになった
- Lambda の Go 対応は,あくまでまだ「プリアナウンス」段階
- Lambda の同時実行可能数を関数ごとに設定できるようになった
- Lambda のコードエディタが Cloud9 ベースになった
- AWS Serverless Application Repository もリリースされた
- API Gateway
- API Gateway の VPC の統合サポート
- AWS Step Functions
- State Machine の Update ができるようになった
Lambda は実際にサービスで運用していることもあって,早めにキャッチアップをしていたので,認識と大きな差はなかった.Go 対応は個人的に嬉しくて,すぐにリプレイスできる機能があるので,正式リリースを楽しみに待っている.あと AWS Serverless Application Repository はまだあまりイメージが湧いてないけど,公開されているサーバレスアプリケーションのスタックをサクッと動かせる感じ?「Deploy to Heroku」ボタンのような?API Gateway のリリースは VPC の中で起動できるという意味ではなく,VPC の中に起動した NLB にバックエンドの処理を流せるようになったという意味で,これも嬉しい機能だ.
- AWS Serverless Application Repository が登場します | Amazon Web Services ブログ
- Amazon API Gateway でプライベート VPC とのエンドポイント統合をサポート
AWS AppSync
- 現在はまだパブリックプレビュー中
- データソースとして,DynamoDB / Amazon ES / Lambda 関数をサポートしている
- Cognito で認証をすれば,認証系のエンドポイントを叩くこともできる
- GraphQL の特徴はクライアント側で呼び出すスキーマを定義できること
- AppSync ではサブスクリプションもできるので,リアルタイムにデータを更新することができる
- サブスクリプションは,内部的には WebSocket で通信をしている
まだパブリックプレビュー中で,申し込んでもまだ試せない人もいるようだった.AppSync 良さそうだなと感じたのと同時に,そもそも GraphQL が良さそう.僕自身がフロントもネイティブも書く機会がほとんどないけど,GraphQL の勉強がてら,試してみたくなった.GraphQL で言うと,Rebuild.fm #193 で導入事例の話があって,すごく参考になるので合わせて聞いてみると良いかと.
AWS Fargate
- Fargate
- 「Fargate は計算リソースの使い方を根本的に変える」という表現がカッコ良かった
- リソースベースの課金になるので,コスト効率も上がる
- awsvpc ネットワークモードでは,タスク(コンテナ)ごとに ENI を持つことができる
- リソースの組み合わせを選択する(全部で50種類ぐらいある)
- 秒単位の課金になる
- 99.99% SLA も発表された
- Fargate に対応したタスク定義が必要
- EKS
- Kubernetes のワークロードの 63% は AWS の上で動いている
- Fargate と Lambda の使い分けは西谷さんのツイートが参考になる
- コンテナ関連の re:Invent セッション動画もある(記事の一番下に載せておく)
FargateとLambdaの使い分けについて。イベントドリブン、ミリ秒単位のコンピュート、ランタイム管理したくない場合はLambda。それ以外はFargate。とても分かりやすい。あとはサーバーレスなバッチコンピューティングは分散ならStep Functions+Lambda、ロングランニングなシングルバッチはFargate。
— Keisuke Nishitani (@Keisuke69) 2017年11月29日
既に本番環境のワークロードに ECS を導入してるけど,コンテナインスタンスを意識する必要があるので,オートスケーリングとサービスオートスケーリングを調整するあたりが少し難しかった.そういう背景を考えると,Fargate は最高という気がするし,より気軽にコンテナをスケールできるので,運用も楽になる.コスト面はもう少し検討が必要で,リソースベースになることにより,コンテナインスタンスを上げっぱなしにしていたときよりも高くなってしまうケースはありそうだけど,ほとんどのケースでは下がりそう.re:Invent のセッション動画もオススメされていたので,これは見てみる.
AWS Cloud9
- 30分間使わないと,自動的に落ちるので,コスト削減ができる
- AWS Cloud9 で Lambda Function を選択すると,リモートからインポートすることができる
- SAM Local も入っているので,開発も簡単に行える
- Shared With You のメニューから,他人の AWS Cloud9 にアクセスすることもできる
通常の Cloud9 は約1年ほど Rails 開発で使っていて慣れていたので,AWS Cloud9 の I/F や,Lambda コンソールのリニューアルは特にハマる点はなかったけど,AWS Cloud9 を使うために EC2 を起動しないといけないというのは改善の余地がありそうな気がした.そこもフルマネージドにして欲しい気がする.あと,プログラミング初学者が Cloud9 を使って勉強するというシチュエーションが少なからずあり,そういう人たちが Cloud9 のために AWS アカウントを取得するというプロセスは,重いなぁ...という感覚もある.Cloud9 は東京リージョンじゃなくても大丈夫とのことで,Lambda の開発環境として導入してみたいと思う.
ML Services
- Amazon Comprehend
- 日本語はまだ未対応
- エンティティとキーフレーズを自動抽出できる
- 感情分析(ポジネガ)もできる
- API だけじゃなくて S3 のファイルも解析できる
- Amazon Translate
- 文章の翻訳に特化したサービス
- Amazon Rekognition Video
- 今まであった Rekognition の動画版
- 動画を分析して,登場人物にタグ付けなどができる
- Amazon Transcribe
- 音声をテキストに変換するサービス
- コールセンターなどで活用できる
最近の機械学習関連のトレンドを全然キャッチアップできてなく,SageMaker も含めて概要レベルの理解しかできていない(ヤバイ!).ただ個人的には大学院時代に自然言語処理 (NLP) の研究をしていたので,Amazon Comprehend はすごく気になるし,日本語対応したらすぐ試してみたいと思う.当時はニュース記事をデータソースとして,MeCab と ChaSen を活用してポジネガ判定や意味推論などをしていて,夜間バッチでガリガリ動かしていたので,最近は本当に便利になったなぁーという気持ちもある.
参考
re:Invent で発表されたアップデートで Launch Templates は既に試して記事を書いた.結構便利で,検証用のインスタンスをサクッと立てるときにも使っている.参考になれば!
関連レポート
コンテナ関連の re:Invent セッション動画
全部見ないと!