いつも忘れないように、コンセプトから。
###コンセプト
・お金かけてまでやりたくないのでほぼ無料でAWSを勉強する
→ちょっとしたサービスを起動すると結構高額になりやすい。
・高いレベルのセキュリティ確保を目指す
→アカウントを不正に使われるととんでもない額を請求されるので防ぐ
無料ではないんですが(無料枠がある人はつかますが)、お安い金額でお勉強です。
GWもはじまり、Stay Homeで暇なんで「サーバーレスのウェブアプリケーションを構築する」を体験してみました。
https://aws.amazon.com/jp/getting-started/projects/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/module-5/
学習できるサービスは、
- AWS Lambda
- Amazon APIGateway
- Amazon S3
- Amazon DynamoDB
- Amazon Cognito
です。
###まずは感想から
チュートリアル自体は2時間あれば多少調べながらやっても終わると思います。時間的・金銭的なお手軽さはなかなかいい感じです。ただ、やってみて「で、結局なんだったの?」という内容なので、楽しさは無いです。一応認証を通してログインしてAPI経由で動くので、へーって感じはしますが、それまで。個人的には使ったことのないCognitoに興味がありました。あとはAPIGatewayもほとんど使わないのでやってみたかったのはあります。特に難しくもないのですが、ポイントだけ記載しておきます。
#####モジュール 1:静的ウェブホスティング
ここは簡単です。極端に言えばS3を作成してファイルを配置するだけなので楽勝。しいて言えば、S3の公開設定なんて普段絶対にやらないので、背徳感があるというか、ドキドキするくらいです。まあ、インターネット系の開発をしている人は全然気になるところではないんでしょう。
#####モジュール 2:ユーザー管理
ユーザー認証をCognitoで設定します。設定したらNode.js側の設定ファイルに、Cognitoを使えるように設定します。
/js/config.js ファイルには、ユーザープール ID、アプリクライアント ID、およびリージョンの設定が含まれています。前のステップで作成したユーザープールとアプリケーションの設定でこのファイルを更新し、ファイルをバケットにアップロードします。
とあるので、指示に従って行えば簡単です。ユーザープールの概念だけ理解しておけばよいと思います。パスワードポリシーとか、MFA有効化とか、簡単にできるんですね。これは非常に便利だと思いました。
#####モジュール 3: サーバーレスサービスバックエンド
ここはDynamoを設定してLambda関数を作成するのですが、AWSで一番の難敵であるIAMはサラッと記載されているので注意が必要です。ポリシー設定もちゃんと登場はするんですが、基本的にチュートリアルではコピペで終わってしまうので、実際に環境構築する場合には難しいところです。動かすだけなら簡単なんですが、セキュアに組むとなると一気にハードルが上がるところです。特に外部公開するようなシステムであれば重要なので、ポリシー作成のあたりはもう少し補足が欲しいなと思いました。別のチュートリアルやればいいんでしょうけど。。。
#####モジュール 4: RESTful API
今回一番難しかったところです。いろいろ設定していくんですが、クライアントからLambdaにどう連携するかがチュートリアルの説明だとわかりにくかったです。出来上がってしまうと以下の画面で連携を確認できるんですが、設定途中だとイメージしにくかったです。慣れていれば問題にはならないでしょうけど、オーソライザーとの関係とかもはじめはよくわかってなかったです。
###まとめ
仕事ではAPIGatewayを使うことはほぼないですが、簡単に構築できるのは素晴らしいと思います。ただ、使いこなすのにはそれ相応のスキルが必要ですね。どうしてもセキュリティに目が行ってしまいますが、どうやって安全に構築できるかをどうやって確認するかは課題だなと思いました。CISベンチマークに情報が無いかなと思ったんですが、
https://www.cisecurity.org/
「CIS Amazon Web Services Foundations Benchmark v1.2.0」を見てみましたがAPI Gatewayは無かったですね。書かれているのが2018年5月なので情報も少し古いです。現状の対象サービスは以下のようなので、早く追加されるとうれしいなとは思います。
- AWS Identity and Access Management (IAM)
- AWS Config
- AWS CloudTrail
- AWS CloudWatch
- AWS Simple Notification Service (SNS)
- AWS Simple Storage Service (S3)
- AWS VPC
とりあえず今日はここまで。