はてなの金次郎

Pythonエンジニアの技術系ブログ

Developers.IO 2018に参加してきました

Developers.IO 2018とは

dev.classmethod.jp

Developers.IOは、クラスメソッド株式会社が主催するイベントです。 Developers.IO 2018のテーマは「AWS」でした。

  • 立ち見が発生してしまったこと
  • カンファレンス用のWifiがなかったこと
  • 懇親会の食べ物がすぐになくなってしまったこと

は少し残念でしたが、AWSといえばクラスメソッドさん、クラスメソッドさんといえばAWSということもあり、どのセッションもとても勉強させていただきました。

印象に残ったセッション

セッションの概要と感想をまとめました。

次世代モバイル向けクラウドサービスAWS AppSyncを使って店舗スタッフと顧客の体験を最大化する方法

RESTの次のパラダイムとして注目されているGraphQLをベースとしたAWSマネージドサービスAppSyncの紹介と、AppSyncを自社サービスのチャット機能に採用したという話でした。

AppSyncを利用したスキーマファースト開発でスマホアプリの開発効率が向上したとのこと。

特に印象に残ったのはAppSyncを利用したモバイルエンジニアの感想で、

  • GraphQLの前提知識が必要だが、手軽に利用できたのが良かった
  • リクエストが1つで済むので、多くの場合で実装がシンプルになる
  • クライアントが自動生成されるので、アプリの実装は少なくて済む
  • アプリ側で必要なプロパティだけを指定して取得できるので効率的
  • 特にクロスプラットフォームでUIが異なる場合などに適している

といったことが列挙されていました。
PyCon JP 2018でもAppSyncを紹介するトークがありましたが、スマホアプリ開発に携わっている身としていち早く試してみたいサービスです。

気になる点としては、サポートされているSDKiOSAndroidJavaScriptである点と(Pythonない)、

Q . AWS AppSyncではどのようなアプリケーション開発言語がサポートされていますか?

A . AWS AppSync SDK では iOSAndroidJavaScript がサポートされています。JavaScript のサポート範囲には、React や Angular などのウェブフレームワーク、および React Native や Ionic といったテクノロジーが含まれます。また、AppSync GraphQL エンドポイントへの接続にオープンソースクライアントを使用して、一般的な HTTP ライブラリやシンプルな CURL コマンドなど、その他のプラットフォームも利用できます。

https://aws.amazon.com/jp/appsync/product-details/

AuroraなどのRDBMSを利用する場合、Lambdaを利用する必要があり、

  • 最大処理時間5分問題
  • 複数回起動問題
  • コールドスタート問題

などのLambdaの制約が付きまとう点です。

Q . AWS AppSync で複雑なクエリを実行するにはどうすればよいですか?

A . AWS AppSync で利用できるデータソースでは、GraphQL を使用することで、Amazon DynamoDBAmazon Elasticsearch Service、AWS Lambda によって提供される機能を最大限活用できます。インデックス作成や条件チェックといった機能とマッピングテンプレートによって、DynamoDB から包括的な結果が返されます。あいまい検索、位置情報検索などの Amazon Elasticsearch Service のユースケースもアプリケーションで利用できます。さらに、Lambda を使用した連続的なリクエストやバッチリクエストによって、Amazon Aurora などの他のソースからもデータを返すことができます。

https://aws.amazon.com/jp/appsync/product-details/

クラスメソッドさんがチャット機能で利用したように適切なユースケースで利用すると効果を発揮しそうです。

5つのユースケースから理解するAWSのデータベースサービスの勘所

データベースサービスの使い分け

ユースケース データベースサービス
一般Webシステム Aurora, ElastiCache
サーバーレス DynamoDB
データ分析 Redshift, Athena, Aurora Parallel Query
IoT IoT Analytics, Redshift, Athena
レコメンデーション Neptune

Aurora - 複雑なクエリが必要な場合 - 同時多数アクセスがありうる場合(コネクションプールを活用する)

ElastiCache - 高速に読み書きが求められる場合

DynamoDB - 複雑なクエリが必要な場合 - 同時接続数が安定しており初回起動時間が長くても問題がない場合

Redshift データ分析で大容量データ(TB〜PB)を扱う必要があり、明確に分析対象が決まっている場合(PostgreSQL互換インターフェースをもつ)

Athena データ分析で大容量データ(TB〜PB)を扱う必要があり、明確に分析対象が決まっていない場合(Prestoを使用してS3ファイルへ並列にアクセスする)

IoT Analytics 多数のデバイスからの接続があり、デバイスのデータを継続的に登録する必要がある場合

Neptune 既存の行動データを元に推奨するアイテムを抽出したい場合

様々なユースケースでデータベースサービスを適切に使い分けるということを学んだセッションでした。

多くの場合はRDBMSで要件を満たすことができるかもしれないが、使い慣れたデータベースを選択するのはアンチパターンであり、RDBMSでは最適ではないかもしれないことを念頭に置くことが大切ということ学びました。

聞いたセッション

コンテナジャーニー〜AWSにおける段階式コンテナ運用〜

  • CI/CDの構築にCodePipline, CodeCommit, CodeBuildを使っている以外はほとんど同じ構成で自信にさせていただきました。

基礎から応用までじっくり学ぶ「AWSでのネットワークの作り方」

  • ランチセッションだったのであまりメモれませんでしたが、ネットワークに疎い自分でもわかりやすい内容でした。

クラスメソッドにおけるWebAPIエンジニアリングの基本的な考え方と標準定義

  • 会社として標準定義があるのはさすがクラスメソッドさんという印象で、RESTをファイルシステムメタファと捉えるのは新鮮でした。
  • RESTは一定の原則こそあれどかなり自由度が高く、定義するのはかなり大変だと思うので、RESTフレームワークにのっかちゃうという選択肢もアリかなと感じました。

AWSのセキュリティ設定がどうなっているか抜け漏れなくちゃんと確認する方法

  • insightwatchというクラスメソッド提供の無料セキュリティチェックサービスの紹介でした。
    ご利用中のAWSアカウントを無料でチェックし、セキュリティのガイドラインに沿った運用なのか、数分で確認いただけます ということでどこまで無料でできるかわかりませんが、便利そうです。

DevOps:変化の激しい環境でビジネス競争力を向上させる具体的な方法

  • コント調の発表がユニークでとても面白かったです。
  • バリューストリームマッピングワークショップ参加してみたいです。

今からでも遅くない 基礎から学ぶサーバーレス開発 -キホンの『キ』-

  • サーバーレスが注目されるまでの経緯をオンプレの時代から丁寧に解説されており、とてもわかりやすかったです。
  • ローカル環境構築のし辛さやアプリケーションフレームワークの不在といったサーバーレス開発のつらみの話が興味深かったです。