AWS SummitはAmazon Web Servicesのカンファレンスである。2020年はオンラインにて実施された。
本調査ではそのAWS Summit Online JapanのAWS セッションに参加してレポートを記載する。
Sponsored Links
本レポートの概要
AWS Summitは昨今毎年実施されている、Amazon Web Servicesのカンファレンスである。2020年はオンラインにて実施された。
AWS Summit Online Japanはライブ配信およびオンデマンド配信が実施されている。
そのAWS セッションに参加したため、その中の2セッションについてレポートを記載する。
AWS Summit Online Japan AWS セッションの概要
AWS セッションではAWSのサービスや導入メリット、最新テクノロジー・ソリューションやその活用例について説明している。
その中で下記のセッションのレポートを作成する。
- AWS-21:モダンアプリケーションのためのアーキテクチャデザインパターンと実装
- アマゾン ウェブ サービス ジャパン株式会社 ソリューションアーキテクト 清水 崇之
- AWS-09:これから初める Web・モバイルアプリ開発。AWS Amplify で手軽にちょちょいと
- アマゾン ウェブ サービス ジャパン株式会社 ソリューションアーキテクト 木村 公哉
AWS Summit Online Japan AWS セッションの詳細および所見
“モダンアプリケーションのためのアーキテクチャデザインパターンと実装”
本セッションの内容を一部我々の所見を加えながら、まとめる。
本セッションでは一般論としてのアーキテクチャやデザインパターンなどを紹介しつつ、AWSによる実現方法を説明。
- ITアーキテクチャのトレンド
- モノリシックからSOA、マイクロサービスへと変遷し、技術要素も激しく変化
- モダンアプリケーション開発
- 変化の激しい情勢の中、ビジネスを成長させて成功させるためには新しい製品を素早くデリバリーが必要。
これが実現可能なチームはアプリケーションの設計、開発、運用を継続的に革新している。
本手法をモダンアプリケーション開発と定義。 - 一貫して俊敏で柔軟なモダンアプリケーションを実現するには、最適な実装を選定しつつ拡張性の高いアーキテクチャをデザインする必要がある。
- 変化の激しい情勢の中、ビジネスを成長させて成功させるためには新しい製品を素早くデリバリーが必要。
- アプリケーション開発の方法論例
- Twelve Factor App
- Herokuのエンジニアが2011年に提唱したアプリケーション開発の方法論
- Beyond the Twelve Factor App
- 上記をアップデート
- Pivotalのアーキテクトが2016年に提唱したクラウドネイティブなモダンアプリケーション開発の方法論
- APIファースト、認証/認可、テレメトリーの考え方等が追加
- Twelve Factor App
- Beyond the Twelve Factor Appの原則
-
- 4つに分類
- 疎結合・相互運用
- 2.APIファースト
- マイクロサービスアーキテクチャの入口
- デザインパターン例: ゲートウェイパターン
- バックエンドサービスが複数ある場合や、UIやデバイスにより提供するコンテンツが異なる場合に有効
- 活用サービス例: Amazon API Gateway
- 15.認証/認可
- アプリケーションのエンドポイントはロールベースアクセス制御で保護
- IPによるアクセス制御はクラウドではアクセス元が増減し一時的のため不適切
- 活用サービス例: Amazon Cognito
- 8.バックエンドサービス
- バックエンドサービスはアタッチされたリソースとして扱う
- ローカルのDBやディスクを利用せず、DB (Amazon RDS) やストレージサービス (Amazon S3) を使用するイメージ
- ポリグロット・パーシステンス
- 大規模なシステムでは1つのデータストアでは全てのニーズを満たせない、要件に合わせて適切なデータストアを選択
- データストア例
- Amazon RDS
- Amazon DynamoDB
- Amazon ElastiCache
- Amazon DocumentDB
- Amazon S3
- Amazon Elastic File System
- ただし、最適なデータストアの選択時、開発者、運用者のスキルセットも意識する必要有
- [所見]
コンポートネントは利用可能なものなから、システム要件に応じて技術的に最適なものを利用したシステムアーキテクチャを設計したくなる。しかし、そのコンポーネントを利用するのは最終的に人のため、その学習・開発・運用コストも踏まえた をくなる設計が必要となる。
- サービス境界
- それぞれのサービスの相互運用の安定性考慮が必要
- サービス間の呼び出しを正しくデザイン
- 一つのサービスの障害がサービス全体に波及することを防ぐ
- 防御デザインパターン例
- タイムアウト
- スロットリング
- リトライ
- サーキットブレーカー
- バルクヘッド
- サービスディスカバリ
- バックエンドサービスはアタッチされたリソースとして扱う
- 11.ポートバインディング
- 2.APIファースト
- 伸縮性・弾力性
- 7.廃棄容易性
- 迅速に停止し、起動できること
- AWS Lamdaではデフォルトで対応、イベント駆動型
- 12.ステートレスプロセス
- プロセスの状態は保持すべきではない
- AWS Lamdaではデフォルトで対応、通常使用でステートレス
- 13.並列性
- 並列実行
- AWS Lamdaではデフォルトで対応、大規模同時実行、スケールを念頭
- 上記3つ原則を踏まえた伸縮性・弾力性を高めるデザイン
- これらの原則はコンピューティングだけでなく、アプリケーションを構成するサービスやコンポーネントについてもスケールするデザインが必要
- デザインパターン例
- 以下を組み合わせ、結合のボトルネックを解消し、アプリケーション全体の伸縮性・弾力性を高める
- コマンドクエリ責任分離
- イベントソーシング
- キャッシュ分離
- コレオグラフィ
- 非同期リクエスト・レスポンス
- パブリッシュ・サブスクライブ
- メッセージキュー
- シャーディング
- 静的Webホスティング
- 以下を組み合わせ、結合のボトルネックを解消し、アプリケーション全体の伸縮性・弾力性を高める
- 6.ログ
- ログはアプリ内部に標準出力ではなく、イベントストリームとして集約
- 活用サービス例: Amazon CloudWatch Logs
- 7.廃棄容易性
- モニタリング
- 14.テレメトリ
- ログを用いてパフォーマンス、ビジネス分析データ、他メトリクスをモニタリング
- 活用サービス例: AWS X-Ray
- 14.テレメトリ
- 自動化・継続性
- 4.設計, ビルド, リリース, 実行
- CI/CDは必要不可欠
- 活用サービス例
- AWS CodeCommit
- AWS CodeBuild
- AWS CodeDeploy
- 3.依存関係管理
- 5.設定, クレデンシャル, コード
- 9.環境一致
- 上記3原則の活用サービス例
- AWS CloudFormation
- AWS Cloud Development Kit
- AWS SAM
- 上記3原則の活用サービス例
- 1.1コードベース, 1アプリ
- 10.管理プロセス
- 4.設計, ビルド, リリース, 実行
-
- 特定のサービスやデザインパターンを妄信せず、原理・原則を尊重しつつ、広い視野でアーキテクチャを検討する必要がある。
- [所見]
現在のアーキテクチャは、開発した後の運用も含めDevOps双方で総合的に適切な設計が求められる。また、さらにビジネス観点も踏まえ、コストやSLAも加味しなくてはいけない。さらに技術、サービス、コンセプト、デザインパターンは常に進化する。そのため、可能であればBiz, Dev, Ops全ての経験を積み、さらに常に学び続け、全ての影響、利用可能なものを考慮して適切なシステムアーキテクチャが設計する必要がある。
これから初める Web・モバイルアプリ開発。AWS Amplify で手軽にちょちょいと
本セッションの内容を一部我々の所見を加えながら、まとめる。
- AWS Amplify
- Web・モバイルアプリ開発者向けプラットフォーム
- 高速にスケールするアプリを容易に開発可能
- https://aws.amazon.com/jp/amplify/
- web・モバイルアプリの3階層
- フロントエンド、バックエンド(webサーバ、DBサーバ)
- webシステムの3層アーキテクチャであるwebサーバ、アプリケーションサーバ、DBサーバとは異なる。webサーバとアプリケーションサーバがセットでwebサーバという階層となっている点に注意。
- フロントエンド、バックエンド(webサーバ、DBサーバ)
- フロントエンドの開発に利用される技術例
- webアプリは Single Page Application (SPA)の技術を利用
- 単一のページでJavaScriptを用いて動的に画面を更新するアプリ
- 例: マップサービス、SNSサービス
- JavaScriptライブラリ、フレームワーク例: React, Vue, Angular
- 初回アクセス時にwebホスティングサーバからHTML/CSS/JavaScriptを取得
- ページ遷移毎にJavaScriptからWeb APIサーバへリクエストし、API経由で取得したデータを基に差分更新
- Multi Page Application はwebサーバ (単一) に対してwebページ毎にリクエストし、都度全てを取得してページ全体を更新
- モバイルアプリはネイティブアプリの技術を利用
- スマートフォン向けに開発されたアプリ
- スマホ内で直接実行
- プログラミング言語はiOSでSwift, AndroidでKotlin等が利用される
- バックエンドとはAPI経由で通信
- 従来はクライアントにhtmlを送信していたが、SPA、モバイルアプリを組み合わせた場合、APIとしてデータのみを送信
- webアプリは Single Page Application (SPA)の技術を利用
- Web・モバイルアプリ開発で考える必要があること
- 一般的なweb/mobileアプリの構成要素
- 現代では単純なメイン機能提供だけでなく、プッシュ通知、クラインとイベント収集、ログ収集、分析、他システム連携、ユーザ間チャット等様々なものが必要
- 真に実現したいことは、機能を通してユーザに価値を提供
- AWS Amplifyはユーザに価値を提供するため、Web・モバイルアプリを高速にリリースするための開発プラットフォーム
- 一般的なweb/mobileアプリの構成要素
- AWS Amplifyの構成
- Amplify ライブラリ
- AWSバックエンドと容易に統合可能
- 通常はAWSの個別のサービスを意識したAPIを用いて例外処理も考慮しながら実装
- クライアントライブラリ JavaScript / iOS / Android
- 利用例: 認証、認可の機能をアプリに入れたい場合、Amazon Cognitoとの連携をAuthenticationカテゴリのライブラリを用いて用意に実装
- AWSバックエンドと容易に統合可能
- Amplify UIコンポーネント
- React, Vue, Angularなどに対応
- UIコンポーネントが提供されるので、例えば、認証用のUIなどが簡単に実装可能
- Amplify CLI
- インタラクティブOSSツールチェーン
- コマンドを実行し、対話型で回答するだけでサーバレスなバックエンドを構築可能
- バックエンドとの接続に必要な設定ファイルやソースコードの一部も自動生成
- Amplify Console
- Webアプリ向けホスティング、CI / CDサービス
- github等のリポジトリと接続しビルドを設定するのみで、アプリの自動デプロイが可能
- Amplify ライブラリ
- AWS Amplifyを利用した実装パターン例
- 静的webサイトのホスティング
- サーバレス、リアルタイムでのデータを扱う実装
- 複数のマイクロサービスを束ね、フロントエンドからシンプルにAPIにアクセスする実装
- [所見]
本AWS AmplifyやGCPのFirebaseなど、Web・モバイルアプリ開発者向けプラットフォームの活用が活発化している。これらのプラットフォームはバックエンド構築に必要なITインフラの知識や運用の技術がないアプリ開発者であっても、最善ではないが最低限のITインフラが開発可能となり、円滑な運用が可能となる。そのため、その辺りの知識、技術がない開発者にとっては利用することにより、大きなメリットを享受可能となる。
Sponsored Links