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

<img width="1081" alt="Screen Shot 2019-06-08 at 16.24.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/65a640fc-1b38-5652-46aa-e61f7d25e188.png">

[Serverless Framework Enterprise](https://serverless.com/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上でログインするだけで、デプロイが出来るようになります。チームで開発するためには非常に便利な機能です。


## インストール
まずは、[ダッシュボード](https://dashboard.serverless.com/)にアクセスをしてアカウントを作成しましょう。

<img width="1195" alt="Screen Shot 2019-06-08 at 18.04.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/da7921c8-feff-3a43-d72a-81cc5f287a89.png">

すると自分自身のスペースである`tenant`が出来ますので、まずはapplicationを登録します。
applicationが登録できたら、次はServerless Application側の設定を行っていきます。

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

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

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

```yaml:serverless.yml
plugins:
  - '@serverless/enterprise-plugin'
```

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

```yaml:serverless.yml
tenant: horike37
app: serverless-realtime-ranking
service: realtime-ranking

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

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

```
$ serverless login
```

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

```
$ serverless deploy
```

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

<img width="922" alt="Screen Shot 2019-06-08 at 18.12.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/33b37c55-4a6b-3509-0152-654c8f6cbd83.png">

<img width="1424" alt="Screen Shot 2019-06-08 at 18.12.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/840887cf-b0e1-e9ec-0b47-5906e63d2774.png">

## ダッシュボードから確認が出来るもの
### エラー発生時のstack trace

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

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

<img width="625" alt="Screen Shot 2019-06-08 at 18.20.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/bd3e33e7-8536-6d22-319e-e3560d5f23d1.png">

<img width="824" alt="Screen Shot 2019-06-08 at 18.20.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/a2eb2a5c-b8c3-526c-36cd-a24b54a22f3c.png">

### エンドポイントの情報

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

<img width="925" alt="Screen Shot 2019-06-08 at 18.25.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/0ce20106-dedb-2cfe-8098-a0ddaa6a2b67.png">

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

### IAM Role
<img width="907" alt="Screen Shot 2019-06-08 at 18.31.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/93f5da2e-8242-6ec6-db9a-0c1998cb79af.png">

### safegurd policy
<img width="798" alt="Screen Shot 2019-06-08 at 18.31.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/243c0a14-73bf-a480-f203-d13a88469d46.png">

### secret store
<img width="814" alt="Screen Shot 2019-06-08 at 18.32.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/c9afa25b-b162-19d8-51cd-6f426703292b.png">

## teamに開発者を招待する

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

Serverless Framework自体はAdministratorの権限を付与することを推奨していますが、これはチーム開発の観点からするとあまり良くありません。しかし、ここからチームに招待することで、Serverless Frameworkで可能なコマンドでアクセスできるリソースにしかアクセスできません。また、退職などでチームから抜ければアカウントをremoveるだけでよいので、よりセキュアにより簡潔にチーム開発が出来るのではないでしょうか。
<img width="1056" alt="Screen Shot 2019-06-08 at 18.34.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65478/8b66e7f9-2c82-8e40-f6eb-9eeb7ce11309.png">

## 全体的な感想

まだまだ、バージョンも0.1と成熟は仕切っていないですが、非常にUIが使いやすくこれからの成長が楽しみです。
ただ、特にモニタリングの機能がFunctionとeventにフォーカスがあたっていて、もう少しServerless Application全体の構成やイベントのトレーシング、マイクロサービス間の依存関係などが可視化できればより良いんじゃないかと思いました。

さらにここ最近ではどんどんLambdaを書かずにマネージドサービスに処理を任せていく流れが出来てきています。
そういった意味では、モニタリング項目はLambdaだけでなくDynamoDBのスループットやスロットリングの項目なども必要になるでしょう。

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