1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS ECS モノリシックアプリケーションをマイクロサービスに分割するチュートリアルをやってみた

Last updated at Posted at 2021-07-31

初めに

以下のチュートリアルをやってみました。初めはマイクロサービスについて勉強したかったのでこのチュートリアルをやってみたのですが、ALB についての勉強にもなりました。具体的には ALB のパスベースルーティングを初めて使い、非常に勉強になりました。

なお、このチュートリアルでは EC2 タイプを使っていますが、この記事では Fargate でチュートリアルを検証しています。また、チュートリアルでは CloudFormation を使っていますが、この記事では簡略化のため VPC などはデフォルトのリソースを使い、ALB は手動で作成しています。

マイクロサービスが重要な理由

マイクロサービスのメリットについて簡単に確認します。

  • モノリシックアーキテクチャ
    • スケーリングが困難
    • アプリケーションのコードベースが拡大するにつれ、更新と維持が複雑化する
    • 新しい機能、言語、フレームワーク、テクノロジーの導入が難しい
  • マイクロサービス
    • さまざまなフレームワークやプログラミング言語を使用して作成することができる
    • マイクロサービスは、単一のサービスとして、またはサービスのグループとして個別にデプロイできる

モノリスのコンテナ化

このチュートリアルに使用するリポジトリをクローンします。

git clone https://github.com/awslabs/amazon-ecs-nodejs-microservices

ECR に api という名前のリポジトリを作成し、以下のようにモノリスアプリケーションの Dockerfile のあるディレクトリに移動し、ビルドします。

cd ~/amazon-ecs-nodejs-microservices/2-containerized/services/api
docker build -t api .

ECR にログインし、タグ付け・プッシュを行います。

$(aws ecr get-login --no-include-email --region ap-northeast-1)
docker tag api:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/api:v1
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/api:v1

モノリスのデプロイ

以下の手順に従い ALB と ターゲットグループを作成し、モノリスをデプロイします。

/api/users 、/api/threads、/api/posts にアクセスし、適切なレスポンスが返ってくることを確認します。

モノリスの分割

以下のように機能ごとにマイクロサービスに分割し、それぞれのイメージをビルド・プッシュします。~/amazon-ecs-nodejs-microservices/3-microservices/services にはすでに分割済みのソースコードや Dockerfile が用意されています。

cd ~/amazon-ecs-nodejs-microservices/3-microservices/services
docker build -t posts ./posts
docker build -t users ./users
docker build -t threads ./threads
docker tag users:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/users:v1
docker tag posts:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/posts:v1
docker tag threads:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/threads:v1
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/users:v2
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/posts:v2
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/threads:v2

マイクロサービスのデプロイ

users、threads、posts 用にタスク定義を作成します。

image.png

ELB はモノリスアプリケーションで使用したものを利用します。ターゲットグループごとにリスナールールを作成し、リクエスト URL のパスによってルーティングを行うことができます。

users、threads、posts 用に 3 つのターゲットグループを作成します。ターゲットタイプを「IP」にすることを除いて、デフォルトの設定で作成します。

以下のようにリスナールールを作成します。

image.png

サービスを作成します。作成後、以下のようにモノリスアプリケーションとマイクロサービスアプリケーションが両方デプロイされた状態ですが、上記のリスナールールにより、リクエストはすべてモノリスアプリケーションが処理するようになっています。これはモノリスアプリケーションからマイクロサービスアプリケーションに切り替える時のダウンタイムを 0 にするためです。

1.png

以下のようにトラフィックの切り替えを行います。これ以降、モノリスアプリケーションにリクエストが到達することはありません。

image.png

最後に api サービスのタスクの必要数を 0 にし、マイクロサービスアプリケーションに移行が完了します。

image.png

参考記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?