助け合いフォーラム

AWS

AWS ソリューションアーキテクト - アソシエイト(SAA-C02)
問題ID : 29358
問題を開く
ある企業は、モノリシックな多階層構成のアプリケーションをオンプレミスで運用している。アプリケーションの1層目はデータ統合用のプログラム、2層目はデータ解析用のプログラムで、データ解析用プログラムはデータ統合用プログラムより処理に何倍も時間がかる。AWSへ移行するにあたって、アプリケーションのデカップリングを実現した上で、マイクロサービスとして動作させたい。
次のうち最も適切なソリューションはどれか。

正解

プログラムをAmazon ECSで動作する2つのコンテナに再設計する。データ統合用プログラムは処理が完了した後、SQSキューにリクエストを投入する。データ解析用プログラムはSQSキューからのリクエストを処理する。

解説

大きな機能を一つに総括したシステムをモノリシックなシステムといいます。モノリシックとは反対に、最小限の機能を持つ独立したサービスのことをマイクロサービスといいます。
マイクロサービスの主なメリットは、ある機能に障害が発生したりアップデートした場合に他の機能への影響を最小限にできること、機能を別のサービスに流用することが容易になるので開発コストの削減に繋がることなどが挙げられます。


Amazon ECS(Elastic Container Service)はコンテナを実行、管理するサービスです。「コンテナ」とはアプリケーションと実行環境をパッケージ化する仮想化技術の一種のことです。
コンテナはマイクロサービスの実現に適しています。ひとつのサービスをひとつのコンテナで実行することで効率的にマイクロサービスを構築できます。

Amazon Simple Queue Service(SQS)はフルマネージドのメッセージキューイングサービスです。
「メッセージキューイング」とは個々のサービスやシステムを「メッセージ」を使用して連携する仕組みのことです。

サービスAはクライアントからのリクエストを受け、キュー(queue)と呼ばれる領域にリクエスト(メッセージ)を投入します。サービスBはキューからメッセージを取得し、処理します。

メッセージキューを利用すると、お互いのサービスがそれぞれの状況に関係なく(非同期で)処理を進行できるため、サービス間の結合度が低くなります。このように、システムを構成するサービスやコンポーネント間の結合度や依存度を低くし、独立性を高めることを「疎結合」または「デカップリング」といいます。
サービス間の結合度を低くすると以下のようなメリットがあります。
・関連するサービスの負荷や処理状況に引きずられずに自身の処理を進行できる
・関連するサービスで障害が発生した場合やアップデートなどの際に影響を受けずに済む
SQSはこのようにサービス同士を橋渡しする役割を持つAWSサービスです。

設問のケースに当てはめると、モノリシックな多階層構成のアプリケーションをECSで動作する2つのコンテナでマイクロサービス化します。そして、1つ目のデータ統合用のプログラムより、2つ目のデータ解析用のプログラムの方が処理に何倍も時間がかかるので、各プログラムが非同期でプログラムを実行できるようにSQSでデカップリングします。

したがって正解は
・プログラムをAmazon ECSで動作する2つのコンテナに再設計する。データ統合用プログラムは処理が完了した後、SQSキューにリクエストを投入する。データ解析用プログラムはSQSキューからのリクエストを処理する。
です。

その他の選択肢については、以下のとおりです。

・プログラムをAmazon ECSで動作する2つのコンテナに再設計する。データ統合用プログラムは処理が完了した後、SNSへイベントを通知する。データ解析用プログラムはSNSトピックをサブスクライブして処理を実行する。
SNSはプッシュ型のメッセージングサービスです。SNSの通知はリアルタイム性の高い処理に向いています。
デカップリングは実現できますが、非同期でリクエストをやりとりするにはSQSの方が適しているので、誤りです。

・プログラムを2つのLambda関数に再設計する。データ統合用プログラムは処理が完了した後、Amazon Kinesis Data Firehoseにデータを送信する。データ解析用プログラムはKinesis Data Firehoseからデータを読み込み処理を実行する。
Lambdaはサーバーレスでプログラムのコードを実行できるサービスです。Kinesis Data Firehoseは収集したストリーミングデータをストレージやデータベースなどへ配信するサービスです。Kinesis Data Firehoseは、IoTデバイスやスマートフォンアプリなどからの大量のストリーミングデータを収集するのに適しています。
Lambdaはマイクロサービスの実現に適していますが、Kinesis Data Firehoseはアプリケーションのデカップリングに適していないので、誤りです。

・プログラムを2つのEC2インスタンスに移行する。ALBのパスベースのルーティングを使用して各プログラムを実行する。
ALBとEC2インスタンスでアプリケーションをマイクロサービス化することは可能ですが、2つのプログラムの間に中継するサービスがありません。
デカップリングを実現できておらず、各プログラムが互いの処理状況の影響を受けてしまうので、誤りです。

参考

【Amazon ECS(Elastic Container Service)】
Amazon ECS(Elastic Container Service)はコンテナを実行、管理するサービスです。「コンテナ」とはアプリケーションと実行環境をパッケージ化する仮想化技術の一種のことです。
コンテナによる仮想化を用いてアプリケーションを開発・実行するためのソフトウェアに「Docker」があります。Amazon ECSでは、Docker環境で動作するDockerコンテナをサポートしています。
なお、ECSのようなコンテナを管理する仕組みを「コンテナオーケストレーション」といいます。

[コンテナ実行環境]


[ECSでコンテナを管理する]


【コンテナイメージ】
アプリケーションとその実行環境を、コンテナのひな形としてパッケージ化したものを「コンテナイメージ」といいます。コンテナを動作させるソフトウェアである「コンテナエンジン」が、コンテナイメージから「コンテナ」を起動します。コンテナイメージは異なる環境にそのまま持ち込むことができるので、例えばテスト環境から作成したコンテナイメージを本番環境にコピーしてコンテナを起動すれば、同一の環境を構築できます。

【ECSの主要要素】
ECSの主要要素に「クラスター」「タスク」「サービス」があります。

○クラスター
1つ以上のタスクまたはサービスで構成される論理グループです。クラスターでは、コンテナが動作するVPCやサブネットなどを設定します。

○タスク
ECSで管理するコンテナの実行単位です。タスク内のコンテナは、実行するコンテナイメージ、CPUやメモリのスペック、タスクロールなどを定義した「タスク定義」に基づいて起動されます。なお、タスクロールとはコンテナが他のAWSサービスを利用する際に設定するアクセス権限(IAMロール)のことです。

○サービス
クラスター内で必要なタスク数を維持する機能です。あるタスクが異常終了して必要なタスク数を下回った場合、サービスが新しいタスクを起動して自動復旧します。サービスでは、起動するタスクのタスク定義、必要なタスク数、ELBとの連携などを設定します。

[ECSにおける「クラスター」「タスク」「サービス」の関連図]


【ECSの起動タイプ】
ECSで実行・管理するコンテナは、コンテナを実行する環境によって主に「AWS Fargate」と「EC2起動タイプ」があります。

○AWS Fargate(Fargate起動タイプ)
AWS Fargateはコンテナ向けのサーバーレスコンピューティングエンジンです。コンテナ実行環境のCPUやメモリのスペック、アクセス権限(IAM)などを設定するだけで、サーバーの環境構築や管理をすることなくコンテナを実行できます。
Fargateの利用料金は、タスクで指定したCPU/メモリに応じて課金されます。実行したタスクのリソース使用量に対して料金が発生するので、不定期にタスクが実行されるシステムや、常にタスクが実行可能な状態でなければならないシステムなどに向いています。

○EC2起動タイプ
EC2起動タイプはユーザーが管理するEC2インスタンス上でコンテナを実行します。コンテナを実行するEC2インスタンス、ネットワーク、IAMなどを設定すると、ECSがAWS CloudFormationのスタックを作成および実行して、構築したコンテナ実行環境をECSに登録します。EC2起動タイプでは通常のインスタンスと同様に、OSやミドルウェアのアップデート、スケーリングなどのサーバー管理をユーザーで実施する必要があります。
EC2起動タイプの利用料金は、指定したEC2インスタンスタイプに応じて課金されます。インスタンスの起動時間に対して料金が発生するので、インスタンス起動中に多数のタスクが実行されるシステムなどに向いています。

【Amazon ECR(Elastic Container Registry)】
Amazon ECR(Elastic Container Registry)はコンテナイメージを登録・管理するサービスです。ECRに登録されたコンテナイメージをECSが参照し、コンテナ(タスク)を起動できます。ECRのようにコンテナイメージを登録・管理する仕組みを「コンテナレジストリ」といいます。


【マイクロサービス】
マイクロサービスとは最小限の機能を持つ独立したサービスのことです。例えば、オンラインショッピングサービスの機能を「商品管理機能」「ユーザー管理機能」「ショッピングカート機能」「決済機能」に分け、それぞれが自律して動作するのがマイクロサービスです。
マイクロサービスの主なメリットは、ある機能に障害が発生したりアップデートした場合に他の機能への影響を最小限にできること、機能を別のサービスに流用することが容易になるので開発コストの削減に繋がることなどが挙げられます。
コンテナはマイクロサービスの実現に適しています。ひとつのサービスをひとつのコンテナで実行することで効率的にマイクロサービスを構築できます。
なおマイクロサービスとは反対に、大きな機能を一つに総括したシステムをモノリシックなシステムといいます。
上に戻る

誤字

投稿日 2022/06/04

誤字を発見しましたので報告いたします。
問題文内に「モノシリック」と表記されていますが、正しくはモノリシック(Monolithic)かと思われます。
自分で検索して調べなければ間違えて覚えていたところでした。

それと別の問題にはなりますが同じく誤字がありましたのでこちらで報告します。
問題ID 29356 の下記選択肢が「登録しする…」とありました。
訂正よろしくお願いいたします。
「フロントエンドにS3の静的Webサイトホスティングを使用する。アンケートフォームにデータが入力されるとSNSトピックにメッセージを登録しする。AutoScalingに所属したアプリケーション用のEC2インスタンスが、SNSトピックのメッセージを購読してアプリケーションを実行する。SNSからの通知に応じてスケーリングする。」

スタッフからの返信

s staff_satomi

2022/06/06 10:29

jingerbox17様 ご指摘の点を修正致しました。 ご報告、誠にありがとうございます。

この投稿に対して返信しませんか?