ServerlessFramework

Serverless Framework Enterpriseで快適なサーバレスアーキテクチャの開発と運用を行おう

Screen Shot 2019-06-08 at 16.24.20.png

Serverless Framework Enterpriseとは、サーバーレスアーキテクチャでの開発や運用をより簡単に、よりスピーディーに行うことを支援するためのダッシュボードです。

Serverless Frameworkでデプロイを行ったマイクロサービスに対して、様々な支援機能をダッシュボードで提供します。

以下のような機能が提供されています。


Serverless Insights

いわゆるモニタリングのための機能です。現状ではLambdaの実行時間や実行数、エラーの状況をモニタリングできます


Serverless Safeguards

デプロイ時にセキュリティの観点から問題がある設定になってないかをチェックしてくれます。例えば、IAM Roleに*つかってないかとか、トークンのようなものを設定ファイルに直書きしてないかとか、あとはデプロイするstageやregionを制限することも出来ます。これらのチェック項目はそれぞれ自由に設定ができます。


Serverless Secrets

セキュアなトークンを暗号化して保持する機能です。AWSのSSM Secret Parametor Storeと同じような機能ですが、より簡単に使えるようになっています。serverless.ymlファイルから${secrets:<key>}といった書き方でどこからでもアクセスが可能になります。


Serverless AWS Access Roles

デプロイ用のIAM Roleをダッシュボードに登録することで、ローカルにクレデンシャルを保持しなくてもデプロイが可能になります。ダッシュボードからユーザを発行して、そのユーザでローカルのPC上でログインするだけで、デプロイが出来るようになります。チームで開発するためには非常に便利な機能です。


インストール

まずは、ダッシュボードにアクセスをしてアカウントを作成しましょう。

Screen Shot 2019-06-08 at 18.04.16.png

すると自分自身のスペースであるtenantが出来ますので、まずはapplicationを登録します。

applicationが登録できたら、次はServerless Application側の設定を行っていきます。

自身のServerless ApplicationにてServerless enterpriseプラグインを以下のコマンドでインストールしてください。

$ serverless plugin install -n @serverless/enterprise-plugin

serverless.ymlファイルのpluginsセクションに以下のような記述があればインストール成功です。


serverless.yml

plugins:

- '@serverless/enterprise-plugin'

そして自身のtenant名とapplication名を追記してください。


serverless.yml

tenant: horike37

app: serverless-realtime-ranking
service: realtime-ranking

provider:
name: aws
runtime: nodejs10.x
stage: dev


コマンドラインからログインしてください。ブラウザが立ち上がってコマンドライン上でもログイン状態となります。

$ serverless login

そしてデプロイしましょう

$ serverless deploy

デプロイに成功すれば以下用にダッシュボードから確認ができるようになります。

Screen Shot 2019-06-08 at 18.12.24.png

Screen Shot 2019-06-08 at 18.12.53.png


ダッシュボードから確認が出来るもの


エラー発生時のstack trace

この機能はかなり便利だと感じています。Lambdaのエラーが何件発生しているかはダッシュボードから確認できるのですが、それらをクリックすることでソース上のどこでどのようなエラーが発生しているのか明確に見れることが出来ます。

かなりデバッグや本番環境下でのエラーの除去に有用な機能じゃないでしょうか。

Screen Shot 2019-06-08 at 18.20.15.png

Screen Shot 2019-06-08 at 18.20.37.png


エンドポイントの情報

API Gatewayを上げた時のエンドポイントのURLが確認できます。エンドポイントのURLって結構確認が大変なので地味に便利な機能じゃないでしょうか。

Screen Shot 2019-06-08 at 18.25.44.png


profilesの設定

profileを作成して、それをServerless Applicationに紐付けることで、Applicationごとにセキュリティの設定やSecretパラメータやIAM Roleを切り替えることが出来ます。


IAM Role

Screen Shot 2019-06-08 at 18.31.17.png


safegurd policy

Screen Shot 2019-06-08 at 18.31.58.png


secret store

Screen Shot 2019-06-08 at 18.32.29.png


teamに開発者を招待する

チームで開発や運用を実施したい場合はその人用のダッシュボードのアカウントを作成して招待すれば、そのServerless Applicationの管理デプロイをAWSのアクセスキーを発行することなく実施できます。

Serverless Framework自体はAdministratorの権限を付与することを推奨していますが、これはチーム開発の観点からするとあまり良くありません。しかし、ここからチームに招待することで、Serverless Frameworkで可能なコマンドでアクセスできるリソースにしかアクセスできません。また、退職などでチームから抜ければアカウントをremoveるだけでよいので、よりセキュアにより簡潔にチーム開発が出来るのではないでしょうか。

Screen Shot 2019-06-08 at 18.34.19.png


全体的な感想

まだまだ、バージョンも0.1と成熟は仕切っていないですが、非常にUIが使いやすくこれからの成長が楽しみです。

ただ、特にモニタリングの機能がFunctionとeventにフォーカスがあたっていて、もう少しServerless Application全体の構成やイベントのトレーシング、マイクロサービス間の依存関係などが可視化できればより良いんじゃないかと思いました。

さらにここ最近ではどんどんLambdaを書かずにマネージドサービスに処理を任せていく流れが出来てきています。

そういった意味では、モニタリング項目はLambdaだけでなくDynamoDBのスループットやスロットリングの項目なども必要になるでしょう。

それらの機能が実装されてCloud2.0時代に必要なツールとなるようフィードバックしていければと考えています。