開発日報

窓際エンジニアの開発備忘。日報は嘘です。

【連載】執筆中。。AWSモダンアプリケーション開発ホワイトペーパー(英語版)まとめ第1回 ~ モダンアプリケーション開発 ~

はじめに

この連載ではawsを用いたモダンなアプリケーション開発の手法を学びます。
基本的に内容はawsが公開したモダンなアプリケーション開発のホワイトペーパーをまとめたものとなります。

連載記事一覧

記事一覧はこちら

モダンアプリケーション開発

モダンアプリケーションの持つべき機能

モダンなアプリケーションは以下の機能を持っています。

  • 安全性(Secure) : アプリケーションは全てのレイヤにおいて安全でなければならない。またライフサイクルのどのフェーズにあっても安全でなければならない。

  • 耐障害性(Resilient) : 分散アプリケーションの一部に障害が発生しても、アプリケーションが応答しなくなることはない。アプリケーションが外部サービスの呼び出しに失敗した場合でも、適切にエラーハンドリング・リトライが行われ、緩やかな機能停止で済むようにする。

  • 伸縮性(Elastic) : リクエスト数やその他のメトリクスに応じて、柔軟にスケールイン・スケールアウトが行われる。

  • モジュール化(Modular) : 凝集性が高く、他のモジュールと疎結合になっている。それぞれのモジュールはドメインの境界によって適切に分割されていて、独立して管理されている・

  • 自動化(Automated) : インテグレーションとデプロイが自動化されており、リリース頻度が高くても高い品質が担保されている。CI/CDパイプラインを使用して、ソースコードがバージョンコントロールされたリポジトリにpushされる度に自動でテストが走り、テストを通過したら自動でデプロイが走る・

  • 相互運用性(Interoperable) : 各サービスは実装の詳細を隠蔽したまま、全ての機能を外部に提供しなければならない。そして、他のサービスに影響を与えることなく独立してデプロイできる必要がある。

モダンアプリケーション開発におけるベストプラクティス

セキュリティとコンプライアンス

  • 認証(Authentication) : IAMやAmazonCognitoを使用してリソースへのアクセスに対する認証を行いましょう。

  • 認可(Authorization) : IAMを使用したロールベースの認可によって、使用できるリソースへのアクセスを認可しましょう。

  • 監査と統治(Auditing and Governance) : AWS CloudTrailはAWSAPIとの疎通の状態を監査できます。また、Amazon CloudWatch を使用すればログを収集してアプリケーションの監査を行えます。AWS Configによって使用しているAWSリソースが所属する組織の標準に沿って構築されているか確認することができます。

  • バリデーション(Validation) : あらゆる面でのアプリケーションの機能や動作が意図した通りの物か確認しましょう。CI/CDを活用して可能な限りアプリケーションの検証を自動化しましょう。

モダンアプリケーションは高頻度でテストが行われ、かつ開発速度が遅くならないようにしなければなりません。同様に、開発者の権限は適切に制限すべきですが、かといって必要な権限まで剥奪してはなりません。セキュリティはアプリケーション全体に、全てのライフサイクルに渡って確立されている必要があります。また、セキュリティのプロセスや標準は継続的に再評価される必要があります・

マイクロサービスアーキテクチャ

モノリシックなサービスが肥大化すると、一部の修正の影響範囲が非常に広範になります。結果としてアプリケーションの修正に時間がかかるようになり、スピーディー開発とリリースのサイクルが失われてしまいます。

モノリシックなアプリケーションをマイクロサービスとして分割・再構築することによってよりアジャイル性の高い、柔軟なアプリケーションにすることができます。それぞれのサービスは独立してデプロイされ、修正・ビルド・デプロイがより高速になります。また、1つのチームが1つのマイクロサービスを管理するため、開発・設計などの所有と責任の範囲が明確になります。

個々のマイクロサービスが疎結合となるためには、外部から依存関係や実装を隠避し、サービス同士の通信はAPIもしくはメッセージキューでやり取りする必要があります。複数のサービスで1つのDBを共有するとサービス同士の結合が高まってしまい(密結合)ますので禁止。

マイクロサービスによって構築されたシステムは、スケーラビリティ、回復力、可用性、一貫性を提供し、分散トランザクションも可能です。

また、マイクロサービスの場合、
全体的なサービス間のワークフローを管理する方法を考えなければなりません。
(サービス間通信のタイムアウト、処理のキャンセル・中断、監視、各サービスおよびサービス感の処理パフォーマンス...などに対応するための。)「AWS Step Functions」がお勧めだそうです。

サーバーレス技術の活用

システム管理者がOSのパッチ適用や、定期的なリクエスト増によるサーバーのスケーリングなど、サーバー・システム管理のための定型的な作業が多い場合、サーバーレス技術の活用を検討しましょう。

AWS Auto Scaling」「AWS Systems Manager」の使用によって、アクセス量によるスケーリングや、OSパッチ、その他プロビジョニング等、サーバー管理に使用していた時間を削減することができます。

AWS Lambda」「AWS Fargate」「Amazon S3」「 Amazon DynamoDB」「Amazon Aurora Serverless」などを使用して、積極的にサーバーレスを進めましょう。