AWS Summit 2019 Day2, Day3 レポート

# はじめに

### AWS Summit ２０１９

> AWS Summit は、クラウドコンピューティングコミュニティが一堂に会して、アマゾン ウェブ サービス (AWS) に関する情報交換やコラボレーション、学習を行うことができる日本最大級のカンファレンスです。
https://aws.amazon.com/jp/summits/tokyo-2019/ より引用

### 会社へ感謝

丸２日間も参加させていただきましてありがとうございます。

---

# 参加の目的

サーバレスについての知識をより得たいと思い参加しました。

現状、会社の実業務でサーバーレス（Node.js）を利用したSNSキャンペーンを運用していて、サーバーレスの経験値はあります。また別業務でRoRを使ったサービスもおこなっており、Rspecがとても便利だと感じています。

* 実業務で利用している構成
    * ServerlessFrameworkで構築
    * ApiGateway
    * ELB(ALB)　※これだけTerraformで構築、連携は手動設定
    * Lambda(Node.js 10.x)
    * DynamoDB
    * Step Functions
    * CloudWatch Logs/Events

* 知りたいこと
    1. Node.jsでも同じようなテストがかけないかと思ったこと。
    1. セキュリティ面などに不安が残っており、どこらへんを注意するといいのか。
    1. 開発にあたりCI/CDも含めていい方法がないか。
    1. 発見があるブース、セッションでワクワクしたい。
    1. モチベーションが上がるので参加したい！！

以上の点から参加しました。

# 参加したセッション

### 6月13日
- AWS で実現する攻めのシステムモニタリング
- サーバーレスのエンタープライズへの拡大とベストプラクティス
- サムスンで実践される Galaxy スケールの AI サービスはどのようなデータベースアーキテクチャで支えられているのか?
- Serverless/AppSync によるモバイル開発の今
- コンテナ移行ってこんなに大変？ ～「家族アルバム みてね」を支えるインフラの裏側～
    - https://speakerdeck.com/isaoshimizu/container-migration-in-familyalbum
- AWSを活用したユーザー認証実装パターン解説
- DMM.comの改革とAWS
    - https://inside.dmm.com/entry/2019/06/14/awssummit2019
- Startup Architecture of the year 2019 ピッチコンテスト
    - [スナックミー](https://speakerdeck.com/miyoshihayato/startup-architecture-of-the-year-2019?slide=9)
    - [RevComm](https://www.slideshare.net/RevComm/aiip-miitel)
    - [スタメン](https://speakerdeck.com/uuushiro/tunag-false-etlji-pan-aws-summit-startup-architecture-of-the-year-2019)
- re:Mix

### 6月14日
- 基調講演
- ファミリーマートにおけるクラウド推進組織のつくりかた ～突然、クラウド推進担当になった！！～
    - [記事](https://www.msn.com/ja-jp/news/techandscience/%E3%80%8C%E5%90%9B%E3%80%81%E4%BB%8A%E6%97%A5%E3%81%8B%E3%82%89%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E6%8B%85%E5%BD%93%E3%81%AD%E3%80%8D-%E6%9C%AA%E7%B5%8C%E9%A8%93%E8%80%85%E3%81%8C1%E4%BA%BA%E3%81%A7%E5%A7%8B%E3%82%81%E3%81%9F%E3%80%81%E3%83%95%E3%82%A1%E3%83%9F%E3%83%9E%E3%81%AEaws%E7%A7%BB%E8%A1%8C%E3%81%AE%E8%88%9E%E5%8F%B0%E8%A3%8F/ar-AADj32u) 
- PayPay 100億円キャンペーンのシステム構築
    - [記事](https://www.itmedia.co.jp/news/articles/1906/17/news050.html)
- Amazon DynamoDB Deep Dive
   - 関連資料 [AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern](https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2018-amazon-dynamodb-advanced-design-pattern)
- サーバーレスアプリケーションのためのセキュリティアーキテクチャ
   - DevDayの資料 [Serverless Application Security on AWS](https://www.slideshare.net/AmazonWebServicesJapan/serverless-application-security-on-aws)
- めざせ！サーバレスプロフェッショナル
- Fate/Grand Orderにおける大規模なデータベース移行と負荷試験

## セッションで得たこと

細かい内容については、資料が公開されるはずなので書かないです。
噛み砕いた内容を書いていきます。

### モニタリング

* 目的を明確化すること！！
※決めておかないと無闇やらたに取得し通知してしまい大事なアラートを見落としてしまう 
   1. アプリケーションの正常性をチェック
   1. アプリケーションを元の状態に戻す
   1. トラブル原因の調査
   1. ユーザー行動を分析
   1. システムのキャパシティを分析

* モニタリングもPDCAといったサイクルで回すことが攻めの姿勢
   * **収集 > 監視 > 行動 > 分析 > 収集 > ・・・**
       * 収集: 目的から収集対象・粒度・保存期間決める
       * 監視: 通知頻度は負荷とトレードオフ。通知方法（メール、SNS）は一律同じじゃなくていい 
       * 行動: 適切なアクション（リソースの調整、システムの回復など）
       * 分析: 中長期的視点で、検索・可視化・BI・予測などができるような仕組み作り

### サーバーレス

サーバーレス版 **AWS Well-Architected** がまとまっている
[AWS Well-Architected Lens Serverless](https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf)

* APIの認証/認可どうしてますか？
   * Cognito
   * IAM
* LambdaからアクセスできるAWSサービスの保護どうしてますか？
* DyanamoDBなどのデータ保護どうしてますか？
   * AWS Systems Manager パラメータストア
   * AWS Secrets Manager
* 不正検知できてますか？
   * X-ray
   * CloudWatchLogs
   * CloudTrail
   * Config

* 開発フレームワーク
   * SAM(https://aws.amazon.com/jp/serverless/sam/)
       * カナリア, 線形デプロイが指定できる
       * SAMリポジトリがありCI/CDが簡単に実装できる
       * Unitテストが実装済み
       * SAM CLIが便利

### DynamoDB

* キャパシティーコントロールできてます？
   * うまくできないのを補助する仕組みがあります
   * バーストキャパシティ
       * 未使用の読み込みおよび書き込みキャパシティーを最大5分保持して超えた時に利用
   * アダプティブキャパシティー
       * 不均等なアクセスでパーティションのアクセスに偏りがあるときにキャパシティユニットを寄せる

* GSIを乱用しないような設計にしましょう
   * ユースケースの理解
   * アクセスパターンの理解
   * GSI OVERLOADINGという考え方
       * [本家ドキュメント](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-gsi-overloading.html)
       * [classmethod様の解りやすい記事](https://dev.classmethod.jp/cloud/aws/basic-of-gsi-overloading/)

* アクセスパターンを表にまとめて、利用されるインデックスが把握できるようにしましょう


# 立ち寄ったブース

- classmethod[Web](https://classmethod.jp/)
- 株式会社サイバーセキュリティクラウド [WafCharm](https://www.wafcharm.com/)
- CircleCI [Web](https://circleci.jp/)
- Auth0 [Web](https://auth0.com/jp/)
- AWS Game Tech[Web](https://aws.amazon.com/jp/gametech/)
- AWS 各サービスの質問ブース

などなど

# まとめ

* 開発面
    * ベンダーロックを避けたい想いもあり [ServerlessFramework](https://serverless.com/)にて開発を行ってきました。
    * SAMを軽視していた点もありましたが、AWSで開発するなら検討する価値がありだと感じました。
    * 車輪の再発明をしなくても、例えばCodeシリーズを使ったCI/CDがリポジトリにあって、それを組み込めば実現できるなどの手軽さは、今の人員などから考えると検討すべぎ点だと感じています。
    * ※おそらくServerlessFrameworkでも実現可能だと思います。

* セキュリティ面
    * APIGatewayにWAFを取り入れたり、IAMロールを細かく設定したりと対策を検討したいと思います。

* データベース面
    * 次回移行のプロダクト時に活かす
    * 既存は、現状の使い方をまとめて可視化する

---

ここまで読んでいただきありがとうございました。



# 余談

* PayPay 100億円キャンペーンのシステム構築が時間足りていなかったけど面白かった〜

資料が公開されるのを期待してます！！

1. 最先端の技術を使って構成されていました
    * k8s をつかって 60+マイクロサービスで可動
        * マイクロサービス間の連携は kafka
    * 構築にはTerraform
    * 裏側でYahoo、paytmと連携

1. マイクロサービスで気をつけることとして流入量がある
    * 第一回のキャンペーン
        * 外部連携サービスでトランザクションが滞留で全断した
        * 店舗から負荷の高いクエリが想定以上

1. テスト大事
    * 本番環境で、ユーザ行動と同じテストする
    * トラフィック、読み込み、書き込み