はじめに
AWS SUMMIT TOKYO 3日目の最終セッションのレポートです。
登壇者
AWS 福井厚氏
なぜモダンアプリケーションなのか
- 急速なイノベーションはもはや必須
- 利益を伸ばす
- 今ある人材を活用
- 利益を伸ばす
- 急速なイノベーションがビジネスを進化させる
- 新たなデジタル製品・サービス
- 実験がイノベーションを加速する
- Innovation Flywheel
- 実験、傾聴、反復のサイクル
- Innovation Flywheel
- AWSのイノベーション数
- 年々増えている
- 数千のチーム
- マイクロサービス
- 継続的デリバリ
- 年々増えている
モダンアプリケーション開発とは
- 既存のアプリをすべてマイクロサービス化しないといけない、というわけではない
- 優先順位付け
- モダン化のパスを決定
モダン化パターン
- Re-host
- ほとんど変更しない社内アプリ
- Re-platform
- Re-architecture
- Re-invent
- 設計し直し、再構築
モダンアプリ開発のベストプラクティス
- 6つある
- ライフサイクル全体に渡ってコンプライアンスとセキュリティを構築
- マイクロサービスの集まりにする
- サーバレスを使う
- モデリングとインフラにコードを利用する
- CI/CDで迅速にリリース
- モニタリングする
ライフサイクル全体に渡ってコンプライアンスとセキュリティを構築
- 認証
- 認可
- Audit
- 検証
- 自動化された継続的なセキュリティ評価が必要
- AWSが提供するサービスを最大限利用
マイクロサービスの集まりにする
- 変更の影響が少なくなる
- モノリシック
- すべてを実行
- マイクロサービス
- 一つのことを実行
- 個々に独立
- APIでのみ会話
- 疎結合
- イベント駆動による非同期transaction
- ワークフローで複数のサービスを連携する
- StepFunctionsなど
- 冗長なコードを排除する
- StepFunctionsなど
- モノリシック
サーバレスを使う
- メリット4つ
- インフラ管理が不要
- 利用単位ごとにオートスケール
- 価値に対して支払う課金モデル
- 高い可用性と耐久性
- 最小の努力で最大のアジリティを提供
- コンピュートの選択
- Lambda
- イベント駆動
- Fargate
- ロングランニング、バッチ処理に向いている
- サーバレスコンテナ
- Lambda
モデリングとインフラにコードを利用する
- 全てをソフトウェアとして扱う
- インフラのスピードとアジリティを向上
- AWS Cloud Development Kit(CDK)
- ymlではなく、TypescriptやPythonで書けるツール
- Githubで公開している
CI/CDで迅速にリリース
- CI/CDを自動化しているチームは、コードを早く、自信を持って書いている
- 新しい作業二時間を欠けられるようになっている
- Code3兄弟を使う
- CodePipelineを構築する
- Source
- build
- Test
- Deploy
- CodePipelineを構築する
モニタリングする
- より早く問題を識別すると、より早く解決できる
- 分散されたアプリをどう可視化するか?
- CloudWatch
- X-Ray
- 分散アプリを分析とデバッグ
モダンアプリケーションの実装パターン
APIゲートウェイパターン
- API Gatewayを中心としたパターン
- 認証・認可
ディスカバリサービスレジストリパターン
- AWS Cloud Map
- ARNによる名前解決
サーキットブレーカーパターン
- 5xx系のエラーが起きたときに呼び出し元がエラーになることを防ぐ
- 相手側が停止しても処理を継続する
- 呼び出し側がしきい値を超えてエラーをするとResponseを返す
- コンテナでやる
- ECS+Linkerd
- EKS+Lstio +envoy
コマンドクエリ責務分離パターン
- CQRSパターン
- 参照系と更新系を分離する
- それぞれのデータソースやクエリサービスを分離する
- 結果整合性を許容しないと使えない
- Aurora+Lambda+DynamoDB
イベントソーシングパターン
- DB直接更新ではなく、ビジネス的なイベント
- Kinesis+Lambdaで実現
コレオグラフィパターン
- アカウント登録すると、Eメール送信、ポイント付与、など1アクションに対して様々なアクションを行うパターン
- コレオグラフィは振り付け、という意味
- SNS+SQS+Lambda
集約ログパターン
Polyglotパーシステンスパターン
AWSにおける継続的インテグレーション/デリバリーの実現
SAPアプリのDeploy
- AWS Amplify Console
コンテナへのDeploy
- CodePipeline
- CodeDeployを使えば、ブルー・グリーンデプロイメントできる
LambdaへのカナリアDeploy
- Lambdaのバージョンとエイリアスの機能+CodeDeploy
- 段階的なDeploy
- 10分かけて前のLambdaから新しいLambdaへ処理を切り替える、など
ホワイトペーパー出た
AWSモダンアプリケーション開発ホワイトペーパー
まとめ
本セッションでは、6つのモダンアプリ開発のベストプラクティスと、モダンアプリケーションの実装パターンを学ぶことができました。「既存のアプリをすべてマイクロサービス化しないといけない、というわけではない」とお話されていましたが、私のプロダクトはモノリシックな構造であるため、部分的にマイクロサービス化できる箇所がないかを考える、良いきっかけをいただきました。