michimani.net

知っ得ハンズオンシリーズ はじめての Serverless@AWS Loft Tokyo に行ってきました

2019-02-27

AWS Loft Tokyo で開催された Hands-on for developers_Hajimete serverless_Tokyo_20190227 - 知っ得ハンズオンシリーズ はじめての Serverless に参加してきたので、そのレポート・メモです。

目次

スケジュール

座学セッション

最初は座学セッションということで、今回やるハンズオンの説明と、そもそも Serverless とは?というところから、AWS におけるサーバーレスコンピューティングについてのセッションでした。 私は、サーバーレスという言葉自体はもう既に何度も聞いたことがあるし、内容についてもふんわりとは分かっているという状態。また、実際に AWS Lambda で関数も作ったことがある。そんな人間なので、最初の座学セッションは良い復習になりました。

以下、座学セッションのメモです。

今回やるハンズオンの内容

Step1

Step 2

Serverless とは

AWS におけるサーバレスコンピューティング (と今回使うサービスの概要)

ハンズオン

ハンズオンは Step1 と Step 2 に分かれていましたが、それぞれ (一応) 独立しているのでどちらからやっても OK という形式でした。 ハンズオン用の資料.zip をダウンロードして、その中に含まれる PDF を見ながら、同じく zip 内に含まれるサンプルスクリプトやコピペ用テキストを利用して、各自黙々と進めていき、質問があれば適宜 SA さんに声をかける という形でした。

Step1: Cognito, IAM を利用して S3 のバケット操作で権限による挙動の変化を確認する

実装したサンプルは次のような内容です。

図にするとこんなイメージです。

Handson Cognito

これまでは Cognito ってどうやって使うんや? っていう状態でしたが、今回のハンズオンで少しわかった気がしました。

Cognito は認証・認可基盤のサービスです。AWS では IAM も認証・認可基盤のサービスですが、その違いとしては、IAM は認証・認可する対象が AWS のリソース であるのに対して、Cognito は対象が クライアントアプリ という点です。クライアントアプリから認証を行うことで、その認証に適用されている IAM ロールの権限をもって、AWS リソースにアクセスできる という感じです。

どうでもいいですが、 Cognito は **コグニート** って読むんですね...。勝手に **コグナイト** だと思ってました。

ちょっと取っ掛かりにくいサービスではありますが、とりあえず Cognito で何が出来るのか はわかりました。

Step2: API Gateway, Lambda, DynamoDB を利用して REST インターフェースを構築する

実装したサンプルは次のような内容です。

図にするとこんなイメージです。

Handon API Gateway

API Gateway については、過去に使ってみようとしたものの、コンソール上の操作がよくわからずに中途半端なところで挫折した という経緯があります..。たが、今回は前述したとおりハンズオンの資料が非常に丁寧だったので、順を追って操作することができました。

ちなみに、ハンズオンの資料内では API Gateway で生成されたエンドポイントを直接叩くところまでしか書いてありませんでしたが、資料内の js ファイルを少し修正すれば、Ajax で実行できるようになっていたようです。

ハンズオンの時間が少し余ったのでそのあたりを試していたのですが、詰まったポイントがあったので書いておきます。

ハンズオンの資料に用意されている html (localhost) から Ajax で API を実行しようとすると、CORS エラーで実行できません。なので、API Gateway で CORS を有効にする必要があります。

API Gateway CORS 1
API Gateway CORS 1

また、有効化したあとは再度デプロイしないと反映されません。そこもハマったポイントでした。

これで localhost からも Ajax で実行できるようになりました。今回はサンプルということで Access-Control-Allow-Origin"*" にしてますが、アクセス元がわかっているなら明示的に指定したほうがよさそうです。


Step2 のハンズオンでは、 API Gateway の他に DynamoDB も使いました。こちらも初めて使いました。 思っていたよりも簡単に使えるのと、なにより料金が安い!個人で使うレベルであれば無料枠内でおさまります。一方、RDS は結構な料金がかかるので、なかなか個人では試せないという印象です。 NoSQL についてはこれまではあまり触ってこなかったんですが、更新の少ないシンプルな REST API では、RDB より断然 NoSQL だなとあらためて感じました。 RDB と NoSQL では用途がぜんぜん違うので単純な比較は難しいですが、これまでは簡単な API ですら RDB を使おうとしていたので、その考え方が変わったのは良かったです。

全体の感想

AWS Loft Tokyo

AWS Loft で開催されるハンズオン、というかハンズオン自体はじめての参加でしたが、以上に充実した時間でした。ハンズオン用の資料も丁寧に作られていて、基本的に手順通りに操作していれば最低限の目的のものは完成するという状態でした。 今回であれば、途中で IAM ポリシーの作成や S3 バケットへの CORS 設定などの手順もありましたが、それらの設定のために必要な文字列、JSON データもハンズオン資料にすべて含まれているため、スムーズに進めることが出来ました。

かと言って、単純なコピペ作業で終わるのではなく、提供された資料に含まれるサンプルコードも、後に自分で何か実装するときには役に立つものだと思いました。今回は Web 上から Cognito で認証したり、S3 バケット内のリストを取得したりファイルをアップロードしたり、また、Ajax で API Gateway のエンドポイントにアクセスしたりする内容でしたが、それらの操作を実現する JavaScript の処理 (.js ファイル) はハンズオン資料にすべて含まれています。なので、これらを見ることで自分で実装するときの参考にできるというわけです。

こんなにも充実したハンズオンが、なんと無料で受けられるなんて驚きですよね。 先週は JAWS DAYS で色んな話を聞いてきましたが、やはり自分で手を動かしてみないとわからない部分は多いと思うので、ハンズオン形式で実際にサービスを触るというのは凄く良いなと思いました。

ちなみに、同じ内容のハンズオンが 3/26 (火) 18:30-20:30 に開催されるようなので、Cognito, API Gateway, DynamoDB などのサービスを実際に触ってみたい方は参加してみてはいかがでしょうか。

API Gateway 完全に理解した。

— よっしー (michimani) (@_michimani_) February 27, 2019

理解したとは言っていない。

以上、よっしー (michimani) でした。